Nik*_*hou 24 node.js apache-kafka apache-zookeeper
使用Kafka和Zookeeper时,我对使用偏移量存储的位置感到困惑.在某些情况下,偏移似乎存储在Zookeeper中,在其他情况下,它们存储在Kafka中.
是什么决定了偏移量是存储在Kafka还是Zookeeper中?什么是利弊?
注意:当然我也可以在一些不同的数据存储中存储我自己的偏移量,但这不是这篇文章的图片的一部分.
有关我的设置的更多详情:
Mat*_*Sax 39
较旧版本的Kafka(0.9之前版本)仅在ZK中存储偏移量,而较新版本的Kafka默认存储内部Kafka主题中的偏移量__consumer_offsets(较新版本可能仍然提交给ZK).
向代理提交偏移的优点是,消费者不依赖于ZK,因此客户只需要与经纪人交谈,这简化了整体架构.此外,对于拥有大量消费者的大型部署,ZK可能成为瓶颈,而Kafka可以轻松处理此负载(提交偏移与写入主题相同,Kafka在这里非常好地扩展 - 实际上,默认情况下__consumer_offsets创建有50个分区IIRC).
我不熟悉NodeJS或kafka-node--它依赖于客户端实现如何提交偏移量.
长话短说:如果你使用经纪人,0.10.1.0你可以提交主题偏移__consumer_offsets.但它取决于您的客户端,如果它实现此协议.
更详细地说,它取决于您的代理和客户端版本(以及您正在使用的消费者API),因为较旧的客户端可以与较新的代理进行通信.首先,您需要具有代理和客户端版本0.9或更大版本才能将偏移量写入Kafka主题.但是如果旧客户端连接到0.9代理,它仍将向ZK提交偏移量.
对于Java消费者:
这取决于消费者使用的是什么:在0.9之前有两个"老消费者"即"高级消费者"和"低级消费者".两者都直接向ZK提交抵消.因为0.9,两个消费者都被合并为单个消费者,称为"新消费者"(它基本上统一了两个老消费者的低级和高级API - 这意味着,0.9有三种类型的消费者).新的消费者承诺抵消经纪人(即内部Kafka主题)
为了使升级更容易,还可以使用旧的消费者(截至0.9)来"双重提交"偏移.如果启用此通道dual.commit.enabled,则会将偏移提交给ZK和__consumer_offsets主题.这允许您从旧的消费者API切换到新的消费者API,同时将偏移从ZK移动到__consumer_offsets主题.
小智 6
这完全取决于您使用的消费者。您应该根据您的 Kafka 版本选择合适的消费者。
对于版本0.8代理,请使用HighLevelConsumer. 您的组的偏移量存储在 zookeeper 中。
对于经纪人0.9及更高级别,您应该使用新的ConsumerGroup. 偏移量存储在 kafka 代理中。
请记住,它HighLevelConsumer仍然适用于 0.8 以后的版本,但它们已被弃用0.10.1,支持可能很快就会消失。在ConsumerGroup具有滚动迁移选项,以帮助移动HighLevelConsumer如果你致力于使用它。
| 归档时间: |
|
| 查看次数: |
11177 次 |
| 最近记录: |