Kafka而不是Zookeeper进行集群管理

时间:2016-03-08 14:18:13

标签: apache-kafka apache-zookeeper

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

例如,在Kafka中可能会有一个特殊主题或主题,您可以在其中发布Zookeeper中当前保持跟踪的所有相同数据。经纪人,主题,分区,领导者等 - 似乎通过Kafka主题就像通过Zookeeper一样容易跟踪。

我知道在Kafka 0.9.0中,离Zookeeper有一些动作,更多的是朝向这个模型,记住我的问题不是关于Kafka的开发,或者更多的是我试图弄清楚我的应用程序的方向。

我不是在征求意见 - 我想知道的是,Zookeeper提供的任何特定功能在采用Kafka /基于主题的协调方法时会很困难。但我什么都想不到。

即使是心跳监控 - 这也是我开始关注Zookeeper的原因 - 您可以拥有客户端连接主题,客户端可以在加入群集时发布,以给定间隔发布心跳,并在他们离开时发布。

2 个答案:

答案 0 :(得分:3)

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

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

所以你的问题的答案令人惊讶:'它取决于'。用于协调 一个分布式系统,我会使用zookeeper:多数民众赞成的东西。你可以 这也是用kafka做的,但有几件事情需要做 如果你正在使用zookeeper,那就是开箱即用的manualy。

一些例子:

  • 一致性:ZK-Client可以选择是否需要strong or a eventual consistency
  • 短暂的节点:与ZK-Watches一起,对失败的服务做出反应是件好事
  • 顺序一致性:未按照您将其写入代理的顺序接收kafka消息(仅授予部分内部消息的订购)
  • ACLs:从未使用它,但它至少是kafka开箱即用的东西。
  • 序列节点

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

[编辑]:使用kafka的心跳应用当然是可能的。但是动物园管理员的短暂节点在我看来更容易。

答案 1 :(得分:0)

目前正在 KIP-500 范围内解决此问题。