Coordinator与offset管理和Consumer Rebalance
kafka的offset管理
- kafka在0.8(含)之前的版本都是用ZK来管理offset
目录结构是:/consumers/<group.id>/offsets//,zk是做分布式系统的协调的,轻量级的元数据存储,不能负责高并发读写,尤其是写操作。 - kafka在0.8之后的版本是提交offset发送给内部topic:
__consumer_offsets
- 提交过去的时候,key是group.id+topic+分区号,value就是当前offset的值
- 每隔一段时间,kafka内部会对这个topic进行compact。也就是每个group.id+topic+分区号就保留最新的那条数据即可。而且因为这个 __consumer_offsets可能会接收高并发的请求,所以默认分区50个,这样如果你的kafka部署了一个大的集群,比如有50台机器,就可以用50台机器来抗offset提交的请求压力,就好很多。