A named consumer group makes application replicas compete for messages; an anonymous group can give each instance its own subscription.
Spring Cloud Stream consumer group: scale one logical reader without copying every event
Name the logical subscriber
Three settlement replicas should form one group if each parcel event is meant to be handled once by that service. Another service, such as analytics, uses another group and gets its own copy. Leaving group unset makes the binding anonymous, which can yield a separate subscription for each instance. That may be useful for broadcast, but it is wrong for a work queue. Partition keys affect ordering within a broker, not the decision to give each group a copy.
Expect retries and rebalances
A group does not mean exactly-once business effects. A worker can write to the database and die before acknowledgment, so the next member sees the event again. Use a transactional dedup key and make every side effect replay-safe. Set concurrency with partition count and downstream connection capacity in mind.
Check the deployment topology
Start two replicas in one group and one audit replica in a different group. Send 47 distinct event IDs. Confirm each logical group receives all 47 IDs and settlement has one committed effect per ID despite a forced consumer restart. The YAML is a binding sketch; the exact broker and binder need their own integration test.
Implementation sketch
spring:
cloud:
function:
definition: settleParcel
stream:
bindings:
settleParcel-in-0:
destination: parcel-events
group: settlement-workers
consumer:
concurrency: 3Cost and verification
More consumers can raise throughput only up to broker partitions and downstream capacity. Each additional group receives a separate logical copy and adds storage and processing demand.
Common Mistakes
- Do not leave a work-queue subscriber anonymous by accident.
- Do not equate consumer-group membership with exactly-once database effects.
- Do not set concurrency above the bottleneck without measuring broker and database behavior.
Read next
Spring Cloud Stream Kafka DLQ: stop poison messages without losing the trail, Spring Kafka record keys: preserve per-SKU order without claiming global order, Spring consumer deduplication: commit the event ID with the mutation, Spring Kafka manual acknowledgement: commit work before advancing the offset.
