如果我有集群托管一个主题,它有三个分区。因此,ZooKeeper(ZK)集群托管了3个代理实例。
根据地雷的理解,
但是在阅读了Workflow of Queue Messaging / Consumer Group节卡夫卡教程中的粗体文本后,我感到很困惑。我的理解是错误的吗?如下所示,生产者/消费者不直接与动物园管理员交互。ZK与生产者/消费者之间的互动是另一回事吗?如果是,谁(动物园管理员或经纪人),哪个代理实例消息需要发布或消费?
ZooKeeper服务主要用于通知生产者和消费者卡夫卡系统中任何新的经纪人的存在或卡夫卡系统中经纪人的失败。根据动物园管理员收到的关于代理的存在或失败的通知,生产者和消费者做出决定,并开始与其他代理协调他们的任务。基本上,Apache动物园管理员是一种分布式配置和同步服务。
发布于 2017-06-23 02:20:26
你似乎很纠结,因为你认为卡夫卡经纪人做的大部分事情实际上是由客户做的,而你认为由动物园管理员做的大部分事情实际上都是由经纪人做的。
Kafka是一个非常可伸缩的系统,因为客户端进行了大量的处理。客户端未完成的部分由代理(以及称为Controller和协调员的特殊代理组件)完成。动物园管理员除了存储状态和代理的一些配置(以一种非常可靠的方式)之外,几乎不做任何事情。
针对你们的观点:
1)不正确。新生产者不直接与ZooKeeper交互。生产者直接与代理对话,发布消息或发出元数据请求,以查找哪个代理是它想要发布到的分区的领导者。
2)不正确。ZK没有“决定”任何事情。ZK是一个复制的容错存储系统,代理用来为集群保存信息和状态。要发布到哪个分区的决定是在生产者中完成的,这取决于要发布的消息的密钥和客户端分区算法。分区不是根据load分配的,而是根据密钥(或者如果密钥为null)分配的,然后使用循环算法。代理不会与ZK交互以维护每个使用者实例的偏移量。消费者跟踪自己的偏移量,并将其存储在代理的_consumer_offsets主题中(偶尔通过偏移提交)。
3)不正确。新消费者不会直接与ZooKeeper交互来使用来自代理的消息。ZK不会根据load从正确的代理获得消息。消费者将直接与经纪人交谈,加入和离开消费者团体通过RPC发送给经纪人使用卡夫卡协议。
发布于 2017-06-22 15:24:37
Kafka将动物园管理员用于: 1.领导者选择:对于复制因子较高的主题分区来说,这是必需的。其思想是选择一个节点作为分区的领导者,跟踪偏移量管理和复制到跟随者。ZK用于选举领导者,以确保在任何时候都有一个可用的领导人。2.群集成员资格:管理代理3.主题:管理集群上存在的主题、分区数、副本数量、副本位置等.
特定消费者:您可以选择管理ZK上的消费者补偿。因此,ZK将管理最新的偏移量和消费者组的成员。
我希望这能回答你的疑问
https://stackoverflow.com/questions/44702887
复制相似问题