为什么Kafka集群中的分区领导者选举逻辑不能放在Zookeeper中,而要由控制器代理来执行?

kr98yfug  于 12个月前  发布在  Apache
关注(0)|答案(1)|浏览(160)

引用这个答案-
Kafka用zookeeper做了几件事:
集群成员资格-集群的活动代理是那些具有短暂ZK节点的代理领导者选举-充当控制器状态存储的Kafka代理的选举-一些(大部分是旧的)状态存储在ZK中-主题的配置,例如,一些曾经在ZK中的状态已经被迁移到特殊主题中。(消费者偏移量)和一些新的功能被编写为将状态完全存储在Kafka中(例如,事务日志)。总的趋势是停止在ZK中使用状态,而是自托管它(尽管代码的旧部分从未被迁移出去)。
至于为什么不使用ZK进行分区领导者选举-一个原因是有逻辑参与.当选举一个集群领导者代理时没有偏好-任何代理都可以.这与基于ZK的领导者选举的工作原理非常吻合(第一个创建并拥有一个短暂的znode的成员获胜).
当选择一个分区的领导者,然而,你需要多一点逻辑.例如-你想选举领导者与“最高水印”(与最新的数据,记住复制通常是duplex).也有逻辑周围不干净的领导者选举. ZK单独不能做到这一点,因此它是由控制器.
有谁能再解释一下最后两段吗?
我试着在网上搜索,但没有任何具体的发现。

rqqzpn5f

rqqzpn5f1#

Kafka不再需要Zookeeper,并将在下一个主要版本中删除其依赖性。
在Kafka 0.9之后,几个类似Zookeeper的函数被移到了代理中。
但除此之外,Zookeeper不跟踪主题偏移量(即水印)。

相关问题