Kafka 0.8.2 新的offset管理

本文介绍了Kafka在0.8.2版本中引入的Native Offset Storage特性,该特性通过将offset管理从Zookeeper移出并实现水平扩展,解决了频繁与ZK交互导致的性能问题。通过利用Kafka自己的compacted topic,实现了更高效、可靠的offset管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前Kafka存在的一个非常大的性能问题(隐患)就是利用ZK来记录各个Consumer Group的消费进度。当然JVM Client帮我们自动做了这些事情,但是Consumer需要和ZK频繁交互,而利用ZK Client API对ZK频繁写入是一个低效的操作,并且从水平扩展性上来讲也存在问题。所以ZK抖一抖,集群吞吐量就跟着一起抖,严重的时候简直抖的停不下来。 当然某些非JVM端的API压根就不把offset存在ZK中,如基于Go的sarama,直接自己维护了一个变量在内存中记录,总之就是问题多多了。所以非JVM的客户端,大家悠着点用。


0.8.2 Kafka引入了一个叫native offset storage的玩意儿,将offset管理从ZK移出,并且可以做到水平扩展。看到这个消息大家基本都泪流满面了。


实现原理其实也很自然,利用了Kafka自己的compacted topic,以consumer group,topic与Partition的组合作为key。所以offset的提交就直接写到上述说的compacted topic中了,但是又由于offset是如此的重要以至于绝逼不能丢数据,所以消息的acking级别(由request.required.acks控制)设置为-1,producer等到所有ISR收到消息后才会得到ack(数据安全性最好,但是速度会有影响)。所以Kafka又在内存中维护了<consumer group,topic,partition>的三元组来维护最新的offset信息,consumer来取最新offset信息的时候直接内存里拿即可。当然,敏锐性强的朋友一定想到了,kafka允许你快速的checkpoint最新的offset信息到磁盘上。


至此,offset这块算是长进了一大步。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值