【发布时间】:2022-03-15 17:25:39
【问题描述】:
我们设置了一个由 3 个代理组成的 Kafka/Zookeeper 集群。我们有一个生产者,将消息发送到一个特定的 Kafka 主题和几个从该主题读取的消费者组。这些消费者通过 Zookeeper 为自己(独立于 Kafka)执行领导者选举。
使用的版本是:
- 卡夫卡:0.9.0.1
- Zookeeper:3.4.6(包含在 Kafka-Package 中)
所有进程都由主管管理。到目前为止,一切正常。我们现在尝试(出于测试目的)只是简单地杀死所有 Zookeeper 进程,看看会发生什么。
正如我们所料,我们的消费者进程无法再连接到 Zookeeper。但出乎意料的是,卡夫卡经纪人仍然有效。我们的制作人完全没有抱怨,仍然能够写到这个话题。虽然我不能使用 kafka/bin/kafka-topics.sh 或类似的东西,因为它们都需要一个 zookeeper 参数,我仍然可以看到主题日志的实际大小在增长。重新启动 zookeeper 进程后,一切都像以前一样工作了。
我们现在想不通的是……那里到底发生了什么? 我们认为,Kafka 需要一个有效的 Zookeeper-Connection,我们在网上找不到任何解释这种行为的原因。
【问题讨论】:
-
Kafka 完成的所有操作都不需要 Zookeeper。例如,Kakfa 消费者客户将他们的偏移量提交给 ZK。据我所知。如果代理无法为失败的代理托管的分区选举新的领导者,也会使用 ZK。但是,只要所有经纪人都在工作,写作就不是问题:有关详细信息,请参阅kafka.apache.org/090/documentation.html#replication 和confluent.io/blog/…。
-
> Kakfa 消费者客户将他们的偏移量提交给 ZK。他们有吗?据我了解,“新消费者”不需要那个。因为他们想将消费者与 Zookeeper 分离。这就是为什么您使用属性 bootstrap.servers 而不是 zookeeper.connect 并使用 Kafka-Ports
-
是的。旧消费者提交到 ZK 的偏移量。新的消费者将他们的偏移量提交到 Kafka 主题中,并且独立于 ZK。
-
根据 Wiki,Zookeeper 用于:服务器故障检测、数据分区和同步数据复制。请参考cwiki.apache.org/confluence/display/KAFKA/…?
标签: apache-kafka apache-zookeeper failover