Add share-groups module: Kafka 4.3.1 share groups with Spring for Apache Kafka 4.1.1

Six consumers on two partitions under a consumer group, a share group with the default
share.acquire.mode and a share group with record_limit; the three acknowledgement types and a
record that is released until Kafka stops redelivering it; a new share group starting at latest;
the ordering a share group gives up; and Spring Kafka's share containers in implicit and manual
acknowledgement modes. Tests run against a real broker (scripts/broker-up.sh) and write output/.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Lm655hdgDo5xsSLNomgdsy
This commit is contained in:
Claude
2026-10-13 02:43:36 +00:00
parent 4a5d3318bf
commit 5db56e70a0
23 changed files with 889 additions and 2 deletions
+29
View File
@@ -0,0 +1,29 @@
topic partitions = 2, consumers = 6, records = 60, work per record = 50 ms
== consumer group (6 KafkaConsumers, same group.id)
consumer-0 processed 26 records
consumer-1 processed 34 records
consumer-2 processed 0 records
consumer-3 processed 0 records
consumer-4 processed 0 records
consumer-5 processed 0 records
total processed = 60 in 1993 ms
== share group (6 ShareConsumers, default share.acquire.mode)
consumer-0 processed 26 records
consumer-1 processed 34 records
consumer-2 processed 0 records
consumer-3 processed 0 records
consumer-4 processed 0 records
consumer-5 processed 0 records
total processed = 60 in 1778 ms
== share group (6 ShareConsumers, share.acquire.mode=record_limit)
consumer-0 processed 9 records
consumer-1 processed 12 records
consumer-2 processed 10 records
consumer-3 processed 8 records
consumer-4 processed 9 records
consumer-5 processed 12 records
total processed = 60 in 681 ms
consumer group : consumers that received records = 2
share group, default share.acquire.mode: consumers that received records = 2
share group, acquire.mode=record_limit : consumers that received records = 6
(elapsed times vary from run to run; the shape, not the milliseconds, is the result)
+13
View File
@@ -0,0 +1,13 @@
ok delivery #1 -> accept
retry-once delivery #1 -> release
reject-me delivery #1 -> reject
always-release delivery #1 -> release
retry-once delivery #2 -> accept
always-release delivery #2 -> release
always-release delivery #3 -> release
always-release delivery #4 -> release
always-release delivery #5 -> release
deliveries of ok = 1
deliveries of retry-once = 2
deliveries of reject-me = 1
deliveries of always-release = 5
@@ -0,0 +1,3 @@
produced 3 records before any group existed
new group, default share.auto.offset.reset -> received 0 records
new group, share.auto.offset.reset=earliest -> received 3 records
@@ -0,0 +1,3 @@
produced : 0..39 in order, one key, one partition
processed : [4, 5, 6, 7, 12, 0, 13, 14, 15, 16, 17, 18, 19, 1, 20, 8, 21, 22, 23, 24, 2, 25, 26, 27, 28, 29, 30, 3, 31, 36, 9, 37, 38, 39, 32, 33, 10, 34, 35, 11]
adjacent pairs that arrived out of order = 9
@@ -0,0 +1,10 @@
== implicit mode, concurrency 4, 24 records on one topic partition
records handled = 24
distinct listener threads that handled records = 2
implicit-C-1
implicit-C-2
== manual mode (ShareAckMode.MANUAL), listener takes a ShareAcknowledgment
again delivery #1 -> release
again delivery #2 -> acknowledge
bad delivery #1 -> reject
ok delivery #1 -> acknowledge