Kafka consumer 不是 broker 主动推给你,而是 consumer 主动拉取。
这点非常关键。它让 consumer 自己控制:
- 什么时候拉
- 一次拉多少
- 从哪个 offset 开始拉
#consumer group 的本质
如果一个 topic 有 3 个 partition:
order-events
├── P0
├── P1
└── P2那么一个 consumer group 内部,分区会这样分摊:
Consumer Group: inventory-service
C1 -> P0
C2 -> P1
C3 -> P2如果只有两个消费者:
Consumer Group: inventory-service
C1 -> P0, P1
C2 -> P2如果有四个消费者:
Consumer Group: inventory-service
C1 -> P0
C2 -> P1
C3 -> P2
C4 -> 空闲结论非常重要:
- 同一个 consumer group 内,一个 partition 同时只会分给一个 consumer
- consumer 数量超过 partition 数量,不会继续提升并行度
#不同 group 会各自完整消费
这才是 Kafka 像“广播总线”而不是“派单队列”的地方。
Topic: order-events
Consumer Group A: inventory-service
Consumer Group B: risk-service
Consumer Group C: analytics-service这 3 个组会各自看到完整事件流,只是彼此维护各自的消费进度。
也就是:
- 库存系统能消费一遍
- 风控系统也能消费一遍
- 分析系统还能再消费一遍
一条事件,多个部门可以各自独立收听。