繁体   English   中英

Kafka 代替 Zookeeper 进行集群管理

[英]Kafka instead of Zookeeper for cluster management

我正在编写一个基于 Kafka 的集群应用程序——它专门使用 Kafka 进行进程间通信和协调。 我可以使用 Zookeeper 来管理我的集群——但是使用 Kafka 主题来管理集群并不是很困难。 而且我想得越多,除了历史原因之外,Kafka 似乎可以放弃 Zookeeper 并只使用基于主题的解决方案

例如,Kafka 中可能有一个或多个特殊主题,您可以在其中发布当前在 Zookeeper 中跟踪的所有相同数据。 Brokers、Topics、Partitions、Leaders 等——似乎通过 Kafka 主题和通过 Zookeeper 一样容易跟踪。

我知道在 Kafka 0.9.0 中,有一些远离 Zookeeper 的运动,更多的是朝着这个模型,并且记住我的问题不是关于 Kafka 开发,或者更多是我试图找出我的应用程序的方向。

我不是在征求意见——我想知道的是,Zookeeper 提供的任何特定功能对于基于 Kafka/主题的协调方法来说是不是很困难。 但我什么也想不出来。

甚至心跳监控——这就是我首先开始研究 Zookeeper 的原因——你可以有一个客户端连接主题,客户端可以在加入集群时发布到它,在给定的时间间隔发布心跳,然后发布为他们离开了。

让我们从太空视角开始:您有两个存储数据的分布式系统。 Zookeeper 将它的数据组织在某种类似结构的目录中的节点中。 Kafka 在主题中存储消息。

从鸟瞰角度来看,kafka 是为高吞吐量和可扩展性而构建的,而动物园管理员的主要设计目标之一是一致性。 Zookeeper 是分布式应用程序的分布式协调服务,而 Kafka 可以被认为是分布式提交日志。

因此,您的问题的答案令人惊讶:“这取决于”。 为了协调分布式系统,我会使用zookeeper:这就是它的构建目的。 您也可以使用 kafka 执行此操作,但是如果您使用的是 zookeeper,则需要手动完成几件事。

一些例子:

  • 一致性:ZK-Client 可以选择是否需要强一致性或最终一致性
  • 临时节点:与 ZK-Watches 一起对失败的服务做出反应是一件好事
  • 顺序一致性:不能按照您将其写入代理的顺序接收 kafka 消息(仅允许对分区内的消息进行排序)
  • ACL:从未使用过它,但至少是 kafka 没有提供的东西
  • 序列节点

关于您可以使用 zookeeper 做什么的一个非常好的概述是 zookeeper-recipes: https : //zookeeper.apache.org/doc/trunk/recipes.html

[编辑]:当然可以使用 kafka 检测应用程序。 但是在我看来,zookeeper 中的临时节点是更简单的选择。

这是目前正在KIP-500范围内进行的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM