Skip to content

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

Open
jaykay12 wants to merge 41 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4
Open

SOLR-18300 : Update apache.kafka to V4#4610
jaykay12 wants to merge 41 commits into
apache:mainfrom
jaykay12:SOLR-18300-update-kafka-v4

Conversation

@jaykay12

@jaykay12 jaykay12 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)

Package Type Update Change
org.apache.kafka:kafka-streams dependencies major 3.9.2 → 4.3.1
org.apache.kafka:kafka-server-common dependencies major ❌ (Removed)
org.apache.kafka:kafka_2.13 dependencies major ❌ (Removed)
org.apache.kafka:kafka-clients dependencies major 3.9.2 → 4.3.1
org.testcontainers:testcontainers-kafka dependencies major ✅ (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

@jaykay12 jaykay12 left a comment

Copy link
Copy Markdown
Contributor Author

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
Contributor Author

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!

Comment thread gradle/libs.versions.toml
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
Contributor Author

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

@jaykay12 jaykay12 Jul 4, 2026

Copy link
Copy Markdown
Contributor Author

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.

Comment thread gradle/libs.versions.toml
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
Contributor Author

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

jaykay12 commented Jul 5, 2026

Copy link
Copy Markdown
Contributor Author

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.


// 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.

also, i think you have a test set up to disable the use of java scruity manger, so with that, you sholnd' tneed this.

@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Aug 18, 2026
@epugh
epugh requested a balanced review from Copilot August 20, 2026 15:49

Copilot AI 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
File Description
solr/solr-ref-guide/modules/deployment-guide/pages/cross-dc-replication.adoc Documents Kafka compatibility.
solr/modules/cross-dc/gradle.lockfile Locks Kafka 4 dependencies.
solr/licenses/zstd-jni-1.5.6-4.jar.sha1 Removes obsolete checksum.
solr/licenses/zstd-jni-1.5.6-10.jar.sha1 Adds updated checksum.
solr/licenses/testcontainers-kafka-2.0.5.jar.sha1 Adds Testcontainers Kafka checksum.
solr/licenses/scala-reflect-2.13.15.jar.sha1 Removes unused checksum.
solr/licenses/scala-logging_2.13-3.9.5.jar.sha1 Removes unused checksum.
solr/licenses/scala-library-2.13.18.jar.sha1 Removes unused checksum.
solr/licenses/scala-java8-compat_2.13-1.0.2.jar.sha1 Removes unused checksum.
solr/licenses/scala-collection-compat_2.13-2.10.0.jar.sha1 Removes unused checksum.
solr/licenses/rocksdbjni-7.9.2.jar.sha1 Removes old checksum.
solr/licenses/rocksdbjni-10.1.3.jar.sha1 Adds updated checksum.
solr/licenses/pcollections-4.0.1.jar.sha1 Removes unused checksum.
solr/licenses/paranamer-2.8.3.jar.sha1 Removes unused checksum.
solr/licenses/metrics-core-2.2.0.jar.sha1 Removes unused checksum.
solr/licenses/lz4-java-1.10.2.jar.sha1 Adds updated checksum.
solr/licenses/lz4-java-1.10.1.jar.sha1 Removes old checksum.
solr/licenses/kafka-transaction-coordinator-3.9.2.jar.sha1 Removes Kafka 3 artifact checksum.
solr/licenses/kafka-tools-api-3.9.2.jar.sha1 Removes Kafka 3 artifact checksum.
solr/licenses/kafka-streams-4.3.1.jar.sha1 Adds Kafka Streams checksum.
solr/licenses/kafka-streams-4.3.1-test.jar.sha1 Adds Kafka test checksum.
solr/licenses/kafka-streams-3.9.2.jar.sha1 Removes old checksum.
solr/licenses/kafka-streams-3.9.2-test.jar.sha1 Removes old test checksum.
solr/licenses/kafka-storage-api-3.9.2.jar.sha1 Removes Kafka 3 artifact checksum.
solr/licenses/kafka-storage-3.9.2.jar.sha1 Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2.jar.sha1 Removes Kafka 3 artifact checksum.
solr/licenses/kafka-server-common-3.9.2-test.jar.sha1 Removes Kafka 3 test checksum.
solr/licenses/kafka-server-3.9.2.jar.sha1 Removes Kafka 3 artifact checksum.
solr/licenses/kafka-raft-3.9.2.jar.sha1 Removes Kafka 3 artifact checksum.
solr/licenses/kafka-metadata-3.9.2.jar.sha1 Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-api-3.9.2.jar.sha1 Removes Kafka 3 artifact checksum.
solr/licenses/kafka-group-coordinator-3.9.2.jar.sha1 Removes Kafka 3 artifact checksum.
solr/licenses/kafka-clients-4.3.1.jar.sha1 Adds Kafka client checksum.
solr/licenses/kafka-clients-4.3.1-test.jar.sha1 Adds Kafka client test checksum.
solr/licenses/kafka-clients-3.9.2.jar.sha1 Removes old checksum.
solr/licenses/kafka-clients-3.9.2-test.jar.sha1 Removes old test checksum.
solr/licenses/kafka_2.13-NOTICE.txt Removes obsolete server-bundle notice.
solr/licenses/kafka_2.13-LICENSE-ASL.txt Removes obsolete server-bundle license.
solr/licenses/kafka_2.13-3.9.2.jar.sha1 Removes server artifact checksum.
solr/licenses/kafka_2.13-3.9.2-test.jar.sha1 Removes server test checksum.
solr/licenses/jackson-module-scala_2.13-2.22.0.jar.sha1 Removes unused checksum.
solr/licenses/jackson-dataformat-csv-2.22.0.jar.sha1 Removes unused checksum.
solr/licenses/commons-validator-1.10.1.jar.sha1 Removes unused checksum.
solr/licenses/commons-digester-2.1.jar.sha1 Removes unused checksum.
solr/licenses/commons-collections-3.2.2.jar.sha1 Removes unused checksum.
solr/licenses/commons-beanutils-1.11.0.jar.sha1 Removes unused checksum.
solr/licenses/argparse4j-0.7.0.jar.sha1 Removes unused checksum.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/ZkConfigIntegrationTest.java Migrates to containerized Kafka.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaReindexTest.java Migrates reindex testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaMultiCollectionIntegrationTest.java Adds isolated container topics.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/SolrAndKafkaIntegrationTest.java Migrates primary integration tests.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/RetryQueueIntegrationTest.java Migrates retry testing.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/KafkaContainerRule.java Adds shared Kafka container lifecycle.
solr/cross-dc-manager/src/test/org/apache/solr/crossdc/manager/DeleteByQueryToIdTest.java Migrates delete-query testing.
solr/cross-dc-manager/src/java/org/apache/solr/crossdc/manager/consumer/Util.java Updates committed-offset API usage.
solr/cross-dc-manager/gradle.lockfile Refreshes manager dependencies.
solr/cross-dc-manager/build.gradle Adds Testcontainers and removes server dependencies.
gradle/testing/randomization/policies/solr-tests.policy Adds a global permission grant.
gradle/libs.versions.toml Declares Kafka 4 and Testcontainers Kafka.
changelog/unreleased/SOLR-18300-update-kafka-v4.yml Records 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!

@jaykay12 jaykay12 Aug 20, 2026

Copy link
Copy Markdown
Contributor Author

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
Contributor Author

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 thread solr/cross-dc-manager/build.gradle Outdated
Comment on lines +67 to +68
testImplementation libs.testcontainers.kafka

@epugh epugh 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
Contributor Author

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

@jaykay12 jaykay12 Aug 20, 2026

Copy link
Copy Markdown
Contributor Author

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

epugh commented Aug 20, 2026

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
Contributor Author

@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

@github-actions github-actions Bot removed the admin-ui label Aug 21, 2026

@jaykay12 jaykay12 left a comment

Copy link
Copy Markdown
Contributor Author

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. ✅

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Dependency upgrades documentation Improvements or additions to documentation module:cross-dc tests tool:build

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants