kafka-offset 存储方式
早期版本消费的 offset 存放在 Zookeeper 集群,利用 Zookeeper 来存储记录每个消费者/组的消费进度,消费者需要频繁的去与 Zookeeper 进行交互,而利用ZKClient的API操作Zookeeper频繁的Write其本身就是一个比较低效的Action,对于后期水平扩展也是一个比较头疼的问题。如果期间 Zookeeper 集群发生变化,那 Kafka 集群的吞吐量也
早期版本
消费的 offset 存放在 Zookeeper 集群,利用 Zookeeper 来存储记录每个消费者/组的消费进度,消费者需要频繁的去与 Zookeeper 进行交互,而利用ZKClient的API操作Zookeeper频繁的Write其本身就是一个比较低效的Action,对于后期水平扩展也是一个比较头疼的问题。如果期间 Zookeeper 集群发生变化,那 Kafka 集群的吞吐量也跟着受影响。
0.10.1.1版本之后
消费的 offset 迁入到了 Kafka 一个名为 __consumer_offsets 的Topic,利用 Kafka 自身的 Topic,以消费的Group,Topic,以及Partition做为组合 Key,所有的消费offset都提交写入到上述的Topic。因为这部分消息是非常重要,以至于是不能容忍丢数据的,所以消息的 acking 级别设置为了 -1,生产者等到所有的 ISR 都收到消息后才会得到 ack(数据安全性极好,当然,其速度会有所影响)。所以 Kafka 又在内存中维护了一个关于 Group,Topic 和 Partition 的三元组来维护最新的 offset 信息,消费者获取最新的offset的时候会直接从内存中获取。
更多推荐
所有评论(0)