This is an automated email from the ASF dual-hosted git repository.

epugh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new 8c750e25b11 SOLR-18300 : Update apache.kafka to V4 (#4610)
8c750e25b11 is described below

commit 8c750e25b114d5c436a9aa7d8d3fd56a669d2b1d
Author: Jalaz Kumar <[email protected]>
AuthorDate: Sat Aug 22 18:13:12 2026 +0530

    SOLR-18300 : Update apache.kafka to V4 (#4610)
    
    Signed-off-by: jaykay12 <[email protected]>
    Co-authored-by: SolrBot <[email protected]>
    Co-authored-by: Eric Pugh <[email protected]>
---
 .../unreleased/SOLR-18300-update-kafka-v4.yml      |   8 +
 gradle/libs.versions.toml                          |   5 +-
 .../randomization/policies/solr-tests.policy       |   1 -
 solr/cross-dc-manager/build.gradle                 |  34 +-
 solr/cross-dc-manager/gradle.lockfile              |  51 +-
 .../apache/solr/crossdc/manager/consumer/Util.java |   3 +-
 .../crossdc/manager/DeleteByQueryToIdTest.java     |  39 +-
 .../solr/crossdc/manager/KafkaContainerRule.java   |  70 ++
 .../crossdc/manager/RetryQueueIntegrationTest.java |  38 +-
 .../manager/SolrAndKafkaIntegrationTest.java       |  56 +-
 ...SolrAndKafkaMultiCollectionIntegrationTest.java |  57 +-
 .../crossdc/manager/SolrAndKafkaReindexTest.java   |  37 +-
 .../crossdc/manager/ZkConfigIntegrationTest.java   |  65 +-
 solr/licenses/argparse4j-0.7.0.jar.sha1            |   1 -
 solr/licenses/commons-beanutils-1.11.0.jar.sha1    |   1 -
 solr/licenses/commons-collections-3.2.2.jar.sha1   |   1 -
 solr/licenses/commons-digester-2.1.jar.sha1        |   1 -
 solr/licenses/commons-validator-1.10.1.jar.sha1    |   1 -
 .../jackson-dataformat-csv-2.22.0.jar.sha1         |   1 -
 .../jackson-module-scala_2.13-2.22.0.jar.sha1      |   1 -
 solr/licenses/kafka-clients-3.9.2-test.jar.sha1    |   1 -
 solr/licenses/kafka-clients-3.9.2.jar.sha1         |   1 -
 solr/licenses/kafka-clients-4.3.1.jar.sha1         |   1 +
 .../kafka-group-coordinator-3.9.2.jar.sha1         |   1 -
 .../kafka-group-coordinator-api-3.9.2.jar.sha1     |   1 -
 solr/licenses/kafka-metadata-3.9.2.jar.sha1        |   1 -
 solr/licenses/kafka-raft-3.9.2.jar.sha1            |   1 -
 solr/licenses/kafka-server-3.9.2.jar.sha1          |   1 -
 .../kafka-server-common-3.9.2-test.jar.sha1        |   1 -
 solr/licenses/kafka-server-common-3.9.2.jar.sha1   |   1 -
 solr/licenses/kafka-storage-3.9.2.jar.sha1         |   1 -
 solr/licenses/kafka-storage-api-3.9.2.jar.sha1     |   1 -
 solr/licenses/kafka-streams-3.9.2-test.jar.sha1    |   1 -
 solr/licenses/kafka-streams-3.9.2.jar.sha1         |   1 -
 solr/licenses/kafka-tools-api-3.9.2.jar.sha1       |   1 -
 .../kafka-transaction-coordinator-3.9.2.jar.sha1   |   1 -
 solr/licenses/kafka_2.13-3.9.2-test.jar.sha1       |   1 -
 solr/licenses/kafka_2.13-3.9.2.jar.sha1            |   1 -
 solr/licenses/kafka_2.13-LICENSE-ASL.txt           | 345 --------
 solr/licenses/kafka_2.13-NOTICE.txt                | 863 ---------------------
 solr/licenses/lz4-java-1.10.1.jar.sha1             |   1 -
 solr/licenses/lz4-java-1.10.2.jar.sha1             |   1 +
 solr/licenses/metrics-core-2.2.0.jar.sha1          |   1 -
 solr/licenses/paranamer-2.8.3.jar.sha1             |   1 -
 solr/licenses/pcollections-4.0.1.jar.sha1          |   1 -
 solr/licenses/rocksdbjni-7.9.2.jar.sha1            |   1 -
 .../scala-collection-compat_2.13-2.10.0.jar.sha1   |   1 -
 .../scala-java8-compat_2.13-1.0.2.jar.sha1         |   1 -
 solr/licenses/scala-library-2.13.18.jar.sha1       |   1 -
 solr/licenses/scala-logging_2.13-3.9.5.jar.sha1    |   1 -
 solr/licenses/scala-reflect-2.13.15.jar.sha1       |   1 -
 solr/licenses/testcontainers-kafka-2.0.5.jar.sha1  |   1 +
 solr/licenses/zstd-jni-1.5.6-10.jar.sha1           |   1 +
 solr/licenses/zstd-jni-1.5.6-4.jar.sha1            |   1 -
 solr/modules/cross-dc/gradle.lockfile              |   6 +-
 .../pages/cross-dc-replication.adoc                |   4 +
 56 files changed, 228 insertions(+), 1493 deletions(-)

diff --git a/changelog/unreleased/SOLR-18300-update-kafka-v4.yml 
b/changelog/unreleased/SOLR-18300-update-kafka-v4.yml
new file mode 100644
index 00000000000..3167136f158
--- /dev/null
+++ b/changelog/unreleased/SOLR-18300-update-kafka-v4.yml
@@ -0,0 +1,8 @@
+title: Update apache.kafka to v4
+type: dependency_update
+authors:
+- name: Jalaz Kumar
+- name: Eric Pugh
+links:
+- name: SOLR-18300
+  url: https://issues.apache.org/jira/browse/SOLR-18300
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 65a432d10f4..a29d84f42ed 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -37,7 +37,7 @@ apache-curator = "5.9.0"
 apache-httpcomponents-httpclient = "4.5.14"
 apache-httpcomponents-httpcore = "4.4.16"
 apache-httpcomponents-httpmime = "4.5.14"
-apache-kafka = "3.9.2"
+apache-kafka = "4.3.1"
 apache-log4j = "2.26.0"
 apache-lucene = "10.4.0"
 apache-opennlp = "2.5.10"
@@ -257,8 +257,6 @@ apache-httpcomponents-httpclient = { module = 
"org.apache.httpcomponents:httpcli
 apache-httpcomponents-httpcore = { module = 
"org.apache.httpcomponents:httpcore", version.ref = 
"apache-httpcomponents-httpcore" }
 apache-httpcomponents-httpmime = { module = 
"org.apache.httpcomponents:httpmime", version.ref = 
"apache-httpcomponents-httpmime" }
 apache-kafka-clients = { module = "org.apache.kafka:kafka-clients", 
version.ref = "apache-kafka" }
-apache-kafka-kafka213 = { module = "org.apache.kafka:kafka_2.13", version.ref 
= "apache-kafka" }
-apache-kafka-server-common = { module = 
"org.apache.kafka:kafka-server-common", version.ref = "apache-kafka" }
 apache-kafka-streams = { module = "org.apache.kafka:kafka-streams", 
version.ref = "apache-kafka" }
 apache-log4j-api = { module = "org.apache.logging.log4j:log4j-api", 
version.ref = "apache-log4j" }
 apache-log4j-core = { module = "org.apache.logging.log4j:log4j-core", 
version.ref = "apache-log4j" }
@@ -529,5 +527,6 @@ swagger3-annotations-jakarta = { module = 
"io.swagger.core.v3:swagger-annotation
 swagger3-jaxrs2-jakarta = { module = 
"io.swagger.core.v3:swagger-jaxrs2-jakarta", version.ref = "swagger3" }
 tdunning-tdigest = { module = "com.tdunning:t-digest", version.ref = 
"tdunning-tdigest" }
 testcontainers = { module = "org.testcontainers:testcontainers", version.ref = 
"testcontainers" }
+testcontainers-kafka = { module = "org.testcontainers:testcontainers-kafka", 
version.ref = "testcontainers" }
 threeten-bp = { module = "org.threeten:threetenbp", version.ref = 
"threeten-bp" }
 xerial-snappy-java = { module = "org.xerial.snappy:snappy-java", version.ref = 
"xerial-snappy" }
diff --git a/gradle/testing/randomization/policies/solr-tests.policy 
b/gradle/testing/randomization/policies/solr-tests.policy
index 8709e2c0127..1af2b7df05a 100644
--- a/gradle/testing/randomization/policies/solr-tests.policy
+++ b/gradle/testing/randomization/policies/solr-tests.policy
@@ -255,7 +255,6 @@ grant {
   permission java.io.FilePermission 
"${user.home}${/}.config${/}gcloud${/}active_config", "read,readlink";
   permission java.io.FilePermission 
"${user.home}${/}.config${/}gcloud${/}configurations${/}config_default", 
"read,readlink";
 
-
   // expanded to a wildcard if set, allows all networking everywhere
   permission java.net.SocketPermission "${solr.internal.network.permission}", 
"accept,listen,connect,resolve";
   permission java.net.SocketPermission "metadata.google.internal:80", 
"connect,resolve";
diff --git a/solr/cross-dc-manager/build.gradle 
b/solr/cross-dc-manager/build.gradle
index cb8b5389ff6..66b0ebf3f6d 100644
--- a/solr/cross-dc-manager/build.gradle
+++ b/solr/cross-dc-manager/build.gradle
@@ -1,5 +1,3 @@
-import org.apache.tools.ant.taskdefs.condition.Os
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -40,8 +38,6 @@ dependencies {
   runtimeOnly libs.commonscodec.commonscodec
 
   implementation libs.apache.kafka.clients
-  runtimeOnly libs.apache.kafka.kafka213
-  runtimeOnly libs.apache.kafka.streams
 
   runtimeOnly libs.apache.log4j.api
   runtimeOnly libs.apache.log4j.core
@@ -65,35 +61,17 @@ dependencies {
   testRuntimeOnly libs.bytebuddy
   testRuntimeOnly libs.bytebuddy.agent
 
-  testImplementation(libs.apache.kafka.streams) {
-    artifact {
-      classifier = "test"
-    }
-  }
-  // EmbeddedKafkaCluster loads org.apache.kafka.test.TestCondition from this 
at runtime
-  testRuntimeOnly(libs.apache.kafka.clients) {
-    artifact {
-      classifier = "test"
-    }
-  }
-  testRuntimeOnly(libs.apache.kafka.kafka213) {
-    artifact {
-      classifier = "test"
-    }
-  }
-  testRuntimeOnly(libs.apache.kafka.server.common) {
-    artifact {
-      classifier = "test"
-    }
-  }
+  testImplementation libs.testcontainers.kafka
 }
 
 ext {
   mainClass = 'org.apache.solr.crossdc.manager.consumer.Consumer'
 
-  // Use of the security manager is not supported on windows.
-  // Mockito does not work with it enabled.
-  useSecurityManager = !Os.isFamily(Os.FAMILY_WINDOWS)
+  // Docker/Testcontainers integration tests (KafkaContainerRule) do PATH 
scanning,
+  // spawn processes, and talk to the Docker daemon over a Unix socket -- none 
of
+  // which play well with a static SecurityManager policy. Same rationale as
+  // solr:modules:extraction, Solr's other Testcontainers consumer.
+  useSecurityManager = false
 }
 
 task run(type: JavaExec) {
diff --git a/solr/cross-dc-manager/gradle.lockfile 
b/solr/cross-dc-manager/gradle.lockfile
index 0893d8e825c..f7f13b00582 100644
--- a/solr/cross-dc-manager/gradle.lockfile
+++ b/solr/cross-dc-manager/gradle.lockfile
@@ -2,23 +2,23 @@
 # Manual edits can break the build and are not advised.
 # This file is expected to be part of source control.
 # To regenerate this file, run: ./gradlew :solr:cross-dc-manager:dependencies 
--write-locks
-at.yawk.lz4:lz4-java:1.10.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
+at.yawk.lz4:lz4-java:1.10.2=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.9.1=jarValidation,testCompileClasspath,testRuntimeClasspath
 
com.carrotsearch:hppc:0.10.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
com.fasterxml.jackson.core:jackson-annotations:2.22=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
com.fasterxml.jackson.core:jackson-core:2.22.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
com.fasterxml.jackson.core:jackson-databind:2.22.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.22.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.22.0=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
 
com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.22.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.22.0=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
 
com.fasterxml.jackson.module:jackson-module-jakarta-xmlbind-annotations:2.22.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-com.fasterxml.jackson.module:jackson-module-scala_2.13:2.22.0=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
 
com.fasterxml.jackson:jackson-bom:2.22.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
com.fasterxml.woodstox:woodstox-core:7.2.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
com.github.ben-manes.caffeine:caffeine:3.2.4=annotationProcessor,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testRuntimeClasspath
+com.github.docker-java:docker-java-api:3.7.1=jarValidation,testCompileClasspath,testRuntimeClasspath
+com.github.docker-java:docker-java-transport-zerodep:3.7.1=jarValidation,testCompileClasspath,testRuntimeClasspath
+com.github.docker-java:docker-java-transport:3.7.1=jarValidation,testCompileClasspath,testRuntimeClasspath
 
com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone,testAnnotationProcessor
-com.github.luben:zstd-jni:1.5.6-4=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
+com.github.luben:zstd-jni:1.5.6-10=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor
 
com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor
 
com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor
@@ -39,16 +39,9 @@ 
com.j256.simplemagic:simplemagic:1.17=jarValidation,runtimeClasspath,runtimeLibs
 
com.jayway.jsonpath:json-path:3.0.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
com.lmax:disruptor:4.0.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
com.tdunning:t-digest:3.3=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-com.thoughtworks.paranamer:paranamer:2.8.3=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-com.typesafe.scala-logging:scala-logging_2.13:3.9.5=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-com.yammer.metrics:metrics-core:2.2.0=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-commons-beanutils:commons-beanutils:1.11.0=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
 
commons-cli:commons-cli:1.11.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-commons-codec:commons-codec:1.22.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-commons-collections:commons-collections:3.2.2=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-commons-digester:commons-digester:2.1=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
+commons-codec:commons-codec:1.22.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
commons-io:commons-io:2.22.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-commons-validator:commons-validator:1.10.1=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
 
io.dropwizard.metrics:metrics-core:4.2.39=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
io.github.eisop:dataflow-errorprone:3.41.0-eisop1=annotationProcessor,errorprone,testAnnotationProcessor
 
io.github.java-diff-utils:java-diff-utils:4.12=annotationProcessor,errorprone,testAnnotationProcessor
@@ -102,28 +95,16 @@ 
javax.inject:javax.inject:1=annotationProcessor,errorprone,testAnnotationProcess
 junit:junit:4.13.2=jarValidation,testCompileClasspath,testRuntimeClasspath
 net.bytebuddy:byte-buddy-agent:1.18.11=jarValidation,testRuntimeClasspath
 net.bytebuddy:byte-buddy:1.18.11=jarValidation,testRuntimeClasspath
-net.sf.jopt-simple:jopt-simple:5.0.4=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-net.sourceforge.argparse4j:argparse4j:0.7.0=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
+net.java.dev.jna:jna:5.19.1=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.antlr:antlr4-runtime:4.13.2=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
+org.apache.commons:commons-compress:1.28.0=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.apache.commons:commons-exec:1.6.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.apache.commons:commons-lang3:3.20.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
+org.apache.commons:commons-lang3:3.20.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.apache.commons:commons-math3:3.6.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.apache.curator:curator-client:5.9.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.apache.curator:curator-framework:5.9.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.apache.curator:curator-test:5.9.0=jarValidation,testRuntimeClasspath
-org.apache.kafka:kafka-clients:3.9.2=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
-org.apache.kafka:kafka-group-coordinator-api:3.9.2=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-org.apache.kafka:kafka-group-coordinator:3.9.2=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-org.apache.kafka:kafka-metadata:3.9.2=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-org.apache.kafka:kafka-raft:3.9.2=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-org.apache.kafka:kafka-server-common:3.9.2=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-org.apache.kafka:kafka-server:3.9.2=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-org.apache.kafka:kafka-storage-api:3.9.2=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-org.apache.kafka:kafka-storage:3.9.2=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-org.apache.kafka:kafka-streams:3.9.2=jarValidation,runtimeClasspath,runtimeLibs,testCompileClasspath,testRuntimeClasspath
-org.apache.kafka:kafka-tools-api:3.9.2=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-org.apache.kafka:kafka-transaction-coordinator:3.9.2=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-org.apache.kafka:kafka_2.13:3.9.2=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
+org.apache.kafka:kafka-clients:4.3.1=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.apache.logging.log4j:log4j-1.2-api:2.26.0=solrPlatformLibs
 
org.apache.logging.log4j:log4j-api:2.26.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.apache.logging.log4j:log4j-core:2.26.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
@@ -155,7 +136,6 @@ 
org.apache.lucene:lucene-test-framework:10.4.0=jarValidation,testCompileClasspat
 
org.apache.zookeeper:zookeeper-jute:3.9.5=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.apache.zookeeper:zookeeper:3.9.5=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.apiguardian:apiguardian-api:1.1.2=jarValidation,testRuntimeClasspath
-org.bitbucket.b_c:jose4j:0.9.6=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
 
org.codehaus.woodstox:stax2-api:4.3.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty.compression:jetty-compression-common:12.1.10=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.eclipse.jetty.compression:jetty-compression-gzip:12.1.10=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
@@ -198,6 +178,7 @@ 
org.glassfish.jersey.media:jersey-media-json-jackson:4.0.2=jarValidation,runtime
 
org.glassfish.jersey:jersey-bom:4.0.2=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.hamcrest:hamcrest:3.0=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.javassist:javassist:3.30.2-GA=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
+org.jetbrains:annotations:26.1.0=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.jspecify:jspecify:1.0.0=annotationProcessor,compileClasspath,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
 org.junit.jupiter:junit-jupiter-api:5.6.2=jarValidation,testRuntimeClasspath
 
org.junit.platform:junit-platform-commons:1.6.2=jarValidation,testRuntimeClasspath
@@ -209,15 +190,13 @@ 
org.opentest4j:opentest4j:1.2.0=jarValidation,testRuntimeClasspath
 
org.ow2.asm:asm-commons:9.10.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.ow2.asm:asm-tree:9.10.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.ow2.asm:asm:9.10.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
-org.pcollections:pcollections:4.0.1=annotationProcessor,errorprone,jarValidation,runtimeClasspath,runtimeLibs,testAnnotationProcessor,testRuntimeClasspath
-org.rocksdb:rocksdbjni:7.9.2=jarValidation,runtimeClasspath,runtimeLibs,testCompileClasspath,testRuntimeClasspath
-org.scala-lang.modules:scala-collection-compat_2.13:2.10.0=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-org.scala-lang.modules:scala-java8-compat_2.13:1.0.2=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-org.scala-lang:scala-library:2.13.18=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
-org.scala-lang:scala-reflect:2.13.15=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
+org.pcollections:pcollections:4.0.1=annotationProcessor,errorprone,testAnnotationProcessor
+org.rnorth.duct-tape:duct-tape:1.0.8=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.semver4j:semver4j:6.0.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.slf4j:jcl-over-slf4j:2.0.17=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 org.slf4j:jul-to-slf4j:2.0.17=solrPlatformLibs
 
org.slf4j:slf4j-api:2.0.17=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
+org.testcontainers:testcontainers-kafka:2.0.5=jarValidation,testCompileClasspath,testRuntimeClasspath
+org.testcontainers:testcontainers:2.0.5=jarValidation,testCompileClasspath,testRuntimeClasspath
 
org.xerial.snappy:snappy-java:1.1.10.8=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 empty=missingdoclet,packaging
diff --git 
a/solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/Util.java
 
b/solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/Util.java
index f0d4dcca4da..b31665d61f9 100644
--- 
a/solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/Util.java
+++ 
b/solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/Util.java
@@ -88,7 +88,8 @@ public class Util {
           for (TopicPartition topicPartition : topicPartitions) {
             if (topicPartition.topic().equals(topic)) {
               long endOffset = consumer.position(topicPartition);
-              long committedOffset = 
consumer.committed(topicPartition).offset();
+              long committedOffset =
+                  
consumer.committed(Set.of(topicPartition)).get(topicPartition).offset();
               long updatesInQueue = endOffset - committedOffset;
 
               log.info("Topic: {}", topic);
diff --git 
a/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/DeleteByQueryToIdTest.java
 
b/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/DeleteByQueryToIdTest.java
index 1898def635c..47a9a7fb024 100644
--- 
a/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/DeleteByQueryToIdTest.java
+++ 
b/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/DeleteByQueryToIdTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.solr.crossdc.manager;
 
+import static 
org.apache.solr.crossdc.common.KafkaCrossDcConf.BOOTSTRAP_SERVERS;
+
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
 import java.io.ByteArrayOutputStream;
@@ -26,7 +28,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.CountDownLatch;
-import org.apache.kafka.streams.integration.utils.EmbeddedKafkaCluster;
+import org.apache.kafka.clients.admin.AdminClient;
+import org.apache.kafka.clients.admin.AdminClientConfig;
+import org.apache.kafka.clients.admin.NewTopic;
 import org.apache.lucene.tests.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
@@ -49,6 +53,7 @@ import 
org.apache.solr.util.SolrKafkaTestsIgnoredThreadsFilter;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
+import org.junit.ClassRule;
 import org.junit.Ignore;
 import org.junit.Test;
 import org.slf4j.Logger;
@@ -67,10 +72,7 @@ public class DeleteByQueryToIdTest extends SolrCloudTestCase 
{
 
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-  static final String VERSION_FIELD = "_version_";
-
-  private static final int NUM_BROKERS = 1;
-  public static EmbeddedKafkaCluster kafkaCluster;
+  @ClassRule public static final KafkaContainerRule kafkaContainer = new 
KafkaContainerRule();
 
   protected static volatile MiniSolrCloudCluster solrCluster1;
   protected static volatile MiniSolrCloudCluster solrCluster2;
@@ -94,16 +96,13 @@ public class DeleteByQueryToIdTest extends 
SolrCloudTestCase {
 
     Properties config = new Properties();
 
-    kafkaCluster =
-        new EmbeddedKafkaCluster(NUM_BROKERS, config) {
-          @Override
-          public String bootstrapServers() {
-            return super.bootstrapServers().replaceAll("localhost", 
"127.0.0.1");
-          }
-        };
-    kafkaCluster.start();
+    String bootstrapServers = kafkaContainer.getBootstrapServers();
 
-    kafkaCluster.createTopic(TOPIC, 1, 1);
+    // Replaced legacy in-JVM topic provisioner with official AdminClient 
configurations
+    config.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
+    try (AdminClient adminClient = AdminClient.create(config)) {
+      adminClient.createTopics(List.of(new NewTopic(TOPIC, 3, (short) 
1))).all().get();
+    }
 
     Properties props = new Properties();
 
@@ -114,7 +113,7 @@ public class DeleteByQueryToIdTest extends 
SolrCloudTestCase {
             .configure();
 
     props.setProperty("solr.crossdc.topicName", TOPIC);
-    props.setProperty("solr.crossdc.bootstrapServers", 
kafkaCluster.bootstrapServers());
+    props.setProperty(BOOTSTRAP_SERVERS, bootstrapServers);
 
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     props.store(baos, "");
@@ -148,7 +147,6 @@ public class DeleteByQueryToIdTest extends 
SolrCloudTestCase {
     solrCluster2.getSolrClient().request(createTarget2);
     solrCluster2.waitForActiveCollection(COLLECTION2, 1, 1);
 
-    String bootstrapServers = kafkaCluster.bootstrapServers();
     log.info("bootstrapServers={}", bootstrapServers);
 
     Map<String, Object> properties = new HashMap<>();
@@ -189,14 +187,6 @@ public class DeleteByQueryToIdTest extends 
SolrCloudTestCase {
       consumer.shutdown();
     }
 
-    try {
-      if (kafkaCluster != null) {
-        kafkaCluster.stop();
-      }
-    } catch (Exception e) {
-      log.error("Exception stopping Kafka cluster", e);
-    }
-
     if (solrCluster1 != null) {
       solrCluster1.getZkServer().getZkClient().printLayoutToStream(System.out);
       solrCluster1.shutdown();
@@ -208,7 +198,6 @@ public class DeleteByQueryToIdTest extends 
SolrCloudTestCase {
 
     solrCluster1 = null;
     solrCluster2 = null;
-    kafkaCluster = null;
     consumer = null;
   }
 
diff --git 
a/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/KafkaContainerRule.java
 
b/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/KafkaContainerRule.java
new file mode 100644
index 00000000000..0ec73d2e18b
--- /dev/null
+++ 
b/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/KafkaContainerRule.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.crossdc.manager;
+
+import java.lang.invoke.MethodHandles;
+import org.junit.Assume;
+import org.junit.rules.ExternalResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.DockerClientFactory;
+import org.testcontainers.kafka.KafkaContainer;
+import org.testcontainers.utility.DockerImageName;
+
+/**
+ * JUnit rule that manages a single Kafka broker Testcontainer. Declare as a 
{@code @ClassRule} so
+ * the (expensive to start) broker is shared across all {@code @Test} methods 
in a class instead of
+ * being restarted for each one; JUnit starts it before, and stops it after, 
the whole class runs.
+ *
+ * <p>Skips the calling test (via {@link Assume}) instead of failing outright 
if
+ * Docker/Testcontainers isn't available in this environment.
+ */
+public class KafkaContainerRule extends ExternalResource {
+
+  private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  public static final String KAFKA_DOCKER_IMAGE = "apache/kafka:4.3.1";
+
+  private KafkaContainer kafkaContainer;
+
+  @Override
+  protected void before() {
+    Assume.assumeTrue(
+        "Docker/Testcontainers not available; skipping test",
+        DockerClientFactory.instance().isDockerAvailable());
+    kafkaContainer = new 
KafkaContainer(DockerImageName.parse(KAFKA_DOCKER_IMAGE));
+    kafkaContainer.start();
+  }
+
+  @Override
+  protected void after() {
+    if (kafkaContainer != null) {
+      try {
+        kafkaContainer.stop();
+      } catch (Exception e) {
+        log.error("Exception stopping Kafka container", e);
+      } finally {
+        kafkaContainer = null;
+      }
+    }
+  }
+
+  public String getBootstrapServers() {
+    return kafkaContainer.getBootstrapServers();
+  }
+}
diff --git 
a/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/RetryQueueIntegrationTest.java
 
b/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/RetryQueueIntegrationTest.java
index 1e06264c965..e69171a01cd 100644
--- 
a/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/RetryQueueIntegrationTest.java
+++ 
b/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/RetryQueueIntegrationTest.java
@@ -21,9 +21,12 @@ import 
com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
 import java.lang.invoke.MethodHandles;
 import java.nio.file.Path;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Properties;
-import org.apache.kafka.streams.integration.utils.EmbeddedKafkaCluster;
+import org.apache.kafka.clients.admin.AdminClient;
+import org.apache.kafka.clients.admin.AdminClientConfig;
+import org.apache.kafka.clients.admin.NewTopic;
 import org.apache.lucene.tests.util.LuceneTestCase;
 import org.apache.lucene.tests.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
@@ -43,6 +46,7 @@ import 
org.apache.solr.util.SolrKafkaTestsIgnoredThreadsFilter;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -60,10 +64,7 @@ public class RetryQueueIntegrationTest extends 
SolrTestCaseJ4 {
 
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-  static final String VERSION_FIELD = "_version_";
-
-  private static final int NUM_BROKERS = 1;
-  public static EmbeddedKafkaCluster kafkaCluster;
+  @ClassRule public static final KafkaContainerRule kafkaContainer = new 
KafkaContainerRule();
 
   protected static volatile MiniSolrCloudCluster solrCluster1;
   protected static volatile MiniSolrCloudCluster solrCluster2;
@@ -89,19 +90,16 @@ public class RetryQueueIntegrationTest extends 
SolrTestCaseJ4 {
     config.put("unclean.leader.election.enable", "true");
     config.put("enable.partition.eof", "false");
 
-    kafkaCluster =
-        new EmbeddedKafkaCluster(NUM_BROKERS, config) {
-          @Override
-          public String bootstrapServers() {
-            return super.bootstrapServers().replaceAll("localhost", 
"127.0.0.1");
-          }
-        };
-    kafkaCluster.start();
+    String bootstrapServers = kafkaContainer.getBootstrapServers();
 
-    kafkaCluster.createTopic(TOPIC, 1, 1);
+    // Replaced legacy in-JVM topic provisioner with official AdminClient 
configurations
+    config.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
+    try (AdminClient adminClient = AdminClient.create(config)) {
+      adminClient.createTopics(List.of(new NewTopic(TOPIC, 3, (short) 
1))).all().get();
+    }
 
     System.setProperty("solr.crossdc.topicName", TOPIC);
-    System.setProperty("solr.crossdc.bootstrapServers", 
kafkaCluster.bootstrapServers());
+    System.setProperty("solr.crossdc.bootstrapServers", 
kafkaContainer.getBootstrapServers());
 
     baseDir1 = createTempDir();
     Path zkDir1 = baseDir1.resolve("zookeeper/server1/data");
@@ -132,7 +130,6 @@ public class RetryQueueIntegrationTest extends 
SolrTestCaseJ4 {
 
     CloudSolrClient client = solrCluster1.getSolrClient(COLLECTION);
 
-    String bootstrapServers = kafkaCluster.bootstrapServers();
     log.info("bootstrapServers={}", bootstrapServers);
 
     Map<String, Object> properties = new HashMap<>();
@@ -174,14 +171,6 @@ public class RetryQueueIntegrationTest extends 
SolrTestCaseJ4 {
       consumer.shutdown();
     }
 
-    try {
-      if (kafkaCluster != null) {
-        kafkaCluster.stop();
-      }
-    } catch (Exception e) {
-      log.error("Exception stopping Kafka cluster", e);
-    }
-
     if (solrCluster1 != null) {
       solrCluster1.shutdown();
     }
@@ -199,7 +188,6 @@ public class RetryQueueIntegrationTest extends 
SolrTestCaseJ4 {
     consumer = null;
     solrCluster1 = null;
     solrCluster2 = null;
-    kafkaCluster = null;
     zkTestServer1 = null;
     zkTestServer2 = null;
   }
diff --git 
a/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaIntegrationTest.java
 
b/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaIntegrationTest.java
index 797080454b5..5206def632a 100644
--- 
a/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaIntegrationTest.java
+++ 
b/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaIntegrationTest.java
@@ -46,12 +46,14 @@ import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.IntStream;
 import org.apache.commons.io.IOUtils;
+import org.apache.kafka.clients.admin.AdminClient;
+import org.apache.kafka.clients.admin.AdminClientConfig;
+import org.apache.kafka.clients.admin.NewTopic;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
 import org.apache.kafka.clients.producer.KafkaProducer;
 import org.apache.kafka.clients.producer.Producer;
 import org.apache.kafka.clients.producer.ProducerRecord;
 import org.apache.kafka.common.serialization.StringSerializer;
-import org.apache.kafka.streams.integration.utils.EmbeddedKafkaCluster;
 import org.apache.lucene.tests.util.LuceneTestCase.Nightly;
 import org.apache.lucene.tests.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
@@ -88,6 +90,7 @@ import org.apache.solr.util.TimeOut;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
+import org.junit.ClassRule;
 import org.junit.Ignore;
 import org.junit.Test;
 import org.noggit.ObjectBuilder;
@@ -108,8 +111,7 @@ public class SolrAndKafkaIntegrationTest extends 
SolrCloudTestCase {
 
   private static final int MAX_DOC_SIZE_BYTES = 
Integer.parseInt(DEFAULT_MAX_REQUEST_SIZE);
 
-  private static final int NUM_BROKERS = 1;
-  public EmbeddedKafkaCluster kafkaCluster;
+  @ClassRule public static final KafkaContainerRule kafkaContainer = new 
KafkaContainerRule();
 
   private static class ConsumerBatch {
     final String kafkaTopic;
@@ -171,6 +173,10 @@ public class SolrAndKafkaIntegrationTest extends 
SolrCloudTestCase {
 
   private static final String TOPIC = "topic1";
 
+  // Unique per test method (built from TOPIC), so tests sharing the Kafka 
container don't see
+  // each other's topics, records, or consumer group offsets.
+  private String topic;
+
   private static final String COLLECTION = "collection1";
   private static final String ALT_COLLECTION = "collection2";
   private static Thread.UncaughtExceptionHandler uceh;
@@ -210,22 +216,19 @@ public class SolrAndKafkaIntegrationTest extends 
SolrCloudTestCase {
         };
     Properties config = new Properties();
 
-    kafkaCluster =
-        new EmbeddedKafkaCluster(NUM_BROKERS, config) {
-          @Override
-          public String bootstrapServers() {
-            return super.bootstrapServers().replaceAll("localhost", 
"127.0.0.1");
-          }
-        };
-    kafkaCluster.start();
+    topic = TOPIC + "-" + Integer.toHexString(random().nextInt());
+    String bootstrapServers = kafkaContainer.getBootstrapServers();
 
-    // create many partitions to test for re-ordered reads
-    kafkaCluster.createTopic(TOPIC, 3, 1);
+    // Replaced legacy in-JVM topic provisioner with official AdminClient 
configurations
+    config.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
+    try (AdminClient adminClient = AdminClient.create(config)) {
+      adminClient.createTopics(List.of(new NewTopic(topic, 3, (short) 
1))).all().get();
+    }
 
-    // ensure small batches to test multi-partition ordering
+    // Ensure small batches to test multi-partition ordering
     System.setProperty(BATCH_SIZE_BYTES, "100");
-    System.setProperty(TOPIC_NAME, TOPIC);
-    System.setProperty(BOOTSTRAP_SERVERS, kafkaCluster.bootstrapServers());
+    System.setProperty(TOPIC_NAME, topic);
+    System.setProperty(BOOTSTRAP_SERVERS, bootstrapServers);
     System.setProperty(INDEX_UNMIRRORABLE_DOCS, "false");
     System.setProperty(COLLAPSE_UPDATES, "none");
 
@@ -245,14 +248,13 @@ public class SolrAndKafkaIntegrationTest extends 
SolrCloudTestCase {
     solrCluster2.getSolrClient().request(create2);
     solrCluster2.waitForActiveCollection(COLLECTION, 1, 1);
 
-    String bootstrapServers = kafkaCluster.bootstrapServers();
     log.info("bootstrapServers={}", bootstrapServers);
 
     Map<String, Object> properties = new HashMap<>();
     properties.put(KafkaCrossDcConf.BOOTSTRAP_SERVERS, bootstrapServers);
     properties.put(KafkaCrossDcConf.ZK_CONNECT_STRING, 
solrCluster2.getZkServer().getZkAddress());
-    properties.put(KafkaCrossDcConf.TOPIC_NAME, TOPIC);
-    properties.put(KafkaCrossDcConf.GROUP_ID, "group1");
+    properties.put(KafkaCrossDcConf.TOPIC_NAME, topic);
+    properties.put(KafkaCrossDcConf.GROUP_ID, "group1-" + topic);
     properties.put(KafkaCrossDcConf.MAX_REQUEST_SIZE_BYTES, 
MAX_DOC_SIZE_BYTES);
     consumer.start(properties);
   }
@@ -270,15 +272,9 @@ public class SolrAndKafkaIntegrationTest extends 
SolrCloudTestCase {
       solrCluster2.shutdown();
     }
 
-    consumer.shutdown();
-    consumer = null;
-
-    try {
-      // kafkaCluster.deleteAllTopicsAndWait(5000);
-      kafkaCluster.stop();
-      kafkaCluster = null;
-    } catch (Exception e) {
-      log.error("Exception stopping Kafka cluster", e);
+    if (consumer != null) {
+      consumer.shutdown();
+      consumer = null;
     }
 
     Thread.setDefaultUncaughtExceptionHandler(uceh);
@@ -303,7 +299,7 @@ public class SolrAndKafkaIntegrationTest extends 
SolrCloudTestCase {
   @Test
   public void testProducerToCloud() throws Exception {
     Properties properties = new Properties();
-    properties.put("bootstrap.servers", kafkaCluster.bootstrapServers());
+    properties.put("bootstrap.servers", kafkaContainer.getBootstrapServers());
     properties.put("acks", "all");
     properties.put("retries", 1);
     properties.put("batch.size", 1);
@@ -319,7 +315,7 @@ public class SolrAndKafkaIntegrationTest extends 
SolrCloudTestCase {
     updateRequest.setParam("collection", COLLECTION);
     MirroredSolrRequest<?> mirroredSolrRequest = new 
MirroredSolrRequest<>(updateRequest);
     producer.send(
-        new ProducerRecord<>(TOPIC, mirroredSolrRequest),
+        new ProducerRecord<>(topic, mirroredSolrRequest),
         (metadata, exception) ->
             log.warn("Producer finished sending metadata={}, exception={}", 
metadata, exception));
     producer.flush();
diff --git 
a/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaMultiCollectionIntegrationTest.java
 
b/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaMultiCollectionIntegrationTest.java
index e859e80f4b8..5e0795d4ff8 100644
--- 
a/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaMultiCollectionIntegrationTest.java
+++ 
b/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaMultiCollectionIntegrationTest.java
@@ -30,7 +30,9 @@ import java.util.Properties;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
-import org.apache.kafka.streams.integration.utils.EmbeddedKafkaCluster;
+import org.apache.kafka.clients.admin.AdminClient;
+import org.apache.kafka.clients.admin.AdminClientConfig;
+import org.apache.kafka.clients.admin.NewTopic;
 import org.apache.lucene.tests.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.client.solrj.SolrClient;
@@ -52,6 +54,7 @@ import 
org.apache.solr.util.SolrKafkaTestsIgnoredThreadsFilter;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
+import org.junit.ClassRule;
 import org.junit.Ignore;
 import org.junit.Test;
 import org.slf4j.Logger;
@@ -65,17 +68,14 @@ import org.slf4j.LoggerFactory;
       SolrKafkaTestsIgnoredThreadsFilter.class
     })
 @ThreadLeakLingering(linger = 5000)
-@Ignore("This test relies on collecton properties and I don't see where they 
are set anymore")
+@Ignore("This test relies on collection properties and I don't see where they 
are set anymore")
 public class SolrAndKafkaMultiCollectionIntegrationTest extends 
SolrCloudTestCase {
 
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
   private static final int MAX_DOC_SIZE_BYTES = 
Integer.parseInt(DEFAULT_MAX_REQUEST_SIZE);
 
-  static final String VERSION_FIELD = "_version_";
-
-  private static final int NUM_BROKERS = 1;
-  public EmbeddedKafkaCluster kafkaCluster;
+  @ClassRule public static final KafkaContainerRule kafkaContainer = new 
KafkaContainerRule();
 
   protected volatile MiniSolrCloudCluster solrCluster1;
   protected volatile MiniSolrCloudCluster solrCluster2;
@@ -84,6 +84,10 @@ public class SolrAndKafkaMultiCollectionIntegrationTest 
extends SolrCloudTestCas
 
   private static final String TOPIC = "topic1";
 
+  // Unique per test method (built from TOPIC), so tests sharing the Kafka 
container don't see
+  // each other's topics, records, or consumer group offsets.
+  private String topic;
+
   private static final String COLLECTION = "collection1";
   private static final String ALT_COLLECTION = "collection2";
 
@@ -98,22 +102,20 @@ public class SolrAndKafkaMultiCollectionIntegrationTest 
extends SolrCloudTestCas
     consumer = new Consumer();
     Properties config = new Properties();
 
-    kafkaCluster =
-        new EmbeddedKafkaCluster(NUM_BROKERS, config) {
-          @Override
-          public String bootstrapServers() {
-            return super.bootstrapServers().replaceAll("localhost", 
"127.0.0.1");
-          }
-        };
-    kafkaCluster.start();
+    topic = TOPIC + "-" + Integer.toHexString(random().nextInt());
+    String bootstrapServers = kafkaContainer.getBootstrapServers();
 
-    kafkaCluster.createTopic(TOPIC, 1, 1);
+    // Replaced legacy in-JVM topic provisioner with official AdminClient 
configurations
+    config.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
+    try (AdminClient adminClient = AdminClient.create(config)) {
+      adminClient.createTopics(List.of(new NewTopic(topic, 3, (short) 
1))).all().get();
+    }
 
     // in this test we will count on collection properties for topicName and 
enabled=true
     System.setProperty("solr.crossdc.enabled", "false");
-    // System.setProperty("solr.crossdc.topicName", TOPIC);
+    // System.setProperty("solr.crossdc.topicName", topic);
 
-    System.setProperty("solr.crossdc.bootstrapServers", 
kafkaCluster.bootstrapServers());
+    System.setProperty(KafkaCrossDcConf.BOOTSTRAP_SERVERS, 
kafkaContainer.getBootstrapServers());
     System.setProperty(INDEX_UNMIRRORABLE_DOCS, "false");
 
     solrCluster1 =
@@ -135,20 +137,19 @@ public class SolrAndKafkaMultiCollectionIntegrationTest 
extends SolrCloudTestCas
     // Update the collection property "enabled" to true
     CollectionProperties cp = new 
CollectionProperties(solrCluster1.getZkClient());
     cp.setCollectionProperty(COLLECTION, "solr.crossdc.enabled", "true");
-    cp.setCollectionProperty(COLLECTION, "solr.crossdc.topicName", TOPIC);
+    cp.setCollectionProperty(COLLECTION, "solr.crossdc.topicName", topic);
     // Reloading the collection
     CollectionAdminRequest.Reload reloadRequest =
         CollectionAdminRequest.reloadCollection(COLLECTION);
     reloadRequest.process(solrCluster1.getSolrClient());
 
-    String bootstrapServers = kafkaCluster.bootstrapServers();
     log.info("bootstrapServers={}", bootstrapServers);
 
     Map<String, Object> properties = new HashMap<>();
     properties.put(KafkaCrossDcConf.BOOTSTRAP_SERVERS, bootstrapServers);
     properties.put(KafkaCrossDcConf.ZK_CONNECT_STRING, 
solrCluster2.getZkServer().getZkAddress());
-    properties.put(KafkaCrossDcConf.TOPIC_NAME, TOPIC);
-    properties.put(KafkaCrossDcConf.GROUP_ID, "group1");
+    properties.put(KafkaCrossDcConf.TOPIC_NAME, topic);
+    properties.put(KafkaCrossDcConf.GROUP_ID, "group1-" + topic);
     properties.put(KafkaCrossDcConf.MAX_REQUEST_SIZE_BYTES, 
MAX_DOC_SIZE_BYTES);
     consumer.start(properties);
   }
@@ -157,7 +158,7 @@ public class SolrAndKafkaMultiCollectionIntegrationTest 
extends SolrCloudTestCas
   public void afterSolrAndKafkaIntegrationTest() throws Exception {
     ObjectReleaseTracker.clear();
 
-    Util.printKafkaInfo(kafkaCluster.bootstrapServers(), 
"SolrCrossDCConsumer");
+    Util.printKafkaInfo(kafkaContainer.getBootstrapServers(), 
"SolrCrossDCConsumer");
 
     if (solrCluster1 != null) {
       solrCluster1.getZkServer().getZkClient().printLayoutToStream(System.out);
@@ -170,14 +171,6 @@ public class SolrAndKafkaMultiCollectionIntegrationTest 
extends SolrCloudTestCas
 
     consumer.shutdown();
     consumer = null;
-
-    try {
-      // kafkaCluster.deleteAllTopicsAndWait(10000);
-      kafkaCluster.stop();
-      kafkaCluster = null;
-    } catch (Exception e) {
-      log.error("Exception stopping Kafka cluster", e);
-    }
   }
 
   private static SolrInputDocument getDoc() {
@@ -208,7 +201,7 @@ public class SolrAndKafkaMultiCollectionIntegrationTest 
extends SolrCloudTestCas
       // Update the collection property "enabled" to true
       CollectionProperties cp = new 
CollectionProperties(solrCluster1.getZkClient());
       cp.setCollectionProperty(ALT_COLLECTION, "solr.crossdc.enabled", "true");
-      cp.setCollectionProperty(ALT_COLLECTION, "solr.crossdc.topicName", 
TOPIC);
+      cp.setCollectionProperty(ALT_COLLECTION, "solr.crossdc.topicName", 
topic);
       // Reloading the collection
       CollectionAdminRequest.Reload reloadRequest =
           CollectionAdminRequest.reloadCollection(ALT_COLLECTION);
@@ -264,7 +257,7 @@ public class SolrAndKafkaMultiCollectionIntegrationTest 
extends SolrCloudTestCas
       // Update the collection property "enabled" to true
       CollectionProperties cp = new 
CollectionProperties(solrCluster1.getZkClient());
       cp.setCollectionProperty(ALT_COLLECTION, "solr.crossdc.enabled", "true");
-      cp.setCollectionProperty(ALT_COLLECTION, "solr.crossdc.topicName", 
TOPIC);
+      cp.setCollectionProperty(ALT_COLLECTION, "solr.crossdc.topicName", 
topic);
       // Reloading the collection
       CollectionAdminRequest.Reload reloadRequest =
           CollectionAdminRequest.reloadCollection(ALT_COLLECTION);
diff --git 
a/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaReindexTest.java
 
b/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaReindexTest.java
index a7c12207e57..7e1cc540b6d 100644
--- 
a/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaReindexTest.java
+++ 
b/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaReindexTest.java
@@ -25,7 +25,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
-import org.apache.kafka.streams.integration.utils.EmbeddedKafkaCluster;
+import org.apache.kafka.clients.admin.AdminClient;
+import org.apache.kafka.clients.admin.AdminClientConfig;
+import org.apache.kafka.clients.admin.NewTopic;
 import org.apache.lucene.tests.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.client.solrj.SolrServerException;
@@ -43,6 +45,7 @@ import 
org.apache.solr.util.SolrKafkaTestsIgnoredThreadsFilter;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
+import org.junit.ClassRule;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -58,10 +61,7 @@ public class SolrAndKafkaReindexTest extends 
SolrCloudTestCase {
 
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-  static final String VERSION_FIELD = "_version_";
-
-  private static final int NUM_BROKERS = 1;
-  public static EmbeddedKafkaCluster kafkaCluster;
+  @ClassRule public static final KafkaContainerRule kafkaContainer = new 
KafkaContainerRule();
 
   protected static volatile MiniSolrCloudCluster solrCluster1;
   protected static volatile MiniSolrCloudCluster solrCluster2;
@@ -83,19 +83,16 @@ public class SolrAndKafkaReindexTest extends 
SolrCloudTestCase {
     config.put("unclean.leader.election.enable", "true");
     config.put("enable.partition.eof", "false");
 
-    kafkaCluster =
-        new EmbeddedKafkaCluster(NUM_BROKERS, config) {
-          @Override
-          public String bootstrapServers() {
-            return super.bootstrapServers().replaceAll("localhost", 
"127.0.0.1");
-          }
-        };
-    kafkaCluster.start();
+    String bootstrapServers = kafkaContainer.getBootstrapServers();
 
-    kafkaCluster.createTopic(TOPIC, 1, 1);
+    // Replaced legacy in-JVM topic provisioner with official AdminClient 
configurations
+    config.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
+    try (AdminClient adminClient = AdminClient.create(config)) {
+      adminClient.createTopics(List.of(new NewTopic(TOPIC, 3, (short) 
1))).all().get();
+    }
 
     System.setProperty("solr.crossdc.topicName", TOPIC);
-    System.setProperty("solr.crossdc.bootstrapServers", 
kafkaCluster.bootstrapServers());
+    System.setProperty(KafkaCrossDcConf.BOOTSTRAP_SERVERS, 
kafkaContainer.getBootstrapServers());
 
     solrCluster1 =
         configureCluster(3).addConfig("conf", 
getFile("configs/cloud-minimal/conf")).configure();
@@ -113,7 +110,6 @@ public class SolrAndKafkaReindexTest extends 
SolrCloudTestCase {
     solrCluster2.getSolrClient().request(create2);
     solrCluster2.waitForActiveCollection(COLLECTION, 2, 6);
 
-    String bootstrapServers = kafkaCluster.bootstrapServers();
     log.info("bootstrapServers={}", bootstrapServers);
 
     Map<String, Object> properties = new HashMap<>();
@@ -148,17 +144,8 @@ public class SolrAndKafkaReindexTest extends 
SolrCloudTestCase {
       consumer.shutdown();
     }
 
-    try {
-      if (kafkaCluster != null) {
-        kafkaCluster.stop();
-      }
-    } catch (Exception e) {
-      log.error("Exception stopping Kafka cluster, ignoring", e);
-    }
-
     solrCluster1 = null;
     solrCluster2 = null;
-    kafkaCluster = null;
     consumer = null;
   }
 
diff --git 
a/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/ZkConfigIntegrationTest.java
 
b/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/ZkConfigIntegrationTest.java
index e0af7eaeb61..d4daa6f8040 100644
--- 
a/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/ZkConfigIntegrationTest.java
+++ 
b/solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/ZkConfigIntegrationTest.java
@@ -21,9 +21,12 @@ import 
com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
 import java.io.ByteArrayOutputStream;
 import java.lang.invoke.MethodHandles;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Properties;
-import org.apache.kafka.streams.integration.utils.EmbeddedKafkaCluster;
+import org.apache.kafka.clients.admin.AdminClient;
+import org.apache.kafka.clients.admin.AdminClientConfig;
+import org.apache.kafka.clients.admin.NewTopic;
 import org.apache.lucene.tests.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
@@ -41,6 +44,7 @@ import 
org.apache.solr.util.SolrKafkaTestsIgnoredThreadsFilter;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
+import org.junit.ClassRule;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -57,10 +61,7 @@ public class ZkConfigIntegrationTest extends 
SolrCloudTestCase {
 
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-  static final String VERSION_FIELD = "_version_";
-
-  private static final int NUM_BROKERS = 1;
-  public static EmbeddedKafkaCluster kafkaCluster;
+  @ClassRule public static final KafkaContainerRule kafkaContainer = new 
KafkaContainerRule();
 
   protected static volatile MiniSolrCloudCluster solrCluster1;
   protected static volatile MiniSolrCloudCluster solrCluster2;
@@ -80,24 +81,20 @@ public class ZkConfigIntegrationTest extends 
SolrCloudTestCase {
     System.setProperty(KafkaCrossDcConf.PORT, "-1");
     consumer1 = new Consumer();
     consumer2 = new Consumer();
-    Properties config = new Properties();
-    config.put("unclean.leader.election.enable", "true");
-    config.put("enable.partition.eof", "false");
-
-    kafkaCluster =
-        new EmbeddedKafkaCluster(NUM_BROKERS, config) {
-          @Override
-          public String bootstrapServers() {
-            return super.bootstrapServers().replaceAll("localhost", 
"127.0.0.1");
-          }
-        };
-    kafkaCluster.start();
 
-    kafkaCluster.createTopic(TOPIC1, 1, 1);
-    kafkaCluster.createTopic(TOPIC2, 1, 1);
-
-    // System.setProperty("solr.crossdc.topicName", null);
-    // System.setProperty("solr.crossdc.bootstrapServers", null);
+    String bootstrapServers = kafkaContainer.getBootstrapServers();
+    log.info("Kafka Testcontainer started. bootstrapServers={}", 
bootstrapServers);
+
+    // Create required execution topics using standard Kafka AdminClient 
mechanics
+    Properties adminProps = new Properties();
+    adminProps.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, 
bootstrapServers);
+    try (AdminClient adminClient = AdminClient.create(adminProps)) {
+      adminClient
+          .createTopics(
+              List.of(new NewTopic(TOPIC1, 1, (short) 1), new NewTopic(TOPIC2, 
1, (short) 1)))
+          .all()
+          .get();
+    }
 
     Properties props = new Properties();
 
@@ -105,10 +102,10 @@ public class ZkConfigIntegrationTest extends 
SolrCloudTestCase {
         configureCluster(1).addConfig("conf", 
getFile("configs/cloud-minimal/conf")).configure();
 
     props.setProperty(KafkaCrossDcConf.TOPIC_NAME, TOPIC2);
-    props.setProperty(KafkaCrossDcConf.BOOTSTRAP_SERVERS, 
kafkaCluster.bootstrapServers());
+    props.setProperty(KafkaCrossDcConf.BOOTSTRAP_SERVERS, bootstrapServers);
 
     System.setProperty(KafkaCrossDcConf.TOPIC_NAME, TOPIC2);
-    System.setProperty(KafkaCrossDcConf.BOOTSTRAP_SERVERS, 
kafkaCluster.bootstrapServers());
+    System.setProperty(KafkaCrossDcConf.BOOTSTRAP_SERVERS, bootstrapServers);
 
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     props.store(baos, "");
@@ -129,22 +126,17 @@ public class ZkConfigIntegrationTest extends 
SolrCloudTestCase {
     solrCluster2.waitForActiveCollection(COLLECTION, 1, 1);
 
     props = new Properties();
-    props.setProperty(KafkaCrossDcConf.BOOTSTRAP_SERVERS, 
kafkaCluster.bootstrapServers());
+    props.setProperty(KafkaCrossDcConf.BOOTSTRAP_SERVERS, bootstrapServers);
 
     baos = new ByteArrayOutputStream();
     props.store(baos, "");
     data = baos.toByteArray();
     solrCluster2.getZkClient().makePath("/crossdc.properties", data, true);
 
-    String bootstrapServers = kafkaCluster.bootstrapServers();
-    log.info("bootstrapServers={}", bootstrapServers);
-
     Map<String, Object> properties = new HashMap<>();
-    Object put =
-        properties.put(
-            KafkaCrossDcConf.ZK_CONNECT_STRING, 
solrCluster2.getZkServer().getZkAddress());
+    properties.put(KafkaCrossDcConf.ZK_CONNECT_STRING, 
solrCluster2.getZkServer().getZkAddress());
 
-    System.setProperty(KafkaCrossDcConf.BOOTSTRAP_SERVERS, 
kafkaCluster.bootstrapServers());
+    System.setProperty(KafkaCrossDcConf.BOOTSTRAP_SERVERS, bootstrapServers);
 
     consumer1.start(properties);
 
@@ -175,17 +167,8 @@ public class ZkConfigIntegrationTest extends 
SolrCloudTestCase {
       consumer2.shutdown();
     }
 
-    if (kafkaCluster != null) {
-      try {
-        kafkaCluster.stop();
-      } catch (Exception e) {
-        log.error("Exception stopping Kafka cluster", e);
-      }
-    }
-
     solrCluster1 = null;
     solrCluster2 = null;
-    kafkaCluster = null;
     consumer1 = null;
     consumer2 = null;
   }
diff --git a/solr/licenses/argparse4j-0.7.0.jar.sha1 
b/solr/licenses/argparse4j-0.7.0.jar.sha1
deleted file mode 100644
index 23beccf9588..00000000000
--- a/solr/licenses/argparse4j-0.7.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6f0621d0c3888de39e0f06d01f37ba53a798e657
diff --git a/solr/licenses/commons-beanutils-1.11.0.jar.sha1 
b/solr/licenses/commons-beanutils-1.11.0.jar.sha1
deleted file mode 100644
index b445b39655f..00000000000
--- a/solr/licenses/commons-beanutils-1.11.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ac03ea606d13de04c2e4508227680faff151f491
diff --git a/solr/licenses/commons-collections-3.2.2.jar.sha1 
b/solr/licenses/commons-collections-3.2.2.jar.sha1
deleted file mode 100644
index 3284fcae413..00000000000
--- a/solr/licenses/commons-collections-3.2.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8ad72fe39fa8c91eaaf12aadb21e0c3661fe26d5
diff --git a/solr/licenses/commons-digester-2.1.jar.sha1 
b/solr/licenses/commons-digester-2.1.jar.sha1
deleted file mode 100644
index 0a4c66f0bb9..00000000000
--- a/solr/licenses/commons-digester-2.1.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-73a8001e7a54a255eef0f03521ec1805dc738ca0
diff --git a/solr/licenses/commons-validator-1.10.1.jar.sha1 
b/solr/licenses/commons-validator-1.10.1.jar.sha1
deleted file mode 100644
index 8a885b5ada9..00000000000
--- a/solr/licenses/commons-validator-1.10.1.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cdf5c2a69aad509c4db54786f19f1e1ccc471bcf
diff --git a/solr/licenses/jackson-dataformat-csv-2.22.0.jar.sha1 
b/solr/licenses/jackson-dataformat-csv-2.22.0.jar.sha1
deleted file mode 100644
index 14ad17bebba..00000000000
--- a/solr/licenses/jackson-dataformat-csv-2.22.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-cb79c48fff4f42e970d16e26754ab8b33b569410
diff --git a/solr/licenses/jackson-module-scala_2.13-2.22.0.jar.sha1 
b/solr/licenses/jackson-module-scala_2.13-2.22.0.jar.sha1
deleted file mode 100644
index 06254cea850..00000000000
--- a/solr/licenses/jackson-module-scala_2.13-2.22.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ee9cda18f877b8b650005575915a379d344a0ddb
diff --git a/solr/licenses/kafka-clients-3.9.2-test.jar.sha1 
b/solr/licenses/kafka-clients-3.9.2-test.jar.sha1
deleted file mode 100644
index d63004758a1..00000000000
--- a/solr/licenses/kafka-clients-3.9.2-test.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-06e3f668d8d989f608dc3891d3e2d6a95508f074
diff --git a/solr/licenses/kafka-clients-3.9.2.jar.sha1 
b/solr/licenses/kafka-clients-3.9.2.jar.sha1
deleted file mode 100644
index 5825a6db392..00000000000
--- a/solr/licenses/kafka-clients-3.9.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a06edbaa01458ed2e8cf1be69a18c2f231fda6e0
diff --git a/solr/licenses/kafka-clients-4.3.1.jar.sha1 
b/solr/licenses/kafka-clients-4.3.1.jar.sha1
new file mode 100644
index 00000000000..8fbeb30c153
--- /dev/null
+++ b/solr/licenses/kafka-clients-4.3.1.jar.sha1
@@ -0,0 +1 @@
+74209a28d36f819b2f7a9b599e468b5654cad514
diff --git a/solr/licenses/kafka-group-coordinator-3.9.2.jar.sha1 
b/solr/licenses/kafka-group-coordinator-3.9.2.jar.sha1
deleted file mode 100644
index 1141ce9a3c1..00000000000
--- a/solr/licenses/kafka-group-coordinator-3.9.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-416c1dbcdd1e141707dd89dfe04328a9ce870264
diff --git a/solr/licenses/kafka-group-coordinator-api-3.9.2.jar.sha1 
b/solr/licenses/kafka-group-coordinator-api-3.9.2.jar.sha1
deleted file mode 100644
index 13b0b7f78db..00000000000
--- a/solr/licenses/kafka-group-coordinator-api-3.9.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-7a69f2be4047f3f55554c403fe78680d54a26480
diff --git a/solr/licenses/kafka-metadata-3.9.2.jar.sha1 
b/solr/licenses/kafka-metadata-3.9.2.jar.sha1
deleted file mode 100644
index fe49498df2f..00000000000
--- a/solr/licenses/kafka-metadata-3.9.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-01a266d85e89f1216e1325955942c3037da21d3b
diff --git a/solr/licenses/kafka-raft-3.9.2.jar.sha1 
b/solr/licenses/kafka-raft-3.9.2.jar.sha1
deleted file mode 100644
index c3040256780..00000000000
--- a/solr/licenses/kafka-raft-3.9.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5b72980224762aef91766a8fb047a03640905700
diff --git a/solr/licenses/kafka-server-3.9.2.jar.sha1 
b/solr/licenses/kafka-server-3.9.2.jar.sha1
deleted file mode 100644
index 4fe94c9114b..00000000000
--- a/solr/licenses/kafka-server-3.9.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e3d11d66ce497bfc3572d9e095280b4a893d16fa
diff --git a/solr/licenses/kafka-server-common-3.9.2-test.jar.sha1 
b/solr/licenses/kafka-server-common-3.9.2-test.jar.sha1
deleted file mode 100644
index c142a96f299..00000000000
--- a/solr/licenses/kafka-server-common-3.9.2-test.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-dfe59e02dde550d01ca98dca66ceb885af6d84b1
diff --git a/solr/licenses/kafka-server-common-3.9.2.jar.sha1 
b/solr/licenses/kafka-server-common-3.9.2.jar.sha1
deleted file mode 100644
index 8e9b718fffc..00000000000
--- a/solr/licenses/kafka-server-common-3.9.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-e6fe2cdafd5b2a0b07db07cf692863e0b9335625
diff --git a/solr/licenses/kafka-storage-3.9.2.jar.sha1 
b/solr/licenses/kafka-storage-3.9.2.jar.sha1
deleted file mode 100644
index 2d38f15baaa..00000000000
--- a/solr/licenses/kafka-storage-3.9.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a8a997893c4cb8cc3093c71720b3c33f1e03cade
diff --git a/solr/licenses/kafka-storage-api-3.9.2.jar.sha1 
b/solr/licenses/kafka-storage-api-3.9.2.jar.sha1
deleted file mode 100644
index 39ea1716578..00000000000
--- a/solr/licenses/kafka-storage-api-3.9.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8fa32fee158c900bd2d3d87d09d5838bd5a8813f
diff --git a/solr/licenses/kafka-streams-3.9.2-test.jar.sha1 
b/solr/licenses/kafka-streams-3.9.2-test.jar.sha1
deleted file mode 100644
index d0dd0217f90..00000000000
--- a/solr/licenses/kafka-streams-3.9.2-test.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a73440d85accc36697234500238635f617dd704e
diff --git a/solr/licenses/kafka-streams-3.9.2.jar.sha1 
b/solr/licenses/kafka-streams-3.9.2.jar.sha1
deleted file mode 100644
index 2beffe31980..00000000000
--- a/solr/licenses/kafka-streams-3.9.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-3253bfc2c12441a54be3c2c77ce5b1d2dec7be72
diff --git a/solr/licenses/kafka-tools-api-3.9.2.jar.sha1 
b/solr/licenses/kafka-tools-api-3.9.2.jar.sha1
deleted file mode 100644
index 8aa9ceabe94..00000000000
--- a/solr/licenses/kafka-tools-api-3.9.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d1b40695ba813f5647fe5bcd5960628cd1ef9a77
diff --git a/solr/licenses/kafka-transaction-coordinator-3.9.2.jar.sha1 
b/solr/licenses/kafka-transaction-coordinator-3.9.2.jar.sha1
deleted file mode 100644
index 02b3cf0fc79..00000000000
--- a/solr/licenses/kafka-transaction-coordinator-3.9.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b001c1f9e45521be560d9a2a9e6d337a1b3a82c9
diff --git a/solr/licenses/kafka_2.13-3.9.2-test.jar.sha1 
b/solr/licenses/kafka_2.13-3.9.2-test.jar.sha1
deleted file mode 100644
index 61558f444d8..00000000000
--- a/solr/licenses/kafka_2.13-3.9.2-test.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ac5d850006fa65cdba75012d6f2c17ed1759c1ce
diff --git a/solr/licenses/kafka_2.13-3.9.2.jar.sha1 
b/solr/licenses/kafka_2.13-3.9.2.jar.sha1
deleted file mode 100644
index 4386ee2ced1..00000000000
--- a/solr/licenses/kafka_2.13-3.9.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-a671d4c2c65740d4a564687d9313ca50be6c10e5
diff --git a/solr/licenses/kafka_2.13-LICENSE-ASL.txt 
b/solr/licenses/kafka_2.13-LICENSE-ASL.txt
deleted file mode 100644
index a6fe25e5c8d..00000000000
--- a/solr/licenses/kafka_2.13-LICENSE-ASL.txt
+++ /dev/null
@@ -1,345 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
--------------------------------------------------------------------------------
-This project bundles some components that are also licensed under the Apache
-License Version 2.0:
-
-audience-annotations-0.12.0
-caffeine-2.9.3
-commons-beanutils-1.9.4
-commons-cli-1.4
-commons-collections-3.2.2
-commons-digester-2.1
-commons-io-2.11.0
-commons-lang3-3.12.0
-commons-logging-1.2
-commons-validator-1.7
-error_prone_annotations-2.10.0
-jackson-annotations-2.16.2
-jackson-core-2.16.2
-jackson-databind-2.16.2
-jackson-dataformat-csv-2.16.2
-jackson-datatype-jdk8-2.16.2
-jackson-jaxrs-base-2.16.2
-jackson-jaxrs-json-provider-2.16.2
-jackson-module-afterburner-2.16.2
-jackson-module-jaxb-annotations-2.16.2
-jackson-module-scala_2.13-2.16.2
-jackson-module-scala_2.12-2.16.2
-jakarta.validation-api-2.0.2
-javassist-3.29.2-GA
-jetty-client-9.4.54.v20240208
-jetty-continuation-9.4.54.v20240208
-jetty-http-9.4.54.v20240208
-jetty-io-9.4.54.v20240208
-jetty-security-9.4.54.v20240208
-jetty-server-9.4.54.v20240208
-jetty-servlet-9.4.54.v20240208
-jetty-servlets-9.4.54.v20240208
-jetty-util-9.4.54.v20240208
-jetty-util-ajax-9.4.54.v20240208
-jose4j-0.9.4
-lz4-java-1.8.0
-maven-artifact-3.9.6
-metrics-core-4.1.12.1
-metrics-core-2.2.0
-netty-buffer-4.1.111.Final
-netty-codec-4.1.111.Final
-netty-common-4.1.111.Final
-netty-handler-4.1.111.Final
-netty-resolver-4.1.111.Final
-netty-transport-4.1.111.Final
-netty-transport-classes-epoll-4.1.111.Final
-netty-transport-native-epoll-4.1.111.Final
-netty-transport-native-unix-common-4.1.111.Final
-opentelemetry-proto-1.0.0-alpha
-plexus-utils-3.5.1
-reflections-0.10.2
-reload4j-1.2.25
-rocksdbjni-7.9.2
-scala-collection-compat_2.12-2.10.0
-scala-collection-compat_2.13-2.10.0
-scala-library-2.12.19
-scala-library-2.13.14
-scala-logging_2.12-3.9.5
-scala-logging_2.13-3.9.5
-scala-reflect-2.12.19
-scala-reflect-2.13.14
-scala-java8-compat_2.12-1.0.2
-scala-java8-compat_2.13-1.0.2
-snappy-java-1.1.10.5
-swagger-annotations-2.2.8
-zookeeper-3.8.4
-zookeeper-jute-3.8.4
-
-===============================================================================
-This product bundles various third-party components under other open source
-licenses. This section summarizes those components and their licenses.
-See licenses/ for text of these licenses.
-
----------------------------------------
-Eclipse Distribution License - v 1.0
-see: licenses/eclipse-distribution-license-1.0
-
-jakarta.activation-api-1.2.2
-jakarta.xml.bind-api-2.3.3
-
----------------------------------------
-Eclipse Public License - v 2.0
-see: licenses/eclipse-public-license-2.0
-
-jakarta.annotation-api-1.3.5
-jakarta.ws.rs-api-2.1.6
-hk2-api-2.6.1
-hk2-locator-2.6.1
-hk2-utils-2.6.1
-osgi-resource-locator-1.0.3
-aopalliance-repackaged-2.6.1
-jakarta.inject-2.6.1
-jersey-client-2.39.1
-jersey-common-2.39.1
-jersey-container-servlet-2.39.1
-jersey-container-servlet-core-2.39.1
-jersey-hk2-2.39.1
-jersey-server-2.39.1
-
----------------------------------------
-CDDL 1.1 + GPLv2 with classpath exception
-see: licenses/CDDL+GPL-1.1
-
-javax.activation-api-1.2.0
-javax.annotation-api-1.3.2
-javax.servlet-api-3.1.0
-javax.ws.rs-api-2.1.1
-jaxb-api-2.3.1
-activation-1.1.1
-
----------------------------------------
-MIT License
-
-argparse4j-0.7.0, see: licenses/argparse-MIT
-checker-qual-3.19.0, see: licenses/checker-qual-MIT
-jopt-simple-5.0.4, see: licenses/jopt-simple-MIT
-slf4j-api-1.7.36, see: licenses/slf4j-MIT
-slf4j-reload4j-1.7.36, see: licenses/slf4j-MIT
-pcollections-4.0.1, see: licenses/pcollections-MIT
-
----------------------------------------
-BSD 2-Clause
-
-zstd-jni-1.5.6-3 see: licenses/zstd-jni-BSD-2-clause
-
----------------------------------------
-BSD 3-Clause
-
-jline-3.25.1, see: licenses/jline-BSD-3-clause
-jsr305-3.0.2, see: licenses/jsr305-BSD-3-clause
-paranamer-2.8, see: licenses/paranamer-BSD-3-clause
-protobuf-java-3.23.4, see: licenses/protobuf-java-BSD-3-clause
-
----------------------------------------
-Do What The F*ck You Want To Public License
-see: licenses/DWTFYWTPL
-
-reflections-0.10.2
\ No newline at end of file
diff --git a/solr/licenses/kafka_2.13-NOTICE.txt 
b/solr/licenses/kafka_2.13-NOTICE.txt
deleted file mode 100644
index c5c9b84e932..00000000000
--- a/solr/licenses/kafka_2.13-NOTICE.txt
+++ /dev/null
@@ -1,863 +0,0 @@
-Apache Kafka
-Copyright 2021 The Apache Software Foundation.
-
-This product includes software developed at
-The Apache Software Foundation (https://www.apache.org/).
-
-This distribution has a binary dependency on jersey, which is available under 
the CDDL
-License. The source code of jersey can be found at 
https://github.com/jersey/jersey/.
-
-This distribution has a binary test dependency on jqwik, which is available 
under
-the Eclipse Public License 2.0. The source code can be found at
-https://github.com/jlink/jqwik.
-
-The streams-scala (streams/streams-scala) module was donated by Lightbend and 
the original code was copyrighted by them:
-Copyright (C) 2018 Lightbend Inc. <https://www.lightbend.com>
-Copyright (C) 2017-2018 Alexis Seigneurin.
-
-This project contains the following code copied from Apache Hadoop:
-clients/src/main/java/org/apache/kafka/common/utils/PureJavaCrc32C.java
-Some portions of this file Copyright (c) 2004-2006 Intel Corporation and 
licensed under the BSD license.
-
-This project contains the following code copied from Apache Hive:
-streams/src/main/java/org/apache/kafka/streams/state/internals/Murmur3.java
-
-// ------------------------------------------------------------------
-// NOTICE file corresponding to the section 4d of The Apache License,
-// Version 2.0, in this case for
-// ------------------------------------------------------------------
-
-# Notices for Eclipse GlassFish
-
-This content is produced and maintained by the Eclipse GlassFish project.
-
-* Project home: https://projects.eclipse.org/projects/ee4j.glassfish
-
-## Trademarks
-
-Eclipse GlassFish, and GlassFish are trademarks of the Eclipse Foundation.
-
-## Copyright
-
-All content is the property of the respective authors or their employers. For
-more information regarding authorship of content, please consult the listed
-source code repository logs.
-
-## Declared Project Licenses
-
-This program and the accompanying materials are made available under the terms
-of the Eclipse Public License v. 2.0 which is available at
-http://www.eclipse.org/legal/epl-2.0. This Source Code may also be made
-available under the following Secondary Licenses when the conditions for such
-availability set forth in the Eclipse Public License v. 2.0 are satisfied: GNU
-General Public License, version 2 with the GNU Classpath Exception which is
-available at https://www.gnu.org/software/classpath/license.html.
-
-SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
-## Source Code
-
-The project maintains the following source code repositories:
-
-* https://github.com/eclipse-ee4j/glassfish-ha-api
-* https://github.com/eclipse-ee4j/glassfish-logging-annotation-processor
-* https://github.com/eclipse-ee4j/glassfish-shoal
-* https://github.com/eclipse-ee4j/glassfish-cdi-porting-tck
-* https://github.com/eclipse-ee4j/glassfish-jsftemplating
-* https://github.com/eclipse-ee4j/glassfish-hk2-extra
-* https://github.com/eclipse-ee4j/glassfish-hk2
-* https://github.com/eclipse-ee4j/glassfish-fighterfish
-
-## Third-party Content
-
-This project leverages the following third party content.
-
-None
-
-## Cryptography
-
-Content may contain encryption software. The country in which you are currently
-may have restrictions on the import, possession, and use, and/or re-export to
-another country, of encryption software. BEFORE using any encryption software,
-please check the country's laws, regulations and policies concerning the 
import,
-possession, or use, and re-export of encryption software, to see if this is
-permitted.
-
-
-Apache Yetus - Audience Annotations
-Copyright 2015-2017 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-Apache Commons CLI
-Copyright 2001-2017 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-Apache Commons IO
-Copyright 2002-2021 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (https://www.apache.org/).
-
-
-Apache Commons Lang
-Copyright 2001-2018 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-# Jackson JSON processor
-
-Jackson is a high-performance, Free/Open Source JSON processing library.
-It was originally written by Tatu Saloranta ([email protected]), and has
-been in development since 2007.
-It is currently developed by a community of developers, as well as supported
-commercially by FasterXML.com.
-
-## Licensing
-
-Jackson core and extension components may licensed under different licenses.
-To find the details that apply to this artifact see the accompanying LICENSE 
file.
-For more information, including possible other licensing options, contact
-FasterXML.com (http://fasterxml.com).
-
-## Credits
-
-A list of contributors may be found from CREDITS file, which is included
-in some artifacts (usually source distributions); but is always available
-from the source code management (SCM) system project uses.
-
-
-# Notices for Eclipse Project for JAF
-
-This content is produced and maintained by the Eclipse Project for JAF project.
-
-* Project home: https://projects.eclipse.org/projects/ee4j.jaf
-
-## Copyright
-
-All content is the property of the respective authors or their employers. For
-more information regarding authorship of content, please consult the listed
-source code repository logs.
-
-## Declared Project Licenses
-
-This program and the accompanying materials are made available under the terms
-of the Eclipse Distribution License v. 1.0,
-which is available at http://www.eclipse.org/org/documents/edl-v10.php.
-
-SPDX-License-Identifier: BSD-3-Clause
-
-## Source Code
-
-The project maintains the following source code repositories:
-
-* https://github.com/eclipse-ee4j/jaf
-
-## Third-party Content
-
-This project leverages the following third party content.
-
-JUnit (4.12)
-
-* License: Eclipse Public License
-
-
-# Notices for Jakarta Annotations
-
-This content is produced and maintained by the Jakarta Annotations project.
-
- * Project home: https://projects.eclipse.org/projects/ee4j.ca
-
-## Trademarks
-
-Jakarta Annotations is a trademark of the Eclipse Foundation.
-
-## Declared Project Licenses
-
-This program and the accompanying materials are made available under the terms
-of the Eclipse Public License v. 2.0 which is available at
-http://www.eclipse.org/legal/epl-2.0. This Source Code may also be made
-available under the following Secondary Licenses when the conditions for such
-availability set forth in the Eclipse Public License v. 2.0 are satisfied: GNU
-General Public License, version 2 with the GNU Classpath Exception which is
-available at https://www.gnu.org/software/classpath/license.html.
-
-SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
-## Source Code
-
-The project maintains the following source code repositories:
-
- * https://github.com/eclipse-ee4j/common-annotations-api
-
-## Third-party Content
-
-## Cryptography
-
-Content may contain encryption software. The country in which you are currently
-may have restrictions on the import, possession, and use, and/or re-export to
-another country, of encryption software. BEFORE using any encryption software,
-please check the country's laws, regulations and policies concerning the 
import,
-possession, or use, and re-export of encryption software, to see if this is
-permitted.
-
-
-# Notices for the Jakarta RESTful Web Services Project
-
-This content is produced and maintained by the **Jakarta RESTful Web Services**
-project.
-
-* Project home: https://projects.eclipse.org/projects/ee4j.jaxrs
-
-## Trademarks
-
-**Jakarta RESTful Web Services** is a trademark of the Eclipse Foundation.
-
-## Copyright
-
-All content is the property of the respective authors or their employers. For
-more information regarding authorship of content, please consult the listed
-source code repository logs.
-
-## Declared Project Licenses
-
-This program and the accompanying materials are made available under the terms
-of the Eclipse Public License v. 2.0 which is available at
-http://www.eclipse.org/legal/epl-2.0. This Source Code may also be made
-available under the following Secondary Licenses when the conditions for such
-availability set forth in the Eclipse Public License v. 2.0 are satisfied: GNU
-General Public License, version 2 with the GNU Classpath Exception which is
-available at https://www.gnu.org/software/classpath/license.html.
-
-SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
-## Source Code
-
-The project maintains the following source code repositories:
-
-* https://github.com/eclipse-ee4j/jaxrs-api
-
-## Third-party Content
-
-This project leverages the following third party content.
-
-javaee-api (7.0)
-
-* License: Apache-2.0 AND W3C
-
-JUnit (4.11)
-
-* License: Common Public License 1.0
-
-Mockito (2.16.0)
-
-* Project: http://site.mockito.org
-* Source: https://github.com/mockito/mockito/releases/tag/v2.16.0
-
-## Cryptography
-
-Content may contain encryption software. The country in which you are currently
-may have restrictions on the import, possession, and use, and/or re-export to
-another country, of encryption software. BEFORE using any encryption software,
-please check the country's laws, regulations and policies concerning the 
import,
-possession, or use, and re-export of encryption software, to see if this is
-permitted.
-
-
-# Notices for Eclipse Project for JAXB
-
-This content is produced and maintained by the Eclipse Project for JAXB 
project.
-
-* Project home: https://projects.eclipse.org/projects/ee4j.jaxb
-
-## Trademarks
-
-Eclipse Project for JAXB is a trademark of the Eclipse Foundation.
-
-## Copyright
-
-All content is the property of the respective authors or their employers. For
-more information regarding authorship of content, please consult the listed
-source code repository logs.
-
-## Declared Project Licenses
-
-This program and the accompanying materials are made available under the terms
-of the Eclipse Distribution License v. 1.0 which is available
-at http://www.eclipse.org/org/documents/edl-v10.php.
-
-SPDX-License-Identifier: BSD-3-Clause
-
-## Source Code
-
-The project maintains the following source code repositories:
-
-* https://github.com/eclipse-ee4j/jaxb-api
-
-## Third-party Content
-
-This project leverages the following third party content.
-
-None
-
-## Cryptography
-
-Content may contain encryption software. The country in which you are currently
-may have restrictions on the import, possession, and use, and/or re-export to
-another country, of encryption software. BEFORE using any encryption software,
-please check the country's laws, regulations and policies concerning the 
import,
-possession, or use, and re-export of encryption software, to see if this is
-permitted.
-
-
-# Notice for Jersey
-This content is produced and maintained by the Eclipse Jersey project.
-
-*  Project home: https://projects.eclipse.org/projects/ee4j.jersey
-
-## Trademarks
-Eclipse Jersey is a trademark of the Eclipse Foundation.
-
-## Copyright
-
-All content is the property of the respective authors or their employers. For
-more information regarding authorship of content, please consult the listed
-source code repository logs.
-
-## Declared Project Licenses
-
-This program and the accompanying materials are made available under the terms
-of the Eclipse Public License v. 2.0 which is available at
-http://www.eclipse.org/legal/epl-2.0. This Source Code may also be made
-available under the following Secondary Licenses when the conditions for such
-availability set forth in the Eclipse Public License v. 2.0 are satisfied: GNU
-General Public License, version 2 with the GNU Classpath Exception which is
-available at https://www.gnu.org/software/classpath/license.html.
-
-SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
-
-## Source Code
-The project maintains the following source code repositories:
-
-* https://github.com/eclipse-ee4j/jersey
-
-## Third-party Content
-
-Angular JS, v1.6.6
-* License MIT (http://www.opensource.org/licenses/mit-license.php)
-* Project: http://angularjs.org
-* Coyright: (c) 2010-2017 Google, Inc.
-
-aopalliance Version 1
-* License: all the source code provided by AOP Alliance is Public Domain.
-* Project: http://aopalliance.sourceforge.net
-* Copyright: Material in the public domain is not protected by copyright
-
-Bean Validation API 2.0.2
-* License: Apache License, 2.0
-* Project: http://beanvalidation.org/1.1/
-* Copyright: 2009, Red Hat, Inc. and/or its affiliates, and individual 
contributors
-* by the @authors tag.
-
-Hibernate Validator CDI, 6.1.2.Final
-* License: Apache License, 2.0
-* Project: https://beanvalidation.org/
-* Repackaged in org.glassfish.jersey.server.validation.internal.hibernate
-
-Bootstrap v3.3.7
-* License: MIT license (https://github.com/twbs/bootstrap/blob/master/LICENSE)
-* Project: http://getbootstrap.com
-* Copyright: 2011-2016 Twitter, Inc
-
-Google Guava Version 18.0
-* License: Apache License, 2.0
-* Copyright (C) 2009 The Guava Authors
-
-javax.inject Version: 1
-* License: Apache License, 2.0
-* Copyright (C) 2009 The JSR-330 Expert Group
-
-Javassist Version 3.25.0-GA
-* License: Apache License, 2.0
-* Project: http://www.javassist.org/
-* Copyright (C) 1999- Shigeru Chiba. All Rights Reserved.
-
-Jackson JAX-RS Providers Version 2.10.1
-* License: Apache License, 2.0
-* Project: https://github.com/FasterXML/jackson-jaxrs-providers
-* Copyright: (c) 2009-2011 FasterXML, LLC. All rights reserved unless 
otherwise indicated.
-
-jQuery v1.12.4
-* License: jquery.org/license
-* Project: jquery.org
-* Copyright: (c) jQuery Foundation
-
-jQuery Barcode plugin 0.3
-* License: MIT & GPL (http://www.opensource.org/licenses/mit-license.php & 
http://www.gnu.org/licenses/gpl.html)
-* Project:  http://www.pasella.it/projects/jQuery/barcode
-* Copyright: (c) 2009 Antonello Pasella [email protected]
-
-JSR-166 Extension - JEP 266
-* License: CC0
-* No copyright
-* Written by Doug Lea with assistance from members of JCP JSR-166 Expert Group 
and released to the public domain, as explained at 
http://creativecommons.org/publicdomain/zero/1.0/
-
-KineticJS, v4.7.1
-* License: MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Project: http://www.kineticjs.com, https://github.com/ericdrowell/KineticJS
-* Copyright: Eric Rowell
-
-org.objectweb.asm Version 8.0
-* License: Modified BSD (http://asm.objectweb.org/license.html)
-* Copyright (c) 2000-2011 INRIA, France Telecom. All rights reserved.
-
-org.osgi.core version 6.0.0
-* License: Apache License, 2.0
-* Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
-
-org.glassfish.jersey.server.internal.monitoring.core
-* License: Apache License, 2.0
-* Copyright (c) 2015-2018 Oracle and/or its affiliates. All rights reserved.
-* Copyright 2010-2013 Coda Hale and Yammer, Inc.
-
-W3.org documents
-* License: W3C License
-* Copyright: Copyright (c) 1994-2001 World Wide Web Consortium, (Massachusetts 
Institute of Technology, Institut National de Recherche en Informatique et en 
Automatique, Keio University). All Rights Reserved. 
http://www.w3.org/Consortium/Legal/
-
-
-==============================================================
- Jetty Web Container
- Copyright 1995-2018 Mort Bay Consulting Pty Ltd.
-==============================================================
-
-The Jetty Web Container is Copyright Mort Bay Consulting Pty Ltd
-unless otherwise noted.
-
-Jetty is dual licensed under both
-
-  * The Apache 2.0 License
-    http://www.apache.org/licenses/LICENSE-2.0.html
-
-      and
-
-  * The Eclipse Public 1.0 License
-    http://www.eclipse.org/legal/epl-v10.html
-
-Jetty may be distributed under either license.
-
-------
-Eclipse
-
-The following artifacts are EPL.
- * org.eclipse.jetty.orbit:org.eclipse.jdt.core
-
-The following artifacts are EPL and ASL2.
- * org.eclipse.jetty.orbit:javax.security.auth.message
-
-
-The following artifacts are EPL and CDDL 1.0.
- * org.eclipse.jetty.orbit:javax.mail.glassfish
-
-
-------
-Oracle
-
-The following artifacts are CDDL + GPLv2 with classpath exception.
-https://glassfish.dev.java.net/nonav/public/CDDL+GPL.html
-
- * javax.servlet:javax.servlet-api
- * javax.annotation:javax.annotation-api
- * javax.transaction:javax.transaction-api
- * javax.websocket:javax.websocket-api
-
-------
-Oracle OpenJDK
-
-If ALPN is used to negotiate HTTP/2 connections, then the following
-artifacts may be included in the distribution or downloaded when ALPN
-module is selected.
-
- * java.sun.security.ssl
-
-These artifacts replace/modify OpenJDK classes.  The modififications
-are hosted at github and both modified and original are under GPL v2 with
-classpath exceptions.
-http://openjdk.java.net/legal/gplv2+ce.html
-
-
-------
-OW2
-
-The following artifacts are licensed by the OW2 Foundation according to the
-terms of http://asm.ow2.org/license.html
-
-org.ow2.asm:asm-commons
-org.ow2.asm:asm
-
-
-------
-Apache
-
-The following artifacts are ASL2 licensed.
-
-org.apache.taglibs:taglibs-standard-spec
-org.apache.taglibs:taglibs-standard-impl
-
-
-------
-MortBay
-
-The following artifacts are ASL2 licensed.  Based on selected classes from
-following Apache Tomcat jars, all ASL2 licensed.
-
-org.mortbay.jasper:apache-jsp
-  org.apache.tomcat:tomcat-jasper
-  org.apache.tomcat:tomcat-juli
-  org.apache.tomcat:tomcat-jsp-api
-  org.apache.tomcat:tomcat-el-api
-  org.apache.tomcat:tomcat-jasper-el
-  org.apache.tomcat:tomcat-api
-  org.apache.tomcat:tomcat-util-scan
-  org.apache.tomcat:tomcat-util
-
-org.mortbay.jasper:apache-el
-  org.apache.tomcat:tomcat-jasper-el
-  org.apache.tomcat:tomcat-el-api
-
-
-------
-Mortbay
-
-The following artifacts are CDDL + GPLv2 with classpath exception.
-
-https://glassfish.dev.java.net/nonav/public/CDDL+GPL.html
-
-org.eclipse.jetty.toolchain:jetty-schemas
-
-------
-Assorted
-
-The UnixCrypt.java code implements the one way cryptography used by
-Unix systems for simple password protection.  Copyright 1996 Aki Yoshida,
-modified April 2001  by Iris Van den Broeke, Daniel Deville.
-Permission to use, copy, modify and distribute UnixCrypt
-for non-commercial or commercial purposes and without fee is
-granted provided that the copyright notice appears in all copies.
-
-
-Apache log4j
-Copyright 2007 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-Maven Artifact
-Copyright 2001-2024 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-This product includes software developed by the Indiana University
-  Extreme! Lab (http://www.extreme.indiana.edu/).
-
-This product includes software developed by
-The Apache Software Foundation (http://www.apache.org/).
-
-This product includes software developed by
-ThoughtWorks (http://www.thoughtworks.com).
-
-This product includes software developed by
-javolution (http://javolution.org/).
-
-This product includes software developed by
-Rome (https://rome.dev.java.net/).
-
-
-Scala
-Copyright (c) 2002-2020 EPFL
-Copyright (c) 2011-2020 Lightbend, Inc.
-
-Scala includes software developed at
-LAMP/EPFL (https://lamp.epfl.ch/) and
-Lightbend, Inc. (https://www.lightbend.com/).
-
-Licensed under the Apache License, Version 2.0 (the "License").
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-This software includes projects with other licenses -- see `doc/LICENSE.md`.
-
-
-Apache ZooKeeper - Server
-Copyright 2008-2021 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-Apache ZooKeeper - Jute
-Copyright 2008-2021 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-The Netty Project
-                            =================
-
-Please visit the Netty web site for more information:
-
-  * https://netty.io/
-
-Copyright 2014 The Netty Project
-
-The Netty Project licenses this file to you under the Apache License,
-version 2.0 (the "License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at:
-
-  https://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-License for the specific language governing permissions and limitations
-under the License.
-
-Also, please refer to each LICENSE.<component>.txt file, which is located in
-the 'license' directory of the distribution file, for the license terms of the
-components that this product depends on.
-
--------------------------------------------------------------------------------
-This product contains the extensions to Java Collections Framework which has
-been derived from the works by JSR-166 EG, Doug Lea, and Jason T. Greene:
-
-  * LICENSE:
-    * license/LICENSE.jsr166y.txt (Public Domain)
-  * HOMEPAGE:
-    * http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/
-    * 
http://viewvc.jboss.org/cgi-bin/viewvc.cgi/jbosscache/experimental/jsr166/
-
-This product contains a modified version of Robert Harder's Public Domain
-Base64 Encoder and Decoder, which can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.base64.txt (Public Domain)
-  * HOMEPAGE:
-    * http://iharder.sourceforge.net/current/java/base64/
-
-This product contains a modified portion of 'Webbit', an event based
-WebSocket and HTTP server, which can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.webbit.txt (BSD License)
-  * HOMEPAGE:
-    * https://github.com/joewalnes/webbit
-
-This product contains a modified portion of 'SLF4J', a simple logging
-facade for Java, which can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.slf4j.txt (MIT License)
-  * HOMEPAGE:
-    * https://www.slf4j.org/
-
-This product contains a modified portion of 'Apache Harmony', an open source
-Java SE, which can be obtained at:
-
-  * NOTICE:
-    * license/NOTICE.harmony.txt
-  * LICENSE:
-    * license/LICENSE.harmony.txt (Apache License 2.0)
-  * HOMEPAGE:
-    * https://archive.apache.org/dist/harmony/
-
-This product contains a modified portion of 'jbzip2', a Java bzip2 compression
-and decompression library written by Matthew J. Francis. It can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.jbzip2.txt (MIT License)
-  * HOMEPAGE:
-    * https://code.google.com/p/jbzip2/
-
-This product contains a modified portion of 'libdivsufsort', a C API library 
to construct
-the suffix array and the Burrows-Wheeler transformed string for any input 
string of
-a constant-size alphabet written by Yuta Mori. It can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.libdivsufsort.txt (MIT License)
-  * HOMEPAGE:
-    * https://github.com/y-256/libdivsufsort
-
-This product contains a modified portion of Nitsan Wakart's 'JCTools', Java 
Concurrency Tools for the JVM,
- which can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.jctools.txt (ASL2 License)
-  * HOMEPAGE:
-    * https://github.com/JCTools/JCTools
-
-This product optionally depends on 'JZlib', a re-implementation of zlib in
-pure Java, which can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.jzlib.txt (BSD style License)
-  * HOMEPAGE:
-    * http://www.jcraft.com/jzlib/
-
-This product optionally depends on 'Compress-LZF', a Java library for encoding 
and
-decoding data in LZF format, written by Tatu Saloranta. It can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.compress-lzf.txt (Apache License 2.0)
-  * HOMEPAGE:
-    * https://github.com/ning/compress
-
-This product optionally depends on 'lz4', a LZ4 Java compression
-and decompression library written by Adrien Grand. It can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.lz4.txt (Apache License 2.0)
-  * HOMEPAGE:
-    * https://github.com/jpountz/lz4-java
-
-This product optionally depends on 'lzma-java', a LZMA Java compression
-and decompression library, which can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.lzma-java.txt (Apache License 2.0)
-  * HOMEPAGE:
-    * https://github.com/jponge/lzma-java
-
-This product contains a modified portion of 'jfastlz', a Java port of FastLZ 
compression
-and decompression library written by William Kinney. It can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.jfastlz.txt (MIT License)
-  * HOMEPAGE:
-    * https://code.google.com/p/jfastlz/
-
-This product contains a modified portion of and optionally depends on 
'Protocol Buffers', Google's data
-interchange format, which can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.protobuf.txt (New BSD License)
-  * HOMEPAGE:
-    * https://github.com/google/protobuf
-
-This product optionally depends on 'Bouncy Castle Crypto APIs' to generate
-a temporary self-signed X.509 certificate when the JVM does not provide the
-equivalent functionality.  It can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.bouncycastle.txt (MIT License)
-  * HOMEPAGE:
-    * https://www.bouncycastle.org/
-
-This product optionally depends on 'Snappy', a compression library produced
-by Google Inc, which can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.snappy.txt (New BSD License)
-  * HOMEPAGE:
-    * https://github.com/google/snappy
-
-This product optionally depends on 'JBoss Marshalling', an alternative Java
-serialization API, which can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.jboss-marshalling.txt (Apache License 2.0)
-  * HOMEPAGE:
-    * https://github.com/jboss-remoting/jboss-marshalling
-
-This product optionally depends on 'Caliper', Google's micro-
-benchmarking framework, which can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.caliper.txt (Apache License 2.0)
-  * HOMEPAGE:
-    * https://github.com/google/caliper
-
-This product optionally depends on 'Apache Commons Logging', a logging
-framework, which can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.commons-logging.txt (Apache License 2.0)
-  * HOMEPAGE:
-    * https://commons.apache.org/logging/
-
-This product optionally depends on 'Apache Log4J', a logging framework, which
-can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.log4j.txt (Apache License 2.0)
-  * HOMEPAGE:
-    * https://logging.apache.org/log4j/
-
-This product optionally depends on 'Aalto XML', an ultra-high performance
-non-blocking XML processor, which can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.aalto-xml.txt (Apache License 2.0)
-  * HOMEPAGE:
-    * http://wiki.fasterxml.com/AaltoHome
-
-This product contains a modified version of 'HPACK', a Java implementation of
-the HTTP/2 HPACK algorithm written by Twitter. It can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.hpack.txt (Apache License 2.0)
-  * HOMEPAGE:
-    * https://github.com/twitter/hpack
-
-This product contains a modified version of 'HPACK', a Java implementation of
-the HTTP/2 HPACK algorithm written by Cory Benfield. It can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.hyper-hpack.txt (MIT License)
-  * HOMEPAGE:
-    * https://github.com/python-hyper/hpack/
-
-This product contains a modified version of 'HPACK', a Java implementation of
-the HTTP/2 HPACK algorithm written by Tatsuhiro Tsujikawa. It can be obtained 
at:
-
-  * LICENSE:
-    * license/LICENSE.nghttp2-hpack.txt (MIT License)
-  * HOMEPAGE:
-    * https://github.com/nghttp2/nghttp2/
-
-This product contains a modified portion of 'Apache Commons Lang', a Java 
library
-provides utilities for the java.lang API, which can be obtained at:
-
-  * LICENSE:
-    * license/LICENSE.commons-lang.txt (Apache License 2.0)
-  * HOMEPAGE:
-    * https://commons.apache.org/proper/commons-lang/
-
-
-This product contains the Maven wrapper scripts from 'Maven Wrapper', that 
provides an easy way to ensure a user has everything necessary to run the Maven 
build.
-
-  * LICENSE:
-    * license/LICENSE.mvn-wrapper.txt (Apache License 2.0)
-  * HOMEPAGE:
-    * https://github.com/takari/maven-wrapper
-
-This product contains the dnsinfo.h header file, that provides a way to 
retrieve the system DNS configuration on MacOS.
-This private header is also used by Apple's open source
- mDNSResponder (https://opensource.apple.com/tarballs/mDNSResponder/).
-
- * LICENSE:
-    * license/LICENSE.dnsinfo.txt (Apple Public Source License 2.0)
-  * HOMEPAGE:
-    * 
https://www.opensource.apple.com/source/configd/configd-453.19/dnsinfo/dnsinfo.h
\ No newline at end of file
diff --git a/solr/licenses/lz4-java-1.10.1.jar.sha1 
b/solr/licenses/lz4-java-1.10.1.jar.sha1
deleted file mode 100644
index d15f142e6e5..00000000000
--- a/solr/licenses/lz4-java-1.10.1.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f541d7f910fe3d76f38f799c507c48cc81b12ecb
diff --git a/solr/licenses/lz4-java-1.10.2.jar.sha1 
b/solr/licenses/lz4-java-1.10.2.jar.sha1
new file mode 100644
index 00000000000..949284e72d3
--- /dev/null
+++ b/solr/licenses/lz4-java-1.10.2.jar.sha1
@@ -0,0 +1 @@
+1df182cf1b030e347c81ca8768c24dab414a04d8
diff --git a/solr/licenses/metrics-core-2.2.0.jar.sha1 
b/solr/licenses/metrics-core-2.2.0.jar.sha1
deleted file mode 100644
index 1a5081cab8e..00000000000
--- a/solr/licenses/metrics-core-2.2.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-f82c035cfa786d3cbec362c38c22a5f5b1bc8724
diff --git a/solr/licenses/paranamer-2.8.3.jar.sha1 
b/solr/licenses/paranamer-2.8.3.jar.sha1
deleted file mode 100644
index a004717c78a..00000000000
--- a/solr/licenses/paranamer-2.8.3.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-75ae4eb129574b7fc0df5fa8808d7ed625be815d
diff --git a/solr/licenses/pcollections-4.0.1.jar.sha1 
b/solr/licenses/pcollections-4.0.1.jar.sha1
deleted file mode 100644
index c7ecd798eff..00000000000
--- a/solr/licenses/pcollections-4.0.1.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-059f3bf5fb28c5f5386804dcf129267416b75d7c
diff --git a/solr/licenses/rocksdbjni-7.9.2.jar.sha1 
b/solr/licenses/rocksdbjni-7.9.2.jar.sha1
deleted file mode 100644
index 2d84500a7cb..00000000000
--- a/solr/licenses/rocksdbjni-7.9.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-6409b667493149191b09fe1fce94bada6096a3e9
diff --git a/solr/licenses/scala-collection-compat_2.13-2.10.0.jar.sha1 
b/solr/licenses/scala-collection-compat_2.13-2.10.0.jar.sha1
deleted file mode 100644
index 59631aef4a3..00000000000
--- a/solr/licenses/scala-collection-compat_2.13-2.10.0.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-2464528d14329ff2b44bceff918d6c00300adcf4
diff --git a/solr/licenses/scala-java8-compat_2.13-1.0.2.jar.sha1 
b/solr/licenses/scala-java8-compat_2.13-1.0.2.jar.sha1
deleted file mode 100644
index d8d441889cf..00000000000
--- a/solr/licenses/scala-java8-compat_2.13-1.0.2.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-5b54f60ccf03e41e24c466462a72475ee918c304
diff --git a/solr/licenses/scala-library-2.13.18.jar.sha1 
b/solr/licenses/scala-library-2.13.18.jar.sha1
deleted file mode 100644
index 41da4274c9e..00000000000
--- a/solr/licenses/scala-library-2.13.18.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-eb2086988c25b08705472cc750654570900362e5
diff --git a/solr/licenses/scala-logging_2.13-3.9.5.jar.sha1 
b/solr/licenses/scala-logging_2.13-3.9.5.jar.sha1
deleted file mode 100644
index a1fb8640c96..00000000000
--- a/solr/licenses/scala-logging_2.13-3.9.5.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-d5a0f61168371d8cff1c510f55407aa46bea8366
diff --git a/solr/licenses/scala-reflect-2.13.15.jar.sha1 
b/solr/licenses/scala-reflect-2.13.15.jar.sha1
deleted file mode 100644
index 5f8edfcb106..00000000000
--- a/solr/licenses/scala-reflect-2.13.15.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-355927b10366563a8f1b56c1f34ff376f2f7c8c5
diff --git a/solr/licenses/testcontainers-kafka-2.0.5.jar.sha1 
b/solr/licenses/testcontainers-kafka-2.0.5.jar.sha1
new file mode 100644
index 00000000000..a6a44335731
--- /dev/null
+++ b/solr/licenses/testcontainers-kafka-2.0.5.jar.sha1
@@ -0,0 +1 @@
+e37b7217b5024145be864f1088b10b32f8c2fef7
diff --git a/solr/licenses/zstd-jni-1.5.6-10.jar.sha1 
b/solr/licenses/zstd-jni-1.5.6-10.jar.sha1
new file mode 100644
index 00000000000..20413e1a983
--- /dev/null
+++ b/solr/licenses/zstd-jni-1.5.6-10.jar.sha1
@@ -0,0 +1 @@
+7e146ecb598af55d1f64d1c118af27569a848558
diff --git a/solr/licenses/zstd-jni-1.5.6-4.jar.sha1 
b/solr/licenses/zstd-jni-1.5.6-4.jar.sha1
deleted file mode 100644
index 5e1398a1efa..00000000000
--- a/solr/licenses/zstd-jni-1.5.6-4.jar.sha1
+++ /dev/null
@@ -1 +0,0 @@
-ba9e303e0b5e94cdd0017390d7d8c06f47fd61f7
diff --git a/solr/modules/cross-dc/gradle.lockfile 
b/solr/modules/cross-dc/gradle.lockfile
index 833e59e730b..b0d0f9f95fd 100644
--- a/solr/modules/cross-dc/gradle.lockfile
+++ b/solr/modules/cross-dc/gradle.lockfile
@@ -2,7 +2,7 @@
 # Manual edits can break the build and are not advised.
 # This file is expected to be part of source control.
 # To regenerate this file, run: ./gradlew :solr:modules:cross-dc:dependencies 
--write-locks
-at.yawk.lz4:lz4-java:1.10.1=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
+at.yawk.lz4:lz4-java:1.10.2=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
 
com.carrotsearch.randomizedtesting:randomizedtesting-runner:2.9.1=jarValidation,testCompileClasspath,testRuntimeClasspath
 
com.carrotsearch:hppc:0.10.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
com.fasterxml.jackson.core:jackson-annotations:2.22=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
@@ -15,7 +15,7 @@ 
com.fasterxml.jackson:jackson-bom:2.22.0=compileClasspath,jarValidation,runtimeC
 
com.fasterxml.woodstox:woodstox-core:7.2.1=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
com.github.ben-manes.caffeine:caffeine:3.2.4=annotationProcessor,errorprone,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testAnnotationProcessor,testRuntimeClasspath
 
com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,errorprone,testAnnotationProcessor
-com.github.luben:zstd-jni:1.5.6-4=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
+com.github.luben:zstd-jni:1.5.6-10=jarValidation,runtimeClasspath,runtimeLibs,testRuntimeClasspath
 
com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,errorprone,testAnnotationProcessor
 
com.google.auto.value:auto-value-annotations:1.11.1=annotationProcessor,errorprone,testAnnotationProcessor
 
com.google.auto:auto-common:1.2.2=annotationProcessor,errorprone,testAnnotationProcessor
@@ -89,7 +89,7 @@ 
org.apache.commons:commons-math3:3.6.1=jarValidation,runtimeClasspath,runtimeLib
 
org.apache.curator:curator-client:5.9.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 
org.apache.curator:curator-framework:5.9.0=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testCompileClasspath,testRuntimeClasspath
 org.apache.curator:curator-test:5.9.0=jarValidation,testRuntimeClasspath
-org.apache.kafka:kafka-clients:3.9.2=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,testCompileClasspath,testRuntimeClasspath
+org.apache.kafka:kafka-clients:4.3.1=compileClasspath,jarValidation,runtimeClasspath,runtimeLibs,testCompileClasspath,testRuntimeClasspath
 org.apache.logging.log4j:log4j-1.2-api:2.26.0=solrPlatformLibs
 
org.apache.logging.log4j:log4j-api:2.26.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
 
org.apache.logging.log4j:log4j-core:2.26.0=jarValidation,runtimeClasspath,runtimeLibs,solrPlatformLibs,testRuntimeClasspath
diff --git 
a/solr/solr-ref-guide/modules/deployment-guide/pages/cross-dc-replication.adoc 
b/solr/solr-ref-guide/modules/deployment-guide/pages/cross-dc-replication.adoc
index 07e1b52ecc1..4a00d24fde7 100644
--- 
a/solr/solr-ref-guide/modules/deployment-guide/pages/cross-dc-replication.adoc
+++ 
b/solr/solr-ref-guide/modules/deployment-guide/pages/cross-dc-replication.adoc
@@ -35,6 +35,10 @@ Apache Kafka:: A distributed queue system that links the 
Module and Manager.
 Implementing the Solr CrossDC involves the following steps:
 
 . **Apache Kafka Cluster**: Ensure the availability of an Apache Kafka 
cluster. This acts as the distributed queue interconnecting data centers.
++
+The CrossDC Solr Module and CrossDC Manager bundle Kafka client library 
version 4.3.1.
+Kafka 4.x clients are fully compatible with Kafka 3.x brokers, but only 
partially compatible with brokers in the 2.1-2.8 range, and are not compatible 
with brokers older than 2.1.
+A Kafka 3.x or newer broker cluster is recommended.
 . **CrossDC Solr Module**: Install this 
xref:configuration-guide:solr-modules.adoc[Solr Module] on each node in your 
Solr cluster (in both primary and backup data centers).
     * Configure 
xref:configuration-guide:configuring-solrconfig-xml.adoc[solrconfig.xml] to 
reference the new `MirroringUpdateProcessor` and set it up with the Kafka 
cluster.
     * Optionally configure the `solr.xml` to use `MirroringCollectionsHandler` 
and `MirroringConfigSetsHandler` if necessary.

Reply via email to