diff --git a/bom/pom.xml b/bom/pom.xml
index 004fe17c88..f1c9aa39e9 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -40,7 +40,7 @@
1.3
docker.io/library/eclipse-temurin:17-jre-jammy
0.11.5
- docker.io/confluentinc/cp-kafka:7.3.5
+ docker.io/confluentinc/cp-kafka:7.5.0
1.4.11
docker.io/library/mongo:6.0
quay.io/quarkus/quarkus-micro-image:2.0
@@ -51,7 +51,6 @@
2.0.6
6.1.4
1.1.3
- docker.io/confluentinc/cp-zookeeper:7.3.5
8088
diff --git a/site/homepage/content/release-notes.md b/site/homepage/content/release-notes.md
index f638960a2a..c44188746f 100644
--- a/site/homepage/content/release-notes.md
+++ b/site/homepage/content/release-notes.md
@@ -14,6 +14,8 @@ description = "Information about changes in recent Hono releases. Includes new f
* When using Pub/Sub messaging, there were potentially issues concerning the AMQP connection between protocol adapter
and command router, leading for example to timeouts when MQTT devices subscribed/unsubscribed to the command topic.
This has been fixed.
+* The integration tests now use Apache Kafka 3.5.0 in Raft mode which no longer requires running a separate Apache Zookeeper
+ instance and thus simplifies test setup and configuration.
### Deprecations
diff --git a/tests/pom.xml b/tests/pom.xml
index 401bdd1e58..98fdb300af 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -1,6 +1,6 @@
-
- ${zookeeper.image.name}
- hono-zookeeper-test
-
- ${hono.kafka-messaging.disabled}
-
- custom
- ${custom.network.name}
- zookeeper
-
- 400000000
- 400000000
-
- Zookeeper
- ${log.color.kafka}
-
-
-
- .*(binding to port).*
-
-
- -Xms240M -Xmx240M
- 2181
- 2000
-
-
-
${kafka.image.name}
@@ -1261,25 +1233,28 @@
- .*(\[KafkaServer id=1\] started).*
+ .*(Kafka startTimeMs:).*
+ q1Sh-9_ISia_zwGINzRvyQ
DOCKER_INTERNAL://kafka:9092,DOCKER_EXTERNAL://${docker.host.address}:${kafka.port}
- 1
+ CONTROLLER
+ 1@127.0.0.1:9093
+ 1
0
- -Xms1024m -Xmx1024m
DOCKER_INTERNAL
- -server -XX:+UseG1GC -XX:MaxGCPauseMillis=40 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true
- DOCKER_INTERNAL://0.0.0.0:9092,DOCKER_EXTERNAL://0.0.0.0:9094
- DOCKER_INTERNAL:PLAINTEXT,DOCKER_EXTERNAL:PLAINTEXT
+ DOCKER_INTERNAL://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093,DOCKER_EXTERNAL://0.0.0.0:9094
+ CONTROLLER:PLAINTEXT,DOCKER_INTERNAL:PLAINTEXT,DOCKER_EXTERNAL:PLAINTEXT
- 1100
-
- kafka.cluster=${hono.kafka.log-level},kafka.controller=${hono.kafka.log-level},kafka.coordinator=${hono.kafka.log-level},kafka.log=${hono.kafka.log-level},kafka.authorizer=${hono.kafka.log-level},kafka.zk=${hono.kafka.log-level},state.change.logger=${hono.kafka.log-level},kafka.server=${hono.kafka.log-level},kafka.server.KafkaServer=INFO
+ 1000
+ 0
+
+ kafka=${hono.kafka.log-level},org.apache.kafka=${hono.kafka.log-level},state.change.logger=${hono.kafka.log-level},org.apache.kafka.common.utils.AppInfoParser=INFO
1
+ broker,controller
+ 127.0.0.1:9092
1
1
- zookeeper:2181
diff --git a/tests/readme.md b/tests/readme.md
index 5e5807d70a..067e728826 100644
--- a/tests/readme.md
+++ b/tests/readme.md
@@ -27,7 +27,6 @@ This starts the following Docker containers and runs the test cases against them
* MongoDB server
* Hono Authentication service
* Hono Device Registration service
-* Apache Zookeeper
* Apache Kafka
* Hono Command Router service
* Hono HTTP adapter
diff --git a/tests/src/test/java/org/eclipse/hono/tests/amqp/CommandAndControlAmqpIT.java b/tests/src/test/java/org/eclipse/hono/tests/amqp/CommandAndControlAmqpIT.java
index 6bf1edb7b9..0f71d9377a 100644
--- a/tests/src/test/java/org/eclipse/hono/tests/amqp/CommandAndControlAmqpIT.java
+++ b/tests/src/test/java/org/eclipse/hono/tests/amqp/CommandAndControlAmqpIT.java
@@ -138,6 +138,7 @@ private Future subscribeToCommands(
final Promise result = Promise.promise();
context.runOnContext(go -> {
+ log.debug("creating command consumer for tenant [{}]", tenantId);
final ProtonReceiver recv = connection.createReceiver(endpointConfig.getSubscriptionAddress(
tenantId, commandTargetDeviceId));
recv.setAutoAccept(false);
@@ -321,7 +322,10 @@ public void testSendAsyncCommandsSucceeds(
: deviceId;
final int totalNoOfCommandsToSend = 60;
- connectAndSubscribe(ctx, commandTargetDeviceId, endpointConfig,
+ connectAndSubscribe(
+ ctx,
+ commandTargetDeviceId,
+ endpointConfig,
(cmdReceiver, cmdResponseSender) -> createCommandConsumer(ctx, cmdReceiver, cmdResponseSender),
totalNoOfCommandsToSend);
if (ctx.failed()) {