全书目录

第二十篇:Kafka 完全指南 —— 城市事件广播总线宇宙

第五章:consumer / consumer group —— 谁来收听,怎么分摊

1 分钟 435 字 第 372 / 962 个阅读单元

Kafka consumer 不是 broker 主动推给你,而是 consumer 主动拉取

这点非常关键。它让 consumer 自己控制:

  • 什么时候拉
  • 一次拉多少
  • 从哪个 offset 开始拉
#consumer group 的本质

如果一个 topic 有 3 个 partition:

text
order-events
├── P0
├── P1
└── P2

那么一个 consumer group 内部,分区会这样分摊:

text
Consumer Group: inventory-service

C1 -> P0
C2 -> P1
C3 -> P2

如果只有两个消费者:

text
Consumer Group: inventory-service

C1 -> P0, P1
C2 -> P2

如果有四个消费者:

text
Consumer Group: inventory-service

C1 -> P0
C2 -> P1
C3 -> P2
C4 -> 空闲

结论非常重要:

  • 同一个 consumer group 内,一个 partition 同时只会分给一个 consumer
  • consumer 数量超过 partition 数量,不会继续提升并行度
#不同 group 会各自完整消费

这才是 Kafka 像“广播总线”而不是“派单队列”的地方。

text
Topic: order-events

Consumer Group A: inventory-service
Consumer Group B: risk-service
Consumer Group C: analytics-service

这 3 个组会各自看到完整事件流,只是彼此维护各自的消费进度。

也就是:

  • 库存系统能消费一遍
  • 风控系统也能消费一遍
  • 分析系统还能再消费一遍

一条事件,多个部门可以各自独立收听。