SOLR-18300 : Update apache.kafka to V4 - #4610

Merged
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4
Aug 22, 2026
Merged

SOLR-18300 : Update apache.kafka to V4#4610
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4

Conversation

@jaykay12

@jaykay12jaykay12 commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

https://issues.apache.org/jira/browse/SOLR-18300

Description

This branch is checked-out from the branch which solrbot created.
This PR is a superset of #3274 (-> can be closed once this is merged)

PackageTypeUpdateChange
org.apache.kafka:kafka-streamsdependenciesmajor3.9.2 → 4.3.1
org.apache.kafka:kafka-server-commondependenciesmajor❌ (Removed)
org.apache.kafka:kafka_2.13dependenciesmajor❌ (Removed)
org.apache.kafka:kafka-clientsdependenciesmajor3.9.2 → 4.3.1
org.testcontainers:testcontainers-kafkadependenciesmajor✅ (Added) 2.0.5

There were few major & significant changes introduced in apache.kafka v4, which are being done in this PR alongside the normal version bumps.

Solution

We were using EmbeddedKafkaCluster which in V4 is no longer supported.
Went ahead with the TestContainer approach & updated all tests in cross-dc-manager module accordingly.

AI Usage Disclosure - Used Gemini Chat (3.5 Flash) - for the guidance & code snippets.

Tests

./gradlew check -x test -> ✅

Checklist

Please review the following and check all that apply:

  • I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
  • I have created a Jira issue and added the issue ID to my pull request title.
  • I have given Solr maintainers access to contribute to my PR branch. (optional but recommended, not available for branches on forks living under an organisation)
  • I have developed this patch against the main branch.
  • I have run ./gradlew check.
  • I have added tests for my changes.
  • I have added documentation for the Reference Guide
  • I have added a changelog entry for my change

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self-review ✅

