微信号:SparkDaily

介绍:每日播报Spark相关技术及资讯,我们坚信Spark才是未来的通用大数据处理框架.

陈超:Kafka 0.8.2 新的offset管理

2015-02-06 08:28 陈超

之前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这块算是长进了一大步。


Via:ChinaScala

 
Spark技术日报 更多文章 借助 Redis ,让 Spark 提速 45 倍! Spark的调度策略详解 Spark 实战,第 6 部分: 基于 Spark ML 的文本分类 科普 | 从大数据到Hadoop,Spark,Storm Spark Streaming的还原药水——Checkpoint
猜您喜欢 观察者设计模式 Vs 事件委托(java) 解放号论坛携手易购返利送福利,1元购x6重低音耳机 NSBundle介绍 一切不赚钱的商业模式,都是耍流氓 不要在Android的Application对象中缓存数据!