ZooKeeper在集群中的作用?
Role of ZooKeeper in cluster?
如果我有集群托管 1 个具有三个分区的主题。所以 ZooKeeper(ZK) 集群托管 3 个代理实例。
根据我的理解,
- Producer 将与 ZooKeeper 交互以将消息发布到 broker。
- ZK 将根据每个代理实例上的负载在内部决定它需要在哪个分区发布消息。 Broker也会和ZK进行交互
维护每个消费者实例的偏移量
- 同样Consumer会和ZooKeeper交互来消费来自broker的消息。 ZK 会根据负载从正确的代理中获取消息。
但在阅读了下面 Workflow of Queue Messaging / Consumer Group
部分的粗体文字后,我感到困惑
在 kafka tutorial。我上面的理解错了吗?基于下面看起来 producer/consumer 不直接与 zookeeper 交互。是不是在别的地方
其中 ZK 与 producer/consumer 交互。如果是,谁(Zookeeper 或代理)需要发布或消费哪个代理实例消息?
ZooKeeper service is mainly used to notify producer and consumer about
the presence of any new broker in the Kafka system or failure of the
broker in the Kafka system. As per the notification received by the
Zookeeper regarding presence or failure of the broker then producer
and consumer takes decision and starts coordinating their task with
some other broker. Basically Apache Zookeeper s a distributed
configuration and synchronization service
Kafka 使用 zookeeper 用于:
1. Leader选择:对于复制因子较高的主题分区,这是必需的。想法是选择一个节点作为分区的领导者,它跟踪偏移量管理和复制到追随者。 ZK 用于选举领导者以确保始终有一个可用的领导者。
2. Cluster Memberships:管理broker
3. Topics:管理集群上存在的topic,分区数,副本数,副本位置等...
消费者特定:
您可以选择在 ZK 上管理消费者偏移量。因此ZK会管理最新的offset和消费组的成员。
希望这能回答您的问题
你好像很糊涂,你认为Kafka broker做的大部分事情其实都是client做的,你认为Zookeeper做的大部分事情其实都是broker做的。
Kafka 是一个可扩展性很强的系统,因为客户端会进行大量处理。客户端未完成的部分由代理(以及称为控制器和协调器的特殊代理组件)完成。 Zookeeper 除了存储状态和代理的一些配置(以一种非常可靠的方式)之外很少做其他事情
解决你的问题:
1) 不正确。新的 Producer 不直接与 ZooKeeper 交互。 Producer 直接与 broker 对话以发布消息或发出元数据请求以查找哪个 broker 是它要发布到的分区的领导者。
2) 不正确。 ZK 没有 "decide" 任何东西。 ZK 是一个复制的容错存储系统,代理使用它来保存集群的信息和状态。发布到哪个分区的决定在生产者中完成,取决于发布消息的密钥和客户端分区程序算法。分区不是根据负载分配的,它们是根据键分配的(或者如果键为空)然后使用循环算法。 Broker 不会与 ZK 交互来维护每个消费者实例的偏移量。消费者跟踪他们自己的偏移量并将它们存储(偶尔,通过偏移量提交)在经纪人的 _consumer_offsets 主题中。
3) 不正确。 New Consumer 不会直接与 ZooKeeper 交互来消费来自 broker 的消息。 ZK 不会根据负载从正确的代理中获取消息。消费者将直接与经纪人对话,通过使用 kafka 协议发送给经纪人的 RPC 加入和离开消费者组。
如果我有集群托管 1 个具有三个分区的主题。所以 ZooKeeper(ZK) 集群托管 3 个代理实例。
根据我的理解,
- Producer 将与 ZooKeeper 交互以将消息发布到 broker。
- ZK 将根据每个代理实例上的负载在内部决定它需要在哪个分区发布消息。 Broker也会和ZK进行交互 维护每个消费者实例的偏移量
- 同样Consumer会和ZooKeeper交互来消费来自broker的消息。 ZK 会根据负载从正确的代理中获取消息。
但在阅读了下面 Workflow of Queue Messaging / Consumer Group
部分的粗体文字后,我感到困惑
在 kafka tutorial。我上面的理解错了吗?基于下面看起来 producer/consumer 不直接与 zookeeper 交互。是不是在别的地方
其中 ZK 与 producer/consumer 交互。如果是,谁(Zookeeper 或代理)需要发布或消费哪个代理实例消息?
ZooKeeper service is mainly used to notify producer and consumer about the presence of any new broker in the Kafka system or failure of the broker in the Kafka system. As per the notification received by the Zookeeper regarding presence or failure of the broker then producer and consumer takes decision and starts coordinating their task with some other broker. Basically Apache Zookeeper s a distributed configuration and synchronization service
Kafka 使用 zookeeper 用于: 1. Leader选择:对于复制因子较高的主题分区,这是必需的。想法是选择一个节点作为分区的领导者,它跟踪偏移量管理和复制到追随者。 ZK 用于选举领导者以确保始终有一个可用的领导者。 2. Cluster Memberships:管理broker 3. Topics:管理集群上存在的topic,分区数,副本数,副本位置等...
消费者特定: 您可以选择在 ZK 上管理消费者偏移量。因此ZK会管理最新的offset和消费组的成员。
希望这能回答您的问题
你好像很糊涂,你认为Kafka broker做的大部分事情其实都是client做的,你认为Zookeeper做的大部分事情其实都是broker做的。
Kafka 是一个可扩展性很强的系统,因为客户端会进行大量处理。客户端未完成的部分由代理(以及称为控制器和协调器的特殊代理组件)完成。 Zookeeper 除了存储状态和代理的一些配置(以一种非常可靠的方式)之外很少做其他事情
解决你的问题:
1) 不正确。新的 Producer 不直接与 ZooKeeper 交互。 Producer 直接与 broker 对话以发布消息或发出元数据请求以查找哪个 broker 是它要发布到的分区的领导者。
2) 不正确。 ZK 没有 "decide" 任何东西。 ZK 是一个复制的容错存储系统,代理使用它来保存集群的信息和状态。发布到哪个分区的决定在生产者中完成,取决于发布消息的密钥和客户端分区程序算法。分区不是根据负载分配的,它们是根据键分配的(或者如果键为空)然后使用循环算法。 Broker 不会与 ZK 交互来维护每个消费者实例的偏移量。消费者跟踪他们自己的偏移量并将它们存储(偶尔,通过偏移量提交)在经纪人的 _consumer_offsets 主题中。
3) 不正确。 New Consumer 不会直接与 ZooKeeper 交互来消费来自 broker 的消息。 ZK 不会根据负载从正确的代理中获取消息。消费者将直接与经纪人对话,通过使用 kafka 协议发送给经纪人的 RPC 加入和离开消费者组。