for (TopicPartition topicPartition : topicPartitions) {
if (topicPartition.topic().equals(topic)) {
long endOffset = consumer.position(topicPartition);
long committedOffset = consumer.committed(topicPartition).offset();

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/apache/solr/actions/runs/28428066221/job/84235821648 , Simply updating the version was giving compilation error.

Image

Evidences for supporting this change:

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is one of those deprecated apis that I saw now being fixed!

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Comment on lines +277 to +281
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

@jaykay12jaykay12Jul 4, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[pending-to-discuss] with reviewer on the right way here. This works, but this is surely not the right way.

This is required to resolve this error, which comes in the cross-dc-manager test which interacts with the kafka container which runs on docker daemon.

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe there are ways to get around this with a more narrow line in solr-tests.policy.

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Since Kafka 4.x fully supports lightweight, fast KRaft startups, the cleanest modern approach is to spin up an ephemeral Docker container using Testcontainers. It completely isolates Kafka from the JVM running Solr. [Industry standards]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense. We do this for Tika testing...

@markrmiller

Copy link
Copy Markdown
Member

Just curious: what motivated the upgrade?

@jaykay12

Copy link
Copy Markdown
ContributorAuthor

Just curious: what motivated the upgrade?

I came across this thread: https://lists.apache.org/thread/fkb9dgtybbjz4f5jzk6qb6ysh18bt5n5 by @janhoy asking for help in getting upgrades done & I landed upon the PR: #3274 that was raised by solrbot initially some 1 year back & was still pending. I thought of taking it to closure.

Since there were major changes that were required, I created Jira & started working on it.

@epugh
epugh requested a balanced review from CopilotAugust 20, 2026 15:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Upgrades CrossDC to Apache Kafka 4.3.1 and migrates integration tests from embedded Kafka to Testcontainers.

Changes:

  • Updates Kafka dependencies, locks, licenses, documentation, and changelog.
  • Adds a reusable Kafka Testcontainers rule and AdminClient-based topic creation.
  • Adapts Kafka 4 APIs and isolates per-test topics.

Reviewed changes

Copilot reviewed 60 out of 60 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
solr/solr-ref-guide/modules/deployment-guide/pages/cross-dc-replication.adocDocuments Kafka compatibility.
solr/modules/cross-dc/gradle.lockfileLocks Kafka 4 dependencies.
solr/licenses/zstd-jni-1.5.6-4.jar.sha1Removes obsolete checksum.
solr/licenses/zstd-jni-1.5.6-10.jar.sha1Adds updated checksum.
solr/licenses/testcontainers-kafka-2.0.5.jar.sha1Adds Testcontainers Kafka checksum.
solr/licenses/scala-reflect-2.13.15.jar.sha1Removes unused checksum.
solr/licenses/scala-logging_2.13-3.9.5.jar.sha1Removes unused checksum.
solr/licenses/scala-library-2.13.18.jar.sha1Removes unused checksum.
solr/licenses/scala-java8-compat_2.13-1.0.2.jar.sha1Removes unused checksum.
solr/licenses/scala-collection-compat_2.13-2.10.0.jar.sha1Removes unused checksum.
solr/licenses/rocksdbjni-7.9.2.jar.sha1Removes old checksum.
solr/licenses/rocksdbjni-10.1.3.jar.sha1Adds updated checksum.
solr/licenses/pcollections-4.0.1.jar.sha1Removes unused checksum.
solr/licenses/paranamer-2.8.3.jar.sha1Removes unused checksum.
solr/licenses/metrics-core-2.2.0.jar.sha1Removes unused checksum.
solr/licenses/lz4-java-1.10.2.jar.sha1Adds updated checksum.
solr/licenses/lz4-java-1.10.1.jar.sha1Removes old checksum.
solr/licenses/kafka-transaction-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-tools-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-streams-4.3.1.jar.sha1Adds Kafka Streams checksum.
solr/licenses/kafka-streams-4.3.1-test.jar.sha1Adds Kafka test checksum.
solr/licenses/kafka-streams-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-streams-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka-storage-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-storage-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2-test.jar.sha1Removes Kafka 3 test checksum.
solr/licenses/kafka-server-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-raft-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-metadata-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-clients-4.3.1.jar.sha1Adds Kafka client checksum.
solr/licenses/kafka-clients-4.3.1-test.jar.sha1Adds Kafka client test checksum.
solr/licenses/kafka-clients-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-clients-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka_2.13-NOTICE.txtRemoves obsolete server-bundle notice.
solr/licenses/kafka_2.13-LICENSE-ASL.txtRemoves obsolete server-bundle license.
solr/licenses/kafka_2.13-3.9.2.jar.sha1Removes server artifact checksum.
solr/licenses/kafka_2.13-3.9.2-test.jar.sha1Removes server test checksum.
solr/licenses/jackson-module-scala_2.13-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/jackson-dataformat-csv-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/commons-validator-1.10.1.jar.sha1Removes unused checksum.
solr/licenses/commons-digester-2.1.jar.sha1Removes unused checksum.
solr/licenses/commons-collections-3.2.2.jar.sha1Removes unused checksum.
solr/licenses/commons-beanutils-1.11.0.jar.sha1Removes unused checksum.
solr/licenses/argparse4j-0.7.0.jar.sha1Removes unused checksum.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/ZkConfigIntegrationTest.javaMigrates to containerized Kafka.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaReindexTest.javaMigrates reindex testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaMultiCollectionIntegrationTest.javaAdds isolated container topics.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaIntegrationTest.javaMigrates primary integration tests.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/RetryQueueIntegrationTest.javaMigrates retry testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/KafkaContainerRule.javaAdds shared Kafka container lifecycle.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/DeleteByQueryToIdTest.javaMigrates delete-query testing.
solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/Util.javaUpdates committed-offset API usage.
solr/cross-dc-manager/gradle.lockfileRefreshes manager dependencies.
solr/cross-dc-manager/build.gradleAdds Testcontainers and removes server dependencies.
gradle/testing/randomization/policies/solr-tests.policyAdds a global permission grant.
gradle/libs.versions.tomlDeclares Kafka 4 and Testcontainers Kafka.
changelog/unreleased/SOLR-18300-update-kafka-v4.ymlRecords the dependency update.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +279 to +282
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just pushed up a simpler test policy! Please @jaykay12 let me know that it works for you locally!

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hey @epugh , no this is the test that i am using to verify : SolrAndKafkaReindexTest

with dockerhub running in local, this test was passing earlier with global override. for the simpler policy(your changes) it is now faiiling, this is the error that i see.

Screenshot 2026-08-21 at 3 48 05 AM

does this test work for you locally with the simpler policy?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

super! thanks @epugh for the help here. 🚀

running perfectly fine after your these changes. 36bdb33

Screenshot 2026-08-21 at 3 52 08 AM

Comment threadsolr/cross-dc-manager/build.gradle Outdated
Comment on lines +67 to +68
testImplementation libs.testcontainers.kafka

@epughepugh mentioned this pull request Aug 20, 2026
1 task
* <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 {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks much neat! 👍🏽
thanks @epugh 🚀

Comment on lines +77 to +81
// 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

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is great! 💯

verified this working fine on local here: #4610 (comment)

@epugh

Copy link
Copy Markdown
Contributor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

@jaykay12

jaykay12 commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

yes. @epugh with the most latest code that we have, all tests under cross-dc-manager module are running fine - locally with docker.
verified ✅

Screenshot 2026-08-21 at 4 07 59 AM

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

precommit checks running fine locally. ✅

@epugh
epugh merged commit 8c750e2 into apache:mainAug 22, 2026
5 checks passed
epugh added a commit that referenced this pull request Aug 22, 2026
Signed-off-by: jaykay12 <jalazkumar1208@gmail.com>
Co-authored-by: SolrBot <solrbot@cominvent.com>
Co-authored-by: Eric Pugh <epugh@opensourceconnections.com>
(cherry picked from commit 8c750e2)
@jaykay12
jaykay12 deleted the SOLR-18300-update-kafka-v4 branch August 22, 2026 14:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesDependency upgradesdocumentationImprovements or additions to documentationmodule:cross-dcteststool:build

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jaykay12@markrmiller@epugh@solrbot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

SOLR-18300 : Update apache.kafka to V4 - #4610

Merged
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4
Aug 22, 2026
Merged

SOLR-18300 : Update apache.kafka to V4#4610
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4

Conversation

@jaykay12

@jaykay12jaykay12 commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

https://issues.apache.org/jira/browse/SOLR-18300

Description

This branch is checked-out from the branch which solrbot created.
This PR is a superset of #3274 (-> can be closed once this is merged)

PackageTypeUpdateChange
org.apache.kafka:kafka-streamsdependenciesmajor3.9.2 → 4.3.1
org.apache.kafka:kafka-server-commondependenciesmajor❌ (Removed)
org.apache.kafka:kafka_2.13dependenciesmajor❌ (Removed)
org.apache.kafka:kafka-clientsdependenciesmajor3.9.2 → 4.3.1
org.testcontainers:testcontainers-kafkadependenciesmajor✅ (Added) 2.0.5

There were few major & significant changes introduced in apache.kafka v4, which are being done in this PR alongside the normal version bumps.

Solution

We were using EmbeddedKafkaCluster which in V4 is no longer supported.
Went ahead with the TestContainer approach & updated all tests in cross-dc-manager module accordingly.

AI Usage Disclosure - Used Gemini Chat (3.5 Flash) - for the guidance & code snippets.

Tests

./gradlew check -x test -> ✅

Checklist

Please review the following and check all that apply:

  • I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
  • I have created a Jira issue and added the issue ID to my pull request title.
  • I have given Solr maintainers access to contribute to my PR branch. (optional but recommended, not available for branches on forks living under an organisation)
  • I have developed this patch against the main branch.
  • I have run ./gradlew check.
  • I have added tests for my changes.
  • I have added documentation for the Reference Guide
  • I have added a changelog entry for my change

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self-review ✅

for (TopicPartition topicPartition : topicPartitions) {
if (topicPartition.topic().equals(topic)) {
long endOffset = consumer.position(topicPartition);
long committedOffset = consumer.committed(topicPartition).offset();

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/apache/solr/actions/runs/28428066221/job/84235821648 , Simply updating the version was giving compilation error.

Image

Evidences for supporting this change:

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is one of those deprecated apis that I saw now being fixed!

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Comment on lines +277 to +281
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

@jaykay12jaykay12Jul 4, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[pending-to-discuss] with reviewer on the right way here. This works, but this is surely not the right way.

This is required to resolve this error, which comes in the cross-dc-manager test which interacts with the kafka container which runs on docker daemon.

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe there are ways to get around this with a more narrow line in solr-tests.policy.

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Since Kafka 4.x fully supports lightweight, fast KRaft startups, the cleanest modern approach is to spin up an ephemeral Docker container using Testcontainers. It completely isolates Kafka from the JVM running Solr. [Industry standards]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense. We do this for Tika testing...

@markrmiller

Copy link
Copy Markdown
Member

Just curious: what motivated the upgrade?

@jaykay12

Copy link
Copy Markdown
ContributorAuthor

Just curious: what motivated the upgrade?

I came across this thread: https://lists.apache.org/thread/fkb9dgtybbjz4f5jzk6qb6ysh18bt5n5 by @janhoy asking for help in getting upgrades done & I landed upon the PR: #3274 that was raised by solrbot initially some 1 year back & was still pending. I thought of taking it to closure.

Since there were major changes that were required, I created Jira & started working on it.

@epugh
epugh requested a balanced review from CopilotAugust 20, 2026 15:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Upgrades CrossDC to Apache Kafka 4.3.1 and migrates integration tests from embedded Kafka to Testcontainers.

Changes:

  • Updates Kafka dependencies, locks, licenses, documentation, and changelog.
  • Adds a reusable Kafka Testcontainers rule and AdminClient-based topic creation.
  • Adapts Kafka 4 APIs and isolates per-test topics.

Reviewed changes

Copilot reviewed 60 out of 60 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
solr/solr-ref-guide/modules/deployment-guide/pages/cross-dc-replication.adocDocuments Kafka compatibility.
solr/modules/cross-dc/gradle.lockfileLocks Kafka 4 dependencies.
solr/licenses/zstd-jni-1.5.6-4.jar.sha1Removes obsolete checksum.
solr/licenses/zstd-jni-1.5.6-10.jar.sha1Adds updated checksum.
solr/licenses/testcontainers-kafka-2.0.5.jar.sha1Adds Testcontainers Kafka checksum.
solr/licenses/scala-reflect-2.13.15.jar.sha1Removes unused checksum.
solr/licenses/scala-logging_2.13-3.9.5.jar.sha1Removes unused checksum.
solr/licenses/scala-library-2.13.18.jar.sha1Removes unused checksum.
solr/licenses/scala-java8-compat_2.13-1.0.2.jar.sha1Removes unused checksum.
solr/licenses/scala-collection-compat_2.13-2.10.0.jar.sha1Removes unused checksum.
solr/licenses/rocksdbjni-7.9.2.jar.sha1Removes old checksum.
solr/licenses/rocksdbjni-10.1.3.jar.sha1Adds updated checksum.
solr/licenses/pcollections-4.0.1.jar.sha1Removes unused checksum.
solr/licenses/paranamer-2.8.3.jar.sha1Removes unused checksum.
solr/licenses/metrics-core-2.2.0.jar.sha1Removes unused checksum.
solr/licenses/lz4-java-1.10.2.jar.sha1Adds updated checksum.
solr/licenses/lz4-java-1.10.1.jar.sha1Removes old checksum.
solr/licenses/kafka-transaction-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-tools-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-streams-4.3.1.jar.sha1Adds Kafka Streams checksum.
solr/licenses/kafka-streams-4.3.1-test.jar.sha1Adds Kafka test checksum.
solr/licenses/kafka-streams-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-streams-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka-storage-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-storage-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2-test.jar.sha1Removes Kafka 3 test checksum.
solr/licenses/kafka-server-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-raft-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-metadata-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-clients-4.3.1.jar.sha1Adds Kafka client checksum.
solr/licenses/kafka-clients-4.3.1-test.jar.sha1Adds Kafka client test checksum.
solr/licenses/kafka-clients-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-clients-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka_2.13-NOTICE.txtRemoves obsolete server-bundle notice.
solr/licenses/kafka_2.13-LICENSE-ASL.txtRemoves obsolete server-bundle license.
solr/licenses/kafka_2.13-3.9.2.jar.sha1Removes server artifact checksum.
solr/licenses/kafka_2.13-3.9.2-test.jar.sha1Removes server test checksum.
solr/licenses/jackson-module-scala_2.13-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/jackson-dataformat-csv-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/commons-validator-1.10.1.jar.sha1Removes unused checksum.
solr/licenses/commons-digester-2.1.jar.sha1Removes unused checksum.
solr/licenses/commons-collections-3.2.2.jar.sha1Removes unused checksum.
solr/licenses/commons-beanutils-1.11.0.jar.sha1Removes unused checksum.
solr/licenses/argparse4j-0.7.0.jar.sha1Removes unused checksum.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/ZkConfigIntegrationTest.javaMigrates to containerized Kafka.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaReindexTest.javaMigrates reindex testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaMultiCollectionIntegrationTest.javaAdds isolated container topics.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaIntegrationTest.javaMigrates primary integration tests.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/RetryQueueIntegrationTest.javaMigrates retry testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/KafkaContainerRule.javaAdds shared Kafka container lifecycle.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/DeleteByQueryToIdTest.javaMigrates delete-query testing.
solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/Util.javaUpdates committed-offset API usage.
solr/cross-dc-manager/gradle.lockfileRefreshes manager dependencies.
solr/cross-dc-manager/build.gradleAdds Testcontainers and removes server dependencies.
gradle/testing/randomization/policies/solr-tests.policyAdds a global permission grant.
gradle/libs.versions.tomlDeclares Kafka 4 and Testcontainers Kafka.
changelog/unreleased/SOLR-18300-update-kafka-v4.ymlRecords the dependency update.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +279 to +282
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just pushed up a simpler test policy! Please @jaykay12 let me know that it works for you locally!

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hey @epugh , no this is the test that i am using to verify : SolrAndKafkaReindexTest

with dockerhub running in local, this test was passing earlier with global override. for the simpler policy(your changes) it is now faiiling, this is the error that i see.

Screenshot 2026-08-21 at 3 48 05 AM

does this test work for you locally with the simpler policy?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

super! thanks @epugh for the help here. 🚀

running perfectly fine after your these changes. 36bdb33

Screenshot 2026-08-21 at 3 52 08 AM

Comment threadsolr/cross-dc-manager/build.gradle Outdated
Comment on lines +67 to +68
testImplementation libs.testcontainers.kafka

@epughepugh mentioned this pull request Aug 20, 2026
1 task
* <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 {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks much neat! 👍🏽
thanks @epugh 🚀

Comment on lines +77 to +81
// 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

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is great! 💯

verified this working fine on local here: #4610 (comment)

@epugh

Copy link
Copy Markdown
Contributor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

@jaykay12

jaykay12 commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

yes. @epugh with the most latest code that we have, all tests under cross-dc-manager module are running fine - locally with docker.
verified ✅

Screenshot 2026-08-21 at 4 07 59 AM

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

precommit checks running fine locally. ✅

@epugh
epugh merged commit 8c750e2 into apache:mainAug 22, 2026
5 checks passed
epugh added a commit that referenced this pull request Aug 22, 2026
Signed-off-by: jaykay12 <jalazkumar1208@gmail.com>
Co-authored-by: SolrBot <solrbot@cominvent.com>
Co-authored-by: Eric Pugh <epugh@opensourceconnections.com>
(cherry picked from commit 8c750e2)
@jaykay12
jaykay12 deleted the SOLR-18300-update-kafka-v4 branch August 22, 2026 14:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesDependency upgradesdocumentationImprovements or additions to documentationmodule:cross-dcteststool:build

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jaykay12@markrmiller@epugh@solrbot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

SOLR-18300 : Update apache.kafka to V4 - #4610

Merged
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4
Aug 22, 2026
Merged

SOLR-18300 : Update apache.kafka to V4#4610
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4

Conversation

@jaykay12

@jaykay12jaykay12 commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

https://issues.apache.org/jira/browse/SOLR-18300

Description

This branch is checked-out from the branch which solrbot created.
This PR is a superset of #3274 (-> can be closed once this is merged)

PackageTypeUpdateChange
org.apache.kafka:kafka-streamsdependenciesmajor3.9.2 → 4.3.1
org.apache.kafka:kafka-server-commondependenciesmajor❌ (Removed)
org.apache.kafka:kafka_2.13dependenciesmajor❌ (Removed)
org.apache.kafka:kafka-clientsdependenciesmajor3.9.2 → 4.3.1
org.testcontainers:testcontainers-kafkadependenciesmajor✅ (Added) 2.0.5

There were few major & significant changes introduced in apache.kafka v4, which are being done in this PR alongside the normal version bumps.

Solution

We were using EmbeddedKafkaCluster which in V4 is no longer supported.
Went ahead with the TestContainer approach & updated all tests in cross-dc-manager module accordingly.

AI Usage Disclosure - Used Gemini Chat (3.5 Flash) - for the guidance & code snippets.

Tests

./gradlew check -x test -> ✅

Checklist

Please review the following and check all that apply:

  • I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
  • I have created a Jira issue and added the issue ID to my pull request title.
  • I have given Solr maintainers access to contribute to my PR branch. (optional but recommended, not available for branches on forks living under an organisation)
  • I have developed this patch against the main branch.
  • I have run ./gradlew check.
  • I have added tests for my changes.
  • I have added documentation for the Reference Guide
  • I have added a changelog entry for my change

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self-review ✅

for (TopicPartition topicPartition : topicPartitions) {
if (topicPartition.topic().equals(topic)) {
long endOffset = consumer.position(topicPartition);
long committedOffset = consumer.committed(topicPartition).offset();

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/apache/solr/actions/runs/28428066221/job/84235821648 , Simply updating the version was giving compilation error.

Image

Evidences for supporting this change:

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is one of those deprecated apis that I saw now being fixed!

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Comment on lines +277 to +281
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

@jaykay12jaykay12Jul 4, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[pending-to-discuss] with reviewer on the right way here. This works, but this is surely not the right way.

This is required to resolve this error, which comes in the cross-dc-manager test which interacts with the kafka container which runs on docker daemon.

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe there are ways to get around this with a more narrow line in solr-tests.policy.

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Since Kafka 4.x fully supports lightweight, fast KRaft startups, the cleanest modern approach is to spin up an ephemeral Docker container using Testcontainers. It completely isolates Kafka from the JVM running Solr. [Industry standards]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense. We do this for Tika testing...

@markrmiller

Copy link
Copy Markdown
Member

Just curious: what motivated the upgrade?

@jaykay12

Copy link
Copy Markdown
ContributorAuthor

Just curious: what motivated the upgrade?

I came across this thread: https://lists.apache.org/thread/fkb9dgtybbjz4f5jzk6qb6ysh18bt5n5 by @janhoy asking for help in getting upgrades done & I landed upon the PR: #3274 that was raised by solrbot initially some 1 year back & was still pending. I thought of taking it to closure.

Since there were major changes that were required, I created Jira & started working on it.

@epugh
epugh requested a balanced review from CopilotAugust 20, 2026 15:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Upgrades CrossDC to Apache Kafka 4.3.1 and migrates integration tests from embedded Kafka to Testcontainers.

Changes:

  • Updates Kafka dependencies, locks, licenses, documentation, and changelog.
  • Adds a reusable Kafka Testcontainers rule and AdminClient-based topic creation.
  • Adapts Kafka 4 APIs and isolates per-test topics.

Reviewed changes

Copilot reviewed 60 out of 60 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
solr/solr-ref-guide/modules/deployment-guide/pages/cross-dc-replication.adocDocuments Kafka compatibility.
solr/modules/cross-dc/gradle.lockfileLocks Kafka 4 dependencies.
solr/licenses/zstd-jni-1.5.6-4.jar.sha1Removes obsolete checksum.
solr/licenses/zstd-jni-1.5.6-10.jar.sha1Adds updated checksum.
solr/licenses/testcontainers-kafka-2.0.5.jar.sha1Adds Testcontainers Kafka checksum.
solr/licenses/scala-reflect-2.13.15.jar.sha1Removes unused checksum.
solr/licenses/scala-logging_2.13-3.9.5.jar.sha1Removes unused checksum.
solr/licenses/scala-library-2.13.18.jar.sha1Removes unused checksum.
solr/licenses/scala-java8-compat_2.13-1.0.2.jar.sha1Removes unused checksum.
solr/licenses/scala-collection-compat_2.13-2.10.0.jar.sha1Removes unused checksum.
solr/licenses/rocksdbjni-7.9.2.jar.sha1Removes old checksum.
solr/licenses/rocksdbjni-10.1.3.jar.sha1Adds updated checksum.
solr/licenses/pcollections-4.0.1.jar.sha1Removes unused checksum.
solr/licenses/paranamer-2.8.3.jar.sha1Removes unused checksum.
solr/licenses/metrics-core-2.2.0.jar.sha1Removes unused checksum.
solr/licenses/lz4-java-1.10.2.jar.sha1Adds updated checksum.
solr/licenses/lz4-java-1.10.1.jar.sha1Removes old checksum.
solr/licenses/kafka-transaction-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-tools-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-streams-4.3.1.jar.sha1Adds Kafka Streams checksum.
solr/licenses/kafka-streams-4.3.1-test.jar.sha1Adds Kafka test checksum.
solr/licenses/kafka-streams-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-streams-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka-storage-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-storage-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2-test.jar.sha1Removes Kafka 3 test checksum.
solr/licenses/kafka-server-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-raft-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-metadata-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-clients-4.3.1.jar.sha1Adds Kafka client checksum.
solr/licenses/kafka-clients-4.3.1-test.jar.sha1Adds Kafka client test checksum.
solr/licenses/kafka-clients-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-clients-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka_2.13-NOTICE.txtRemoves obsolete server-bundle notice.
solr/licenses/kafka_2.13-LICENSE-ASL.txtRemoves obsolete server-bundle license.
solr/licenses/kafka_2.13-3.9.2.jar.sha1Removes server artifact checksum.
solr/licenses/kafka_2.13-3.9.2-test.jar.sha1Removes server test checksum.
solr/licenses/jackson-module-scala_2.13-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/jackson-dataformat-csv-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/commons-validator-1.10.1.jar.sha1Removes unused checksum.
solr/licenses/commons-digester-2.1.jar.sha1Removes unused checksum.
solr/licenses/commons-collections-3.2.2.jar.sha1Removes unused checksum.
solr/licenses/commons-beanutils-1.11.0.jar.sha1Removes unused checksum.
solr/licenses/argparse4j-0.7.0.jar.sha1Removes unused checksum.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/ZkConfigIntegrationTest.javaMigrates to containerized Kafka.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaReindexTest.javaMigrates reindex testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaMultiCollectionIntegrationTest.javaAdds isolated container topics.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaIntegrationTest.javaMigrates primary integration tests.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/RetryQueueIntegrationTest.javaMigrates retry testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/KafkaContainerRule.javaAdds shared Kafka container lifecycle.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/DeleteByQueryToIdTest.javaMigrates delete-query testing.
solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/Util.javaUpdates committed-offset API usage.
solr/cross-dc-manager/gradle.lockfileRefreshes manager dependencies.
solr/cross-dc-manager/build.gradleAdds Testcontainers and removes server dependencies.
gradle/testing/randomization/policies/solr-tests.policyAdds a global permission grant.
gradle/libs.versions.tomlDeclares Kafka 4 and Testcontainers Kafka.
changelog/unreleased/SOLR-18300-update-kafka-v4.ymlRecords the dependency update.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +279 to +282
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just pushed up a simpler test policy! Please @jaykay12 let me know that it works for you locally!

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hey @epugh , no this is the test that i am using to verify : SolrAndKafkaReindexTest

with dockerhub running in local, this test was passing earlier with global override. for the simpler policy(your changes) it is now faiiling, this is the error that i see.

Screenshot 2026-08-21 at 3 48 05 AM

does this test work for you locally with the simpler policy?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

super! thanks @epugh for the help here. 🚀

running perfectly fine after your these changes. 36bdb33

Screenshot 2026-08-21 at 3 52 08 AM

Comment threadsolr/cross-dc-manager/build.gradle Outdated
Comment on lines +67 to +68
testImplementation libs.testcontainers.kafka

@epughepugh mentioned this pull request Aug 20, 2026
1 task
* <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 {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks much neat! 👍🏽
thanks @epugh 🚀

Comment on lines +77 to +81
// 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

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is great! 💯

verified this working fine on local here: #4610 (comment)

@epugh

Copy link
Copy Markdown
Contributor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

@jaykay12

jaykay12 commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

yes. @epugh with the most latest code that we have, all tests under cross-dc-manager module are running fine - locally with docker.
verified ✅

Screenshot 2026-08-21 at 4 07 59 AM

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

precommit checks running fine locally. ✅

@epugh
epugh merged commit 8c750e2 into apache:mainAug 22, 2026
5 checks passed
epugh added a commit that referenced this pull request Aug 22, 2026
Signed-off-by: jaykay12 <jalazkumar1208@gmail.com>
Co-authored-by: SolrBot <solrbot@cominvent.com>
Co-authored-by: Eric Pugh <epugh@opensourceconnections.com>
(cherry picked from commit 8c750e2)
@jaykay12
jaykay12 deleted the SOLR-18300-update-kafka-v4 branch August 22, 2026 14:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesDependency upgradesdocumentationImprovements or additions to documentationmodule:cross-dcteststool:build

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jaykay12@markrmiller@epugh@solrbot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

SOLR-18300 : Update apache.kafka to V4 - #4610

Merged
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4
Aug 22, 2026
Merged

SOLR-18300 : Update apache.kafka to V4#4610
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4

Conversation

@jaykay12

@jaykay12jaykay12 commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

https://issues.apache.org/jira/browse/SOLR-18300

Description

This branch is checked-out from the branch which solrbot created.
This PR is a superset of #3274 (-> can be closed once this is merged)

PackageTypeUpdateChange
org.apache.kafka:kafka-streamsdependenciesmajor3.9.2 → 4.3.1
org.apache.kafka:kafka-server-commondependenciesmajor❌ (Removed)
org.apache.kafka:kafka_2.13dependenciesmajor❌ (Removed)
org.apache.kafka:kafka-clientsdependenciesmajor3.9.2 → 4.3.1
org.testcontainers:testcontainers-kafkadependenciesmajor✅ (Added) 2.0.5

There were few major & significant changes introduced in apache.kafka v4, which are being done in this PR alongside the normal version bumps.

Solution

We were using EmbeddedKafkaCluster which in V4 is no longer supported.
Went ahead with the TestContainer approach & updated all tests in cross-dc-manager module accordingly.

AI Usage Disclosure - Used Gemini Chat (3.5 Flash) - for the guidance & code snippets.

Tests

./gradlew check -x test -> ✅

Checklist

Please review the following and check all that apply:

  • I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
  • I have created a Jira issue and added the issue ID to my pull request title.
  • I have given Solr maintainers access to contribute to my PR branch. (optional but recommended, not available for branches on forks living under an organisation)
  • I have developed this patch against the main branch.
  • I have run ./gradlew check.
  • I have added tests for my changes.
  • I have added documentation for the Reference Guide
  • I have added a changelog entry for my change

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self-review ✅

for (TopicPartition topicPartition : topicPartitions) {
if (topicPartition.topic().equals(topic)) {
long endOffset = consumer.position(topicPartition);
long committedOffset = consumer.committed(topicPartition).offset();

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/apache/solr/actions/runs/28428066221/job/84235821648 , Simply updating the version was giving compilation error.

Image

Evidences for supporting this change:

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is one of those deprecated apis that I saw now being fixed!

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Comment on lines +277 to +281
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

@jaykay12jaykay12Jul 4, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[pending-to-discuss] with reviewer on the right way here. This works, but this is surely not the right way.

This is required to resolve this error, which comes in the cross-dc-manager test which interacts with the kafka container which runs on docker daemon.

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe there are ways to get around this with a more narrow line in solr-tests.policy.

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Since Kafka 4.x fully supports lightweight, fast KRaft startups, the cleanest modern approach is to spin up an ephemeral Docker container using Testcontainers. It completely isolates Kafka from the JVM running Solr. [Industry standards]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense. We do this for Tika testing...

@markrmiller

Copy link
Copy Markdown
Member

Just curious: what motivated the upgrade?

@jaykay12

Copy link
Copy Markdown
ContributorAuthor

Just curious: what motivated the upgrade?

I came across this thread: https://lists.apache.org/thread/fkb9dgtybbjz4f5jzk6qb6ysh18bt5n5 by @janhoy asking for help in getting upgrades done & I landed upon the PR: #3274 that was raised by solrbot initially some 1 year back & was still pending. I thought of taking it to closure.

Since there were major changes that were required, I created Jira & started working on it.

@epugh
epugh requested a balanced review from CopilotAugust 20, 2026 15:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Upgrades CrossDC to Apache Kafka 4.3.1 and migrates integration tests from embedded Kafka to Testcontainers.

Changes:

  • Updates Kafka dependencies, locks, licenses, documentation, and changelog.
  • Adds a reusable Kafka Testcontainers rule and AdminClient-based topic creation.
  • Adapts Kafka 4 APIs and isolates per-test topics.

Reviewed changes

Copilot reviewed 60 out of 60 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
solr/solr-ref-guide/modules/deployment-guide/pages/cross-dc-replication.adocDocuments Kafka compatibility.
solr/modules/cross-dc/gradle.lockfileLocks Kafka 4 dependencies.
solr/licenses/zstd-jni-1.5.6-4.jar.sha1Removes obsolete checksum.
solr/licenses/zstd-jni-1.5.6-10.jar.sha1Adds updated checksum.
solr/licenses/testcontainers-kafka-2.0.5.jar.sha1Adds Testcontainers Kafka checksum.
solr/licenses/scala-reflect-2.13.15.jar.sha1Removes unused checksum.
solr/licenses/scala-logging_2.13-3.9.5.jar.sha1Removes unused checksum.
solr/licenses/scala-library-2.13.18.jar.sha1Removes unused checksum.
solr/licenses/scala-java8-compat_2.13-1.0.2.jar.sha1Removes unused checksum.
solr/licenses/scala-collection-compat_2.13-2.10.0.jar.sha1Removes unused checksum.
solr/licenses/rocksdbjni-7.9.2.jar.sha1Removes old checksum.
solr/licenses/rocksdbjni-10.1.3.jar.sha1Adds updated checksum.
solr/licenses/pcollections-4.0.1.jar.sha1Removes unused checksum.
solr/licenses/paranamer-2.8.3.jar.sha1Removes unused checksum.
solr/licenses/metrics-core-2.2.0.jar.sha1Removes unused checksum.
solr/licenses/lz4-java-1.10.2.jar.sha1Adds updated checksum.
solr/licenses/lz4-java-1.10.1.jar.sha1Removes old checksum.
solr/licenses/kafka-transaction-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-tools-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-streams-4.3.1.jar.sha1Adds Kafka Streams checksum.
solr/licenses/kafka-streams-4.3.1-test.jar.sha1Adds Kafka test checksum.
solr/licenses/kafka-streams-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-streams-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka-storage-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-storage-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2-test.jar.sha1Removes Kafka 3 test checksum.
solr/licenses/kafka-server-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-raft-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-metadata-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-clients-4.3.1.jar.sha1Adds Kafka client checksum.
solr/licenses/kafka-clients-4.3.1-test.jar.sha1Adds Kafka client test checksum.
solr/licenses/kafka-clients-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-clients-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka_2.13-NOTICE.txtRemoves obsolete server-bundle notice.
solr/licenses/kafka_2.13-LICENSE-ASL.txtRemoves obsolete server-bundle license.
solr/licenses/kafka_2.13-3.9.2.jar.sha1Removes server artifact checksum.
solr/licenses/kafka_2.13-3.9.2-test.jar.sha1Removes server test checksum.
solr/licenses/jackson-module-scala_2.13-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/jackson-dataformat-csv-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/commons-validator-1.10.1.jar.sha1Removes unused checksum.
solr/licenses/commons-digester-2.1.jar.sha1Removes unused checksum.
solr/licenses/commons-collections-3.2.2.jar.sha1Removes unused checksum.
solr/licenses/commons-beanutils-1.11.0.jar.sha1Removes unused checksum.
solr/licenses/argparse4j-0.7.0.jar.sha1Removes unused checksum.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/ZkConfigIntegrationTest.javaMigrates to containerized Kafka.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaReindexTest.javaMigrates reindex testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaMultiCollectionIntegrationTest.javaAdds isolated container topics.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaIntegrationTest.javaMigrates primary integration tests.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/RetryQueueIntegrationTest.javaMigrates retry testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/KafkaContainerRule.javaAdds shared Kafka container lifecycle.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/DeleteByQueryToIdTest.javaMigrates delete-query testing.
solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/Util.javaUpdates committed-offset API usage.
solr/cross-dc-manager/gradle.lockfileRefreshes manager dependencies.
solr/cross-dc-manager/build.gradleAdds Testcontainers and removes server dependencies.
gradle/testing/randomization/policies/solr-tests.policyAdds a global permission grant.
gradle/libs.versions.tomlDeclares Kafka 4 and Testcontainers Kafka.
changelog/unreleased/SOLR-18300-update-kafka-v4.ymlRecords the dependency update.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +279 to +282
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just pushed up a simpler test policy! Please @jaykay12 let me know that it works for you locally!

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hey @epugh , no this is the test that i am using to verify : SolrAndKafkaReindexTest

with dockerhub running in local, this test was passing earlier with global override. for the simpler policy(your changes) it is now faiiling, this is the error that i see.

Screenshot 2026-08-21 at 3 48 05 AM

does this test work for you locally with the simpler policy?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

super! thanks @epugh for the help here. 🚀

running perfectly fine after your these changes. 36bdb33

Screenshot 2026-08-21 at 3 52 08 AM

Comment threadsolr/cross-dc-manager/build.gradle Outdated
Comment on lines +67 to +68
testImplementation libs.testcontainers.kafka

@epughepugh mentioned this pull request Aug 20, 2026
1 task
* <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 {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks much neat! 👍🏽
thanks @epugh 🚀

Comment on lines +77 to +81
// 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

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is great! 💯

verified this working fine on local here: #4610 (comment)

@epugh

Copy link
Copy Markdown
Contributor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

@jaykay12

jaykay12 commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

yes. @epugh with the most latest code that we have, all tests under cross-dc-manager module are running fine - locally with docker.
verified ✅

Screenshot 2026-08-21 at 4 07 59 AM

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

precommit checks running fine locally. ✅

@epugh
epugh merged commit 8c750e2 into apache:mainAug 22, 2026
5 checks passed
epugh added a commit that referenced this pull request Aug 22, 2026
Signed-off-by: jaykay12 <jalazkumar1208@gmail.com>
Co-authored-by: SolrBot <solrbot@cominvent.com>
Co-authored-by: Eric Pugh <epugh@opensourceconnections.com>
(cherry picked from commit 8c750e2)
@jaykay12
jaykay12 deleted the SOLR-18300-update-kafka-v4 branch August 22, 2026 14:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesDependency upgradesdocumentationImprovements or additions to documentationmodule:cross-dcteststool:build

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jaykay12@markrmiller@epugh@solrbot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

SOLR-18300 : Update apache.kafka to V4 - #4610

Merged
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4
Aug 22, 2026
Merged

SOLR-18300 : Update apache.kafka to V4#4610
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4

Conversation

@jaykay12

@jaykay12jaykay12 commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

https://issues.apache.org/jira/browse/SOLR-18300

Description

This branch is checked-out from the branch which solrbot created.
This PR is a superset of #3274 (-> can be closed once this is merged)

PackageTypeUpdateChange
org.apache.kafka:kafka-streamsdependenciesmajor3.9.2 → 4.3.1
org.apache.kafka:kafka-server-commondependenciesmajor❌ (Removed)
org.apache.kafka:kafka_2.13dependenciesmajor❌ (Removed)
org.apache.kafka:kafka-clientsdependenciesmajor3.9.2 → 4.3.1
org.testcontainers:testcontainers-kafkadependenciesmajor✅ (Added) 2.0.5

There were few major & significant changes introduced in apache.kafka v4, which are being done in this PR alongside the normal version bumps.

Solution

We were using EmbeddedKafkaCluster which in V4 is no longer supported.
Went ahead with the TestContainer approach & updated all tests in cross-dc-manager module accordingly.

AI Usage Disclosure - Used Gemini Chat (3.5 Flash) - for the guidance & code snippets.

Tests

./gradlew check -x test -> ✅

Checklist

Please review the following and check all that apply:

  • I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
  • I have created a Jira issue and added the issue ID to my pull request title.
  • I have given Solr maintainers access to contribute to my PR branch. (optional but recommended, not available for branches on forks living under an organisation)
  • I have developed this patch against the main branch.
  • I have run ./gradlew check.
  • I have added tests for my changes.
  • I have added documentation for the Reference Guide
  • I have added a changelog entry for my change

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self-review ✅

for (TopicPartition topicPartition : topicPartitions) {
if (topicPartition.topic().equals(topic)) {
long endOffset = consumer.position(topicPartition);
long committedOffset = consumer.committed(topicPartition).offset();

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/apache/solr/actions/runs/28428066221/job/84235821648 , Simply updating the version was giving compilation error.

Image

Evidences for supporting this change:

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is one of those deprecated apis that I saw now being fixed!

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Comment on lines +277 to +281
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

@jaykay12jaykay12Jul 4, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[pending-to-discuss] with reviewer on the right way here. This works, but this is surely not the right way.

This is required to resolve this error, which comes in the cross-dc-manager test which interacts with the kafka container which runs on docker daemon.

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe there are ways to get around this with a more narrow line in solr-tests.policy.

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Since Kafka 4.x fully supports lightweight, fast KRaft startups, the cleanest modern approach is to spin up an ephemeral Docker container using Testcontainers. It completely isolates Kafka from the JVM running Solr. [Industry standards]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense. We do this for Tika testing...

@markrmiller

Copy link
Copy Markdown
Member

Just curious: what motivated the upgrade?

@jaykay12

Copy link
Copy Markdown
ContributorAuthor

Just curious: what motivated the upgrade?

I came across this thread: https://lists.apache.org/thread/fkb9dgtybbjz4f5jzk6qb6ysh18bt5n5 by @janhoy asking for help in getting upgrades done & I landed upon the PR: #3274 that was raised by solrbot initially some 1 year back & was still pending. I thought of taking it to closure.

Since there were major changes that were required, I created Jira & started working on it.

@epugh
epugh requested a balanced review from CopilotAugust 20, 2026 15:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Upgrades CrossDC to Apache Kafka 4.3.1 and migrates integration tests from embedded Kafka to Testcontainers.

Changes:

  • Updates Kafka dependencies, locks, licenses, documentation, and changelog.
  • Adds a reusable Kafka Testcontainers rule and AdminClient-based topic creation.
  • Adapts Kafka 4 APIs and isolates per-test topics.

Reviewed changes

Copilot reviewed 60 out of 60 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
solr/solr-ref-guide/modules/deployment-guide/pages/cross-dc-replication.adocDocuments Kafka compatibility.
solr/modules/cross-dc/gradle.lockfileLocks Kafka 4 dependencies.
solr/licenses/zstd-jni-1.5.6-4.jar.sha1Removes obsolete checksum.
solr/licenses/zstd-jni-1.5.6-10.jar.sha1Adds updated checksum.
solr/licenses/testcontainers-kafka-2.0.5.jar.sha1Adds Testcontainers Kafka checksum.
solr/licenses/scala-reflect-2.13.15.jar.sha1Removes unused checksum.
solr/licenses/scala-logging_2.13-3.9.5.jar.sha1Removes unused checksum.
solr/licenses/scala-library-2.13.18.jar.sha1Removes unused checksum.
solr/licenses/scala-java8-compat_2.13-1.0.2.jar.sha1Removes unused checksum.
solr/licenses/scala-collection-compat_2.13-2.10.0.jar.sha1Removes unused checksum.
solr/licenses/rocksdbjni-7.9.2.jar.sha1Removes old checksum.
solr/licenses/rocksdbjni-10.1.3.jar.sha1Adds updated checksum.
solr/licenses/pcollections-4.0.1.jar.sha1Removes unused checksum.
solr/licenses/paranamer-2.8.3.jar.sha1Removes unused checksum.
solr/licenses/metrics-core-2.2.0.jar.sha1Removes unused checksum.
solr/licenses/lz4-java-1.10.2.jar.sha1Adds updated checksum.
solr/licenses/lz4-java-1.10.1.jar.sha1Removes old checksum.
solr/licenses/kafka-transaction-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-tools-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-streams-4.3.1.jar.sha1Adds Kafka Streams checksum.
solr/licenses/kafka-streams-4.3.1-test.jar.sha1Adds Kafka test checksum.
solr/licenses/kafka-streams-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-streams-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka-storage-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-storage-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2-test.jar.sha1Removes Kafka 3 test checksum.
solr/licenses/kafka-server-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-raft-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-metadata-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-clients-4.3.1.jar.sha1Adds Kafka client checksum.
solr/licenses/kafka-clients-4.3.1-test.jar.sha1Adds Kafka client test checksum.
solr/licenses/kafka-clients-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-clients-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka_2.13-NOTICE.txtRemoves obsolete server-bundle notice.
solr/licenses/kafka_2.13-LICENSE-ASL.txtRemoves obsolete server-bundle license.
solr/licenses/kafka_2.13-3.9.2.jar.sha1Removes server artifact checksum.
solr/licenses/kafka_2.13-3.9.2-test.jar.sha1Removes server test checksum.
solr/licenses/jackson-module-scala_2.13-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/jackson-dataformat-csv-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/commons-validator-1.10.1.jar.sha1Removes unused checksum.
solr/licenses/commons-digester-2.1.jar.sha1Removes unused checksum.
solr/licenses/commons-collections-3.2.2.jar.sha1Removes unused checksum.
solr/licenses/commons-beanutils-1.11.0.jar.sha1Removes unused checksum.
solr/licenses/argparse4j-0.7.0.jar.sha1Removes unused checksum.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/ZkConfigIntegrationTest.javaMigrates to containerized Kafka.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaReindexTest.javaMigrates reindex testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaMultiCollectionIntegrationTest.javaAdds isolated container topics.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaIntegrationTest.javaMigrates primary integration tests.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/RetryQueueIntegrationTest.javaMigrates retry testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/KafkaContainerRule.javaAdds shared Kafka container lifecycle.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/DeleteByQueryToIdTest.javaMigrates delete-query testing.
solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/Util.javaUpdates committed-offset API usage.
solr/cross-dc-manager/gradle.lockfileRefreshes manager dependencies.
solr/cross-dc-manager/build.gradleAdds Testcontainers and removes server dependencies.
gradle/testing/randomization/policies/solr-tests.policyAdds a global permission grant.
gradle/libs.versions.tomlDeclares Kafka 4 and Testcontainers Kafka.
changelog/unreleased/SOLR-18300-update-kafka-v4.ymlRecords the dependency update.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +279 to +282
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just pushed up a simpler test policy! Please @jaykay12 let me know that it works for you locally!

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hey @epugh , no this is the test that i am using to verify : SolrAndKafkaReindexTest

with dockerhub running in local, this test was passing earlier with global override. for the simpler policy(your changes) it is now faiiling, this is the error that i see.

Screenshot 2026-08-21 at 3 48 05 AM

does this test work for you locally with the simpler policy?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

super! thanks @epugh for the help here. 🚀

running perfectly fine after your these changes. 36bdb33

Screenshot 2026-08-21 at 3 52 08 AM

Comment threadsolr/cross-dc-manager/build.gradle Outdated
Comment on lines +67 to +68
testImplementation libs.testcontainers.kafka

@epughepugh mentioned this pull request Aug 20, 2026
1 task
* <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 {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks much neat! 👍🏽
thanks @epugh 🚀

Comment on lines +77 to +81
// 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

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is great! 💯

verified this working fine on local here: #4610 (comment)

@epugh

Copy link
Copy Markdown
Contributor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

@jaykay12

jaykay12 commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

yes. @epugh with the most latest code that we have, all tests under cross-dc-manager module are running fine - locally with docker.
verified ✅

Screenshot 2026-08-21 at 4 07 59 AM

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

precommit checks running fine locally. ✅

@epugh
epugh merged commit 8c750e2 into apache:mainAug 22, 2026
5 checks passed
epugh added a commit that referenced this pull request Aug 22, 2026
Signed-off-by: jaykay12 <jalazkumar1208@gmail.com>
Co-authored-by: SolrBot <solrbot@cominvent.com>
Co-authored-by: Eric Pugh <epugh@opensourceconnections.com>
(cherry picked from commit 8c750e2)
@jaykay12
jaykay12 deleted the SOLR-18300-update-kafka-v4 branch August 22, 2026 14:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesDependency upgradesdocumentationImprovements or additions to documentationmodule:cross-dcteststool:build

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jaykay12@markrmiller@epugh@solrbot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

SOLR-18300 : Update apache.kafka to V4 - #4610

Merged
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4
Aug 22, 2026
Merged

SOLR-18300 : Update apache.kafka to V4#4610
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4

Conversation

@jaykay12

@jaykay12jaykay12 commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

https://issues.apache.org/jira/browse/SOLR-18300

Description

This branch is checked-out from the branch which solrbot created.
This PR is a superset of #3274 (-> can be closed once this is merged)

PackageTypeUpdateChange
org.apache.kafka:kafka-streamsdependenciesmajor3.9.2 → 4.3.1
org.apache.kafka:kafka-server-commondependenciesmajor❌ (Removed)
org.apache.kafka:kafka_2.13dependenciesmajor❌ (Removed)
org.apache.kafka:kafka-clientsdependenciesmajor3.9.2 → 4.3.1
org.testcontainers:testcontainers-kafkadependenciesmajor✅ (Added) 2.0.5

There were few major & significant changes introduced in apache.kafka v4, which are being done in this PR alongside the normal version bumps.

Solution

We were using EmbeddedKafkaCluster which in V4 is no longer supported.
Went ahead with the TestContainer approach & updated all tests in cross-dc-manager module accordingly.

AI Usage Disclosure - Used Gemini Chat (3.5 Flash) - for the guidance & code snippets.

Tests

./gradlew check -x test -> ✅

Checklist

Please review the following and check all that apply:

  • I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
  • I have created a Jira issue and added the issue ID to my pull request title.
  • I have given Solr maintainers access to contribute to my PR branch. (optional but recommended, not available for branches on forks living under an organisation)
  • I have developed this patch against the main branch.
  • I have run ./gradlew check.
  • I have added tests for my changes.
  • I have added documentation for the Reference Guide
  • I have added a changelog entry for my change

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self-review ✅

for (TopicPartition topicPartition : topicPartitions) {
if (topicPartition.topic().equals(topic)) {
long endOffset = consumer.position(topicPartition);
long committedOffset = consumer.committed(topicPartition).offset();

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/apache/solr/actions/runs/28428066221/job/84235821648 , Simply updating the version was giving compilation error.

Image

Evidences for supporting this change:

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is one of those deprecated apis that I saw now being fixed!

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Comment on lines +277 to +281
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

@jaykay12jaykay12Jul 4, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[pending-to-discuss] with reviewer on the right way here. This works, but this is surely not the right way.

This is required to resolve this error, which comes in the cross-dc-manager test which interacts with the kafka container which runs on docker daemon.

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe there are ways to get around this with a more narrow line in solr-tests.policy.

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Since Kafka 4.x fully supports lightweight, fast KRaft startups, the cleanest modern approach is to spin up an ephemeral Docker container using Testcontainers. It completely isolates Kafka from the JVM running Solr. [Industry standards]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense. We do this for Tika testing...

@markrmiller

Copy link
Copy Markdown
Member

Just curious: what motivated the upgrade?

@jaykay12

Copy link
Copy Markdown
ContributorAuthor

Just curious: what motivated the upgrade?

I came across this thread: https://lists.apache.org/thread/fkb9dgtybbjz4f5jzk6qb6ysh18bt5n5 by @janhoy asking for help in getting upgrades done & I landed upon the PR: #3274 that was raised by solrbot initially some 1 year back & was still pending. I thought of taking it to closure.

Since there were major changes that were required, I created Jira & started working on it.

@epugh
epugh requested a balanced review from CopilotAugust 20, 2026 15:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Upgrades CrossDC to Apache Kafka 4.3.1 and migrates integration tests from embedded Kafka to Testcontainers.

Changes:

  • Updates Kafka dependencies, locks, licenses, documentation, and changelog.
  • Adds a reusable Kafka Testcontainers rule and AdminClient-based topic creation.
  • Adapts Kafka 4 APIs and isolates per-test topics.

Reviewed changes

Copilot reviewed 60 out of 60 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
solr/solr-ref-guide/modules/deployment-guide/pages/cross-dc-replication.adocDocuments Kafka compatibility.
solr/modules/cross-dc/gradle.lockfileLocks Kafka 4 dependencies.
solr/licenses/zstd-jni-1.5.6-4.jar.sha1Removes obsolete checksum.
solr/licenses/zstd-jni-1.5.6-10.jar.sha1Adds updated checksum.
solr/licenses/testcontainers-kafka-2.0.5.jar.sha1Adds Testcontainers Kafka checksum.
solr/licenses/scala-reflect-2.13.15.jar.sha1Removes unused checksum.
solr/licenses/scala-logging_2.13-3.9.5.jar.sha1Removes unused checksum.
solr/licenses/scala-library-2.13.18.jar.sha1Removes unused checksum.
solr/licenses/scala-java8-compat_2.13-1.0.2.jar.sha1Removes unused checksum.
solr/licenses/scala-collection-compat_2.13-2.10.0.jar.sha1Removes unused checksum.
solr/licenses/rocksdbjni-7.9.2.jar.sha1Removes old checksum.
solr/licenses/rocksdbjni-10.1.3.jar.sha1Adds updated checksum.
solr/licenses/pcollections-4.0.1.jar.sha1Removes unused checksum.
solr/licenses/paranamer-2.8.3.jar.sha1Removes unused checksum.
solr/licenses/metrics-core-2.2.0.jar.sha1Removes unused checksum.
solr/licenses/lz4-java-1.10.2.jar.sha1Adds updated checksum.
solr/licenses/lz4-java-1.10.1.jar.sha1Removes old checksum.
solr/licenses/kafka-transaction-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-tools-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-streams-4.3.1.jar.sha1Adds Kafka Streams checksum.
solr/licenses/kafka-streams-4.3.1-test.jar.sha1Adds Kafka test checksum.
solr/licenses/kafka-streams-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-streams-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka-storage-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-storage-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2-test.jar.sha1Removes Kafka 3 test checksum.
solr/licenses/kafka-server-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-raft-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-metadata-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-clients-4.3.1.jar.sha1Adds Kafka client checksum.
solr/licenses/kafka-clients-4.3.1-test.jar.sha1Adds Kafka client test checksum.
solr/licenses/kafka-clients-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-clients-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka_2.13-NOTICE.txtRemoves obsolete server-bundle notice.
solr/licenses/kafka_2.13-LICENSE-ASL.txtRemoves obsolete server-bundle license.
solr/licenses/kafka_2.13-3.9.2.jar.sha1Removes server artifact checksum.
solr/licenses/kafka_2.13-3.9.2-test.jar.sha1Removes server test checksum.
solr/licenses/jackson-module-scala_2.13-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/jackson-dataformat-csv-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/commons-validator-1.10.1.jar.sha1Removes unused checksum.
solr/licenses/commons-digester-2.1.jar.sha1Removes unused checksum.
solr/licenses/commons-collections-3.2.2.jar.sha1Removes unused checksum.
solr/licenses/commons-beanutils-1.11.0.jar.sha1Removes unused checksum.
solr/licenses/argparse4j-0.7.0.jar.sha1Removes unused checksum.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/ZkConfigIntegrationTest.javaMigrates to containerized Kafka.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaReindexTest.javaMigrates reindex testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaMultiCollectionIntegrationTest.javaAdds isolated container topics.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaIntegrationTest.javaMigrates primary integration tests.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/RetryQueueIntegrationTest.javaMigrates retry testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/KafkaContainerRule.javaAdds shared Kafka container lifecycle.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/DeleteByQueryToIdTest.javaMigrates delete-query testing.
solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/Util.javaUpdates committed-offset API usage.
solr/cross-dc-manager/gradle.lockfileRefreshes manager dependencies.
solr/cross-dc-manager/build.gradleAdds Testcontainers and removes server dependencies.
gradle/testing/randomization/policies/solr-tests.policyAdds a global permission grant.
gradle/libs.versions.tomlDeclares Kafka 4 and Testcontainers Kafka.
changelog/unreleased/SOLR-18300-update-kafka-v4.ymlRecords the dependency update.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +279 to +282
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just pushed up a simpler test policy! Please @jaykay12 let me know that it works for you locally!

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hey @epugh , no this is the test that i am using to verify : SolrAndKafkaReindexTest

with dockerhub running in local, this test was passing earlier with global override. for the simpler policy(your changes) it is now faiiling, this is the error that i see.

Screenshot 2026-08-21 at 3 48 05 AM

does this test work for you locally with the simpler policy?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

super! thanks @epugh for the help here. 🚀

running perfectly fine after your these changes. 36bdb33

Screenshot 2026-08-21 at 3 52 08 AM

Comment threadsolr/cross-dc-manager/build.gradle Outdated
Comment on lines +67 to +68
testImplementation libs.testcontainers.kafka

@epughepugh mentioned this pull request Aug 20, 2026
1 task
* <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 {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks much neat! 👍🏽
thanks @epugh 🚀

Comment on lines +77 to +81
// 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

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is great! 💯

verified this working fine on local here: #4610 (comment)

@epugh

Copy link
Copy Markdown
Contributor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

@jaykay12

jaykay12 commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

yes. @epugh with the most latest code that we have, all tests under cross-dc-manager module are running fine - locally with docker.
verified ✅

Screenshot 2026-08-21 at 4 07 59 AM

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

precommit checks running fine locally. ✅

@epugh
epugh merged commit 8c750e2 into apache:mainAug 22, 2026
5 checks passed
epugh added a commit that referenced this pull request Aug 22, 2026
Signed-off-by: jaykay12 <jalazkumar1208@gmail.com>
Co-authored-by: SolrBot <solrbot@cominvent.com>
Co-authored-by: Eric Pugh <epugh@opensourceconnections.com>
(cherry picked from commit 8c750e2)
@jaykay12
jaykay12 deleted the SOLR-18300-update-kafka-v4 branch August 22, 2026 14:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesDependency upgradesdocumentationImprovements or additions to documentationmodule:cross-dcteststool:build

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jaykay12@markrmiller@epugh@solrbot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

SOLR-18300 : Update apache.kafka to V4 - #4610

Merged
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4
Aug 22, 2026
Merged

SOLR-18300 : Update apache.kafka to V4#4610
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4

Conversation

@jaykay12

@jaykay12jaykay12 commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

https://issues.apache.org/jira/browse/SOLR-18300

Description

This branch is checked-out from the branch which solrbot created.
This PR is a superset of #3274 (-> can be closed once this is merged)

PackageTypeUpdateChange
org.apache.kafka:kafka-streamsdependenciesmajor3.9.2 → 4.3.1
org.apache.kafka:kafka-server-commondependenciesmajor❌ (Removed)
org.apache.kafka:kafka_2.13dependenciesmajor❌ (Removed)
org.apache.kafka:kafka-clientsdependenciesmajor3.9.2 → 4.3.1
org.testcontainers:testcontainers-kafkadependenciesmajor✅ (Added) 2.0.5

There were few major & significant changes introduced in apache.kafka v4, which are being done in this PR alongside the normal version bumps.

Solution

We were using EmbeddedKafkaCluster which in V4 is no longer supported.
Went ahead with the TestContainer approach & updated all tests in cross-dc-manager module accordingly.

AI Usage Disclosure - Used Gemini Chat (3.5 Flash) - for the guidance & code snippets.

Tests

./gradlew check -x test -> ✅

Checklist

Please review the following and check all that apply:

  • I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
  • I have created a Jira issue and added the issue ID to my pull request title.
  • I have given Solr maintainers access to contribute to my PR branch. (optional but recommended, not available for branches on forks living under an organisation)
  • I have developed this patch against the main branch.
  • I have run ./gradlew check.
  • I have added tests for my changes.
  • I have added documentation for the Reference Guide
  • I have added a changelog entry for my change

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self-review ✅

for (TopicPartition topicPartition : topicPartitions) {
if (topicPartition.topic().equals(topic)) {
long endOffset = consumer.position(topicPartition);
long committedOffset = consumer.committed(topicPartition).offset();

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/apache/solr/actions/runs/28428066221/job/84235821648 , Simply updating the version was giving compilation error.

Image

Evidences for supporting this change:

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is one of those deprecated apis that I saw now being fixed!

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Comment on lines +277 to +281
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

@jaykay12jaykay12Jul 4, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[pending-to-discuss] with reviewer on the right way here. This works, but this is surely not the right way.

This is required to resolve this error, which comes in the cross-dc-manager test which interacts with the kafka container which runs on docker daemon.

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe there are ways to get around this with a more narrow line in solr-tests.policy.

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Since Kafka 4.x fully supports lightweight, fast KRaft startups, the cleanest modern approach is to spin up an ephemeral Docker container using Testcontainers. It completely isolates Kafka from the JVM running Solr. [Industry standards]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense. We do this for Tika testing...

@markrmiller

Copy link
Copy Markdown
Member

Just curious: what motivated the upgrade?

@jaykay12

Copy link
Copy Markdown
ContributorAuthor

Just curious: what motivated the upgrade?

I came across this thread: https://lists.apache.org/thread/fkb9dgtybbjz4f5jzk6qb6ysh18bt5n5 by @janhoy asking for help in getting upgrades done & I landed upon the PR: #3274 that was raised by solrbot initially some 1 year back & was still pending. I thought of taking it to closure.

Since there were major changes that were required, I created Jira & started working on it.

@epugh
epugh requested a balanced review from CopilotAugust 20, 2026 15:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Upgrades CrossDC to Apache Kafka 4.3.1 and migrates integration tests from embedded Kafka to Testcontainers.

Changes:

  • Updates Kafka dependencies, locks, licenses, documentation, and changelog.
  • Adds a reusable Kafka Testcontainers rule and AdminClient-based topic creation.
  • Adapts Kafka 4 APIs and isolates per-test topics.

Reviewed changes

Copilot reviewed 60 out of 60 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
solr/solr-ref-guide/modules/deployment-guide/pages/cross-dc-replication.adocDocuments Kafka compatibility.
solr/modules/cross-dc/gradle.lockfileLocks Kafka 4 dependencies.
solr/licenses/zstd-jni-1.5.6-4.jar.sha1Removes obsolete checksum.
solr/licenses/zstd-jni-1.5.6-10.jar.sha1Adds updated checksum.
solr/licenses/testcontainers-kafka-2.0.5.jar.sha1Adds Testcontainers Kafka checksum.
solr/licenses/scala-reflect-2.13.15.jar.sha1Removes unused checksum.
solr/licenses/scala-logging_2.13-3.9.5.jar.sha1Removes unused checksum.
solr/licenses/scala-library-2.13.18.jar.sha1Removes unused checksum.
solr/licenses/scala-java8-compat_2.13-1.0.2.jar.sha1Removes unused checksum.
solr/licenses/scala-collection-compat_2.13-2.10.0.jar.sha1Removes unused checksum.
solr/licenses/rocksdbjni-7.9.2.jar.sha1Removes old checksum.
solr/licenses/rocksdbjni-10.1.3.jar.sha1Adds updated checksum.
solr/licenses/pcollections-4.0.1.jar.sha1Removes unused checksum.
solr/licenses/paranamer-2.8.3.jar.sha1Removes unused checksum.
solr/licenses/metrics-core-2.2.0.jar.sha1Removes unused checksum.
solr/licenses/lz4-java-1.10.2.jar.sha1Adds updated checksum.
solr/licenses/lz4-java-1.10.1.jar.sha1Removes old checksum.
solr/licenses/kafka-transaction-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-tools-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-streams-4.3.1.jar.sha1Adds Kafka Streams checksum.
solr/licenses/kafka-streams-4.3.1-test.jar.sha1Adds Kafka test checksum.
solr/licenses/kafka-streams-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-streams-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka-storage-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-storage-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2-test.jar.sha1Removes Kafka 3 test checksum.
solr/licenses/kafka-server-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-raft-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-metadata-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-clients-4.3.1.jar.sha1Adds Kafka client checksum.
solr/licenses/kafka-clients-4.3.1-test.jar.sha1Adds Kafka client test checksum.
solr/licenses/kafka-clients-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-clients-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka_2.13-NOTICE.txtRemoves obsolete server-bundle notice.
solr/licenses/kafka_2.13-LICENSE-ASL.txtRemoves obsolete server-bundle license.
solr/licenses/kafka_2.13-3.9.2.jar.sha1Removes server artifact checksum.
solr/licenses/kafka_2.13-3.9.2-test.jar.sha1Removes server test checksum.
solr/licenses/jackson-module-scala_2.13-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/jackson-dataformat-csv-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/commons-validator-1.10.1.jar.sha1Removes unused checksum.
solr/licenses/commons-digester-2.1.jar.sha1Removes unused checksum.
solr/licenses/commons-collections-3.2.2.jar.sha1Removes unused checksum.
solr/licenses/commons-beanutils-1.11.0.jar.sha1Removes unused checksum.
solr/licenses/argparse4j-0.7.0.jar.sha1Removes unused checksum.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/ZkConfigIntegrationTest.javaMigrates to containerized Kafka.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaReindexTest.javaMigrates reindex testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaMultiCollectionIntegrationTest.javaAdds isolated container topics.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaIntegrationTest.javaMigrates primary integration tests.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/RetryQueueIntegrationTest.javaMigrates retry testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/KafkaContainerRule.javaAdds shared Kafka container lifecycle.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/DeleteByQueryToIdTest.javaMigrates delete-query testing.
solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/Util.javaUpdates committed-offset API usage.
solr/cross-dc-manager/gradle.lockfileRefreshes manager dependencies.
solr/cross-dc-manager/build.gradleAdds Testcontainers and removes server dependencies.
gradle/testing/randomization/policies/solr-tests.policyAdds a global permission grant.
gradle/libs.versions.tomlDeclares Kafka 4 and Testcontainers Kafka.
changelog/unreleased/SOLR-18300-update-kafka-v4.ymlRecords the dependency update.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +279 to +282
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just pushed up a simpler test policy! Please @jaykay12 let me know that it works for you locally!

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hey @epugh , no this is the test that i am using to verify : SolrAndKafkaReindexTest

with dockerhub running in local, this test was passing earlier with global override. for the simpler policy(your changes) it is now faiiling, this is the error that i see.

Screenshot 2026-08-21 at 3 48 05 AM

does this test work for you locally with the simpler policy?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

super! thanks @epugh for the help here. 🚀

running perfectly fine after your these changes. 36bdb33

Screenshot 2026-08-21 at 3 52 08 AM

Comment threadsolr/cross-dc-manager/build.gradle Outdated
Comment on lines +67 to +68
testImplementation libs.testcontainers.kafka

@epughepugh mentioned this pull request Aug 20, 2026
1 task
* <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 {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks much neat! 👍🏽
thanks @epugh 🚀

Comment on lines +77 to +81
// 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

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is great! 💯

verified this working fine on local here: #4610 (comment)

@epugh

Copy link
Copy Markdown
Contributor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

@jaykay12

jaykay12 commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

yes. @epugh with the most latest code that we have, all tests under cross-dc-manager module are running fine - locally with docker.
verified ✅

Screenshot 2026-08-21 at 4 07 59 AM

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

precommit checks running fine locally. ✅

@epugh
epugh merged commit 8c750e2 into apache:mainAug 22, 2026
5 checks passed
epugh added a commit that referenced this pull request Aug 22, 2026
Signed-off-by: jaykay12 <jalazkumar1208@gmail.com>
Co-authored-by: SolrBot <solrbot@cominvent.com>
Co-authored-by: Eric Pugh <epugh@opensourceconnections.com>
(cherry picked from commit 8c750e2)
@jaykay12
jaykay12 deleted the SOLR-18300-update-kafka-v4 branch August 22, 2026 14:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesDependency upgradesdocumentationImprovements or additions to documentationmodule:cross-dcteststool:build

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jaykay12@markrmiller@epugh@solrbot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

SOLR-18300 : Update apache.kafka to V4 - #4610

Merged
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4
Aug 22, 2026
Merged

SOLR-18300 : Update apache.kafka to V4#4610
epugh merged 43 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4

Conversation

@jaykay12

@jaykay12jaykay12 commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

https://issues.apache.org/jira/browse/SOLR-18300

Description

This branch is checked-out from the branch which solrbot created.
This PR is a superset of #3274 (-> can be closed once this is merged)

PackageTypeUpdateChange
org.apache.kafka:kafka-streamsdependenciesmajor3.9.2 → 4.3.1
org.apache.kafka:kafka-server-commondependenciesmajor❌ (Removed)
org.apache.kafka:kafka_2.13dependenciesmajor❌ (Removed)
org.apache.kafka:kafka-clientsdependenciesmajor3.9.2 → 4.3.1
org.testcontainers:testcontainers-kafkadependenciesmajor✅ (Added) 2.0.5

There were few major & significant changes introduced in apache.kafka v4, which are being done in this PR alongside the normal version bumps.

Solution

We were using EmbeddedKafkaCluster which in V4 is no longer supported.
Went ahead with the TestContainer approach & updated all tests in cross-dc-manager module accordingly.

AI Usage Disclosure - Used Gemini Chat (3.5 Flash) - for the guidance & code snippets.

Tests

./gradlew check -x test -> ✅

Checklist

Please review the following and check all that apply:

  • I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
  • I have created a Jira issue and added the issue ID to my pull request title.
  • I have given Solr maintainers access to contribute to my PR branch. (optional but recommended, not available for branches on forks living under an organisation)
  • I have developed this patch against the main branch.
  • I have run ./gradlew check.
  • I have added tests for my changes.
  • I have added documentation for the Reference Guide
  • I have added a changelog entry for my change

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self-review ✅

for (TopicPartition topicPartition : topicPartitions) {
if (topicPartition.topic().equals(topic)) {
long endOffset = consumer.position(topicPartition);
long committedOffset = consumer.committed(topicPartition).offset();

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/apache/solr/actions/runs/28428066221/job/84235821648 , Simply updating the version was giving compilation error.

Image

Evidences for supporting this change:

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is one of those deprecated apis that I saw now being fixed!

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Comment on lines +277 to +281
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

@jaykay12jaykay12Jul 4, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[pending-to-discuss] with reviewer on the right way here. This works, but this is surely not the right way.

This is required to resolve this error, which comes in the cross-dc-manager test which interacts with the kafka container which runs on docker daemon.

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe there are ways to get around this with a more narrow line in solr-tests.policy.

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" }

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Since Kafka 4.x fully supports lightweight, fast KRaft startups, the cleanest modern approach is to spin up an ephemeral Docker container using Testcontainers. It completely isolates Kafka from the JVM running Solr. [Industry standards]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense. We do this for Tika testing...

@markrmiller

Copy link
Copy Markdown
Member

Just curious: what motivated the upgrade?

@jaykay12

Copy link
Copy Markdown
ContributorAuthor

Just curious: what motivated the upgrade?

I came across this thread: https://lists.apache.org/thread/fkb9dgtybbjz4f5jzk6qb6ysh18bt5n5 by @janhoy asking for help in getting upgrades done & I landed upon the PR: #3274 that was raised by solrbot initially some 1 year back & was still pending. I thought of taking it to closure.

Since there were major changes that were required, I created Jira & started working on it.

@epugh
epugh requested a balanced review from CopilotAugust 20, 2026 15:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Upgrades CrossDC to Apache Kafka 4.3.1 and migrates integration tests from embedded Kafka to Testcontainers.

Changes:

  • Updates Kafka dependencies, locks, licenses, documentation, and changelog.
  • Adds a reusable Kafka Testcontainers rule and AdminClient-based topic creation.
  • Adapts Kafka 4 APIs and isolates per-test topics.

Reviewed changes

Copilot reviewed 60 out of 60 changed files in this pull request and generated 4 comments.

Show a summary per file
FileDescription
solr/solr-ref-guide/modules/deployment-guide/pages/cross-dc-replication.adocDocuments Kafka compatibility.
solr/modules/cross-dc/gradle.lockfileLocks Kafka 4 dependencies.
solr/licenses/zstd-jni-1.5.6-4.jar.sha1Removes obsolete checksum.
solr/licenses/zstd-jni-1.5.6-10.jar.sha1Adds updated checksum.
solr/licenses/testcontainers-kafka-2.0.5.jar.sha1Adds Testcontainers Kafka checksum.
solr/licenses/scala-reflect-2.13.15.jar.sha1Removes unused checksum.
solr/licenses/scala-logging_2.13-3.9.5.jar.sha1Removes unused checksum.
solr/licenses/scala-library-2.13.18.jar.sha1Removes unused checksum.
solr/licenses/scala-java8-compat_2.13-1.0.2.jar.sha1Removes unused checksum.
solr/licenses/scala-collection-compat_2.13-2.10.0.jar.sha1Removes unused checksum.
solr/licenses/rocksdbjni-7.9.2.jar.sha1Removes old checksum.
solr/licenses/rocksdbjni-10.1.3.jar.sha1Adds updated checksum.
solr/licenses/pcollections-4.0.1.jar.sha1Removes unused checksum.
solr/licenses/paranamer-2.8.3.jar.sha1Removes unused checksum.
solr/licenses/metrics-core-2.2.0.jar.sha1Removes unused checksum.
solr/licenses/lz4-java-1.10.2.jar.sha1Adds updated checksum.
solr/licenses/lz4-java-1.10.1.jar.sha1Removes old checksum.
solr/licenses/kafka-transaction-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-tools-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-streams-4.3.1.jar.sha1Adds Kafka Streams checksum.
solr/licenses/kafka-streams-4.3.1-test.jar.sha1Adds Kafka test checksum.
solr/licenses/kafka-streams-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-streams-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka-storage-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-storage-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2-test.jar.sha1Removes Kafka 3 test checksum.
solr/licenses/kafka-server-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-raft-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-metadata-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-api-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-3.9.2.jar.sha1Removes Kafka 3 artifact checksum.
solr/licenses/kafka-clients-4.3.1.jar.sha1Adds Kafka client checksum.
solr/licenses/kafka-clients-4.3.1-test.jar.sha1Adds Kafka client test checksum.
solr/licenses/kafka-clients-3.9.2.jar.sha1Removes old checksum.
solr/licenses/kafka-clients-3.9.2-test.jar.sha1Removes old test checksum.
solr/licenses/kafka_2.13-NOTICE.txtRemoves obsolete server-bundle notice.
solr/licenses/kafka_2.13-LICENSE-ASL.txtRemoves obsolete server-bundle license.
solr/licenses/kafka_2.13-3.9.2.jar.sha1Removes server artifact checksum.
solr/licenses/kafka_2.13-3.9.2-test.jar.sha1Removes server test checksum.
solr/licenses/jackson-module-scala_2.13-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/jackson-dataformat-csv-2.22.0.jar.sha1Removes unused checksum.
solr/licenses/commons-validator-1.10.1.jar.sha1Removes unused checksum.
solr/licenses/commons-digester-2.1.jar.sha1Removes unused checksum.
solr/licenses/commons-collections-3.2.2.jar.sha1Removes unused checksum.
solr/licenses/commons-beanutils-1.11.0.jar.sha1Removes unused checksum.
solr/licenses/argparse4j-0.7.0.jar.sha1Removes unused checksum.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/ZkConfigIntegrationTest.javaMigrates to containerized Kafka.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaReindexTest.javaMigrates reindex testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaMultiCollectionIntegrationTest.javaAdds isolated container topics.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaIntegrationTest.javaMigrates primary integration tests.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/RetryQueueIntegrationTest.javaMigrates retry testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/KafkaContainerRule.javaAdds shared Kafka container lifecycle.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/DeleteByQueryToIdTest.javaMigrates delete-query testing.
solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/Util.javaUpdates committed-offset API usage.
solr/cross-dc-manager/gradle.lockfileRefreshes manager dependencies.
solr/cross-dc-manager/build.gradleAdds Testcontainers and removes server dependencies.
gradle/testing/randomization/policies/solr-tests.policyAdds a global permission grant.
gradle/libs.versions.tomlDeclares Kafka 4 and Testcontainers Kafka.
changelog/unreleased/SOLR-18300-update-kafka-v4.ymlRecords the dependency update.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +279 to +282
// Global override for local integration testing
grant {
permission java.security.AllPermission;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just pushed up a simpler test policy! Please @jaykay12 let me know that it works for you locally!

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hey @epugh , no this is the test that i am using to verify : SolrAndKafkaReindexTest

with dockerhub running in local, this test was passing earlier with global override. for the simpler policy(your changes) it is now faiiling, this is the error that i see.

Screenshot 2026-08-21 at 3 48 05 AM

does this test work for you locally with the simpler policy?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

super! thanks @epugh for the help here. 🚀

running perfectly fine after your these changes. 36bdb33

Screenshot 2026-08-21 at 3 52 08 AM

Comment threadsolr/cross-dc-manager/build.gradle Outdated
Comment on lines +67 to +68
testImplementation libs.testcontainers.kafka

@epughepugh mentioned this pull request Aug 20, 2026
1 task
* <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 {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks much neat! 👍🏽
thanks @epugh 🚀

Comment on lines +77 to +81
// 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

@jaykay12jaykay12Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is great! 💯

verified this working fine on local here: #4610 (comment)

@epugh

Copy link
Copy Markdown
Contributor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

@jaykay12

jaykay12 commented Aug 20, 2026

Copy link
Copy Markdown
ContributorAuthor

@jaykay12 i just pruned some more dependencies, can you confirm the tests DO run with Docker?

yes. @epugh with the most latest code that we have, all tests under cross-dc-manager module are running fine - locally with docker.
verified ✅

Screenshot 2026-08-21 at 4 07 59 AM

@jaykay12jaykay12 left a comment

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

precommit checks running fine locally. ✅

@epugh
epugh merged commit 8c750e2 into apache:mainAug 22, 2026
5 checks passed
epugh added a commit that referenced this pull request Aug 22, 2026
Signed-off-by: jaykay12 <jalazkumar1208@gmail.com>
Co-authored-by: SolrBot <solrbot@cominvent.com>
Co-authored-by: Eric Pugh <epugh@opensourceconnections.com>
(cherry picked from commit 8c750e2)
@jaykay12
jaykay12 deleted the SOLR-18300-update-kafka-v4 branch August 22, 2026 14:04
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesDependency upgradesdocumentationImprovements or additions to documentationmodule:cross-dcteststool:build

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jaykay12@markrmiller@epugh@solrbot