3

我正在学习 Zookeeper,但我陷入了一些困惑。我浏览了各种论坛和问题,但没有一个能解决我的困惑,最终来到 SO 以澄清以下问题。

  1. 据我了解,Zookeeper 在主从架构中工作。那么 Kafka 是如何适应这种架构的呢?Kafka 集群中的每个 Kafka 代理都充当 Zookeeper 服务器集成的客户端,还是生产和消费消息的用户应用程序充当 Zookeeper 集成的客户端?

  2. 对于特定的主题/分区,一个 Kafka 代理会参与其中,如果它收到大量消息(它无法处理),是否可以使用一致的哈希分配工作负载以及 Zookeeper 架构如何支持这一点?

更新:Zookeeper 是否类似于 DynamoDB 中用于成员资格和故障检测的 Gossip 协议的变体

4

1 回答 1

4

我建议阅读 Zookeeper 文档(特别是概述部分)以阐明其主要概念及其工作原理。

  1. Kafka 代理充当 Zookeeper 客户端。它们连接到 Zookeeper 以读取和写入有关 Kafka 集群状态的数据。

    您可能会对 Zookeeper 作为领导者/追随者系统感到困惑。在 Zookeeper ensemble 中,其中一个 Zookeeper 服务器充当领导者并有效地处理请求。追随者将请求转发给领导者。

  2. Kafka 消息不会写入 Zookeeper。Zookeeper 只存储主题/分区元数据(主题配置、副本和 ISR 列表)。Kafka 代理将消息存储在其磁盘上。Kafka 生产者在发送消息时决定分区(因此是代理)。默认分区器可以使用循环在代理之间传播消息。

Zookeeper 使用自己的共识算法(Zab)。你可以在Zookeeper Wiki中找到它的描述。

于 2019-07-21T13:04:52.490 回答