卡夫卡:动物园pipe理员是必须的吗?

在卡夫卡,我只想使用一个经纪人,一个主题和一个单一的分区有一个生产者和多个消费者(每个消费者从经纪人获得自己的数据副本)。 鉴于此,我不想使用Zookeeper的开销; 我能不能只使用经纪人? 为什么一个Zookeeper必须?

是的,Zookeeper是运行Kafka所必需的。 从Kafka入门文档:

第2步:启动服务器

卡夫卡使用zookeeper,所以你需要先启动一个zookeeper服务器,如果你还没有。 您可以使用与kafka一起打包的便捷脚本来获得快速而简单的单节点zookeeper实例。

至于为什么,很久以前人们发现你需要有一些方法来协调分布式系统中的任务,状态pipe理,configuration等。 有些项目已经build立了自己的机制(想想MongoDB分片集群中的configuration服务器,或者Elasticsearch集群中的主节点)。 其他人则select利用Zookeeper作为通用的分布式过程协调系统。 所以Kafka,Storm,HBase,SolrCloud都只是使用Zookeeper来帮助pipe理和协调。

Kafka是一个分布式系统,用于使用Zookeeper。 您没有使用Kafka的任何分布式function的事实不会改变它的构build方式。 在任何情况下,使用Zookeeper都不会有太多的开销。 一个更大的问题是为什么要使用这种特定的devise模式 – 一个Kafka的代理实现漏掉了多代理群集的所有可靠性特性以及扩展能力。

正如其他人所解释的,如果没有Zookeeper,Kafka(即使在最新的版本中)也不能工作。

卡夫卡使用Zookeeper进行以下操作:

select一个控制器 。 控制者是经纪人之一,负责维护所有分区的领导/追随者关系。 当一个节点closures时,控制器告诉其他副本成为分区领导,以取代正在离开的节点上的分区前导。 Zookeeper用来select一个控制器,确保只有一个,如果它崩溃,select一个新的控制器。

集群成员资格 – 哪些经纪人活着,是集群的一部分? 这也是通过ZooKeeper进行pipe理的。

主题configuration – 存在哪些主题,每个主题有多less个分区,复制副本在哪里,谁是首选领导者,为每个主题设置了哪些configuration覆盖

(0.9.0) – 配额 – 每个客户端允许读取和写入多less数据

(0.9.0) – ACL – 谁可以读写哪个主题(旧的高级用户) – 存在哪些用户组,哪些用户是他们的成员,以及每个分组从每个分区获得的最新偏移量。

[来自https://www.quora.com/What-is-the-actual-role-of-ZooKeeper-in-Kafka/answer/Gwen-Shapira%5D

关于你的情况,只有一个代理实例和一个有多个消费者的生产者,你可以使用pusher创build一个通道,并将事件推送到消费者可以订阅的那个通道上,并处理这些事件。 https://pusher.com/

卡夫卡是build立使用Zookeeper。 没有逃避。

Kafka是一个分布式系统,使用Zookeeper来跟踪kafka集群节点的状态。 它也跟踪卡夫卡主题,分区等

看着你的问题,似乎你不需要卡夫卡。 您可以使用任何支持pub-sub的应用程序,例如Redis ,Rabbit MQ或托pipe解决scheme(例如Pub-nub) 。

恕我直言,动物园pipe理员不是一个开销,但让你的生活更容易。

它基本上用于维护集群中不同节点之间的协调,对于kafka最重要的一点是它使用zookeeper定期提交偏移量,以便在节点发生故障的情况下,可以从之前提交的偏移量恢复(想象自己照顾你自己的这一切)。 动物园pipe理员在服务于诸如领导者检测,configurationpipe理,同步,新节点join或离开集群等时的检测等方面也起着至关重要的作用。

卡夫卡未来版本正在计划删除动物园pipe理员的依赖,但到目前为止,这是它的一个组成部分。

这是从他们的常见问题解答页面采取几行

一旦Zookeeper法定人数下降,经纪人可能会导致一个糟糕的状态,并不能正常服务客户端请求等。虽然当Zookeeper quorum恢复时,卡夫卡经纪人应该能够自动恢复到正常状态,仍然有一些angular落案例他们不能,为了使之恢复正常,需要一个艰难的杀戮和恢复。 因此,build议密切监视您的动物园pipe理员群集,并configuration它,以便高性能。

更多细节请点击这里

Jocko是一个没有zookeeper依赖和单一二进制安装的Kafka golang实现