Kafka的较早版本(0.9之前的版本)仅将偏移量存储在ZK中,而默认情况下,较新版本的Kafka则将偏移量存储在内部Kafka主题中
__consumer_offsets(尽管较新的版本可能仍适用于ZK)。
向经纪人提供补偿的好处是,消费者不依赖ZK,因此客户只需要与经纪人对话,这简化了总体架构。另外,对于拥有大量用户的大型部署,ZK可能成为瓶颈,而Kafka可以轻松处理此负载(提交偏移量与编写主题是同一回事,并且Kafka在此处很好地扩展-
实际上,默认情况下
__consumer_offsets会创建50个分区IIRC)。
我对NodeJS或kafka-node不熟悉-它取决于客户端实现如何提交偏移量。
长话短说:如果您使用经纪人
0.10.1.0,则可以向topic提交补偿
__consumer_offsets。但是,它是否实现此协议取决于您的客户端。
更详细地说,这取决于您的代理和客户端版本(以及您使用的是哪个消费者API),因为较旧的客户端可以与较新的代理通信。首先,您需要具有代理和客户端版本
0.9或更高版本,才能将偏移量写入Kafka主题。但是,如果较旧的客户端连接到
0.9代理,它将仍然向ZK提交补偿。
对于Java使用者:
这取决于用户使用什么:0.9之前有两个“老用户”,即“高级用户”和“低级用户”。两者都直接向ZK提交偏移量。从那时起
0.9,这两个消费者合并为一个单一的消费者,称为“新消费者”(它基本上将两个老消费者的低级API和高级API统一了-
这意味着
0.9存在三种类型的消费者)。新消费者对经纪人的承诺抵消(即内部的Kafka主题)
为了简化升级,还可以使用旧的使用者(自
0.9)开始“双重提交”补偿。如果通过启用此功能
dual.commit.enabled,则偏移量将提交给ZK和
__consumer_offsets主题。这样,您就可以将偏移量从ZK转移到
__consumer_offsets主题,同时从旧的使用者API切换到新的使用者API
。



