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

时间:2014-05-20 05:32:00

标签: partitioning apache-zookeeper producer-consumer apache-kafka broker

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

13 个答案:

答案 0 :(得分:92)

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

  

第2步:启动服务器

     

Kafka使用zookeeper,因此您需要先启动一个zookeeper服务器   你还没有。您可以使用便捷脚本   与kafka一起打包,以获得一个快速而肮脏的单节点动物园管理员   实例

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

Kafka是一个分布式系统,用于使用Zookeeper。您没有使用Kafka的任何分布式功能这一事实并没有改变它的构建方式。无论如何,使用Zookeeper不应该有太多开销。更大的问题是为什么要使用这种特殊的设计模式--Kafka的单个代理实现错过了多代理群集的所有可靠性功能以及它的扩展能力。

答案 1 :(得分:43)

正如其他人所解释的那样,没有Zookeeper,Kafka(即使在最新版本中)也无法使用。

Kafka使用Zookeeper进行以下操作:

选择控制器。控制器是代理之一,负责维护所有分区的领导者/关注者关系。当节点关闭时,控制器会告诉其他副本成为分区负责人,以替换正在消失的节点上的分区负责人。 Zookeeper用于选择控制器,确保只有一个控制器,如果它崩溃,则选择一个新控制器。

群集成员资格 - 哪些经纪人还活着并且是群集的一部分?这也是通过ZooKeeper管理的。

主题配置 - 存在哪些主题,每个分区有多少个分区,副本在哪里,谁是首选领导者,为每个主题设置了哪些配置覆盖

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

(0.9.0) - ACL - 允许谁读写哪个主题 (旧的高级消费者) - 存在哪些消费者群体,谁是他们的成员以及每个群体从每个分区获得的最新偏移量。

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

关于您的方案,只有一个代理实例和一个具有多个消费者的生产者,您可以使用pusher创建一个渠道,并将事件推送到消费者可以订阅的那个渠道并交出这些事件。 https://pusher.com/

答案 2 :(得分:33)

于2020年11月更新

对于最新版本(2.6.0),ZooKeeper仍为required,可用于运行Kafka,但在不久的将来 ZooKeeper将被自我管理元数据法定人数取代。 >

在接受的KIP-500中查看详细信息。


a busy cat

1。当前状态

Kafka使用ZooKeeper存储有关分区和代理的元数据,并选择一个代理作为Kafka控制器。

当前,正在消除对ZooKeeper的依赖性(通过KIP-500)。

2。清除利润

删除Apache ZooKeeper依赖项提供了三个明显的好处:

  • 首先,它通过在Kafka本身中合并元数据而不是在Kafka和ZooKeeper之间拆分元数据来简化体系结构。这样可以提高稳定性,简化软件,并使监视,管理和支持Kafka更加容易。
  • 第二,它提高了控制平面的性能,使群集可以扩展到数百万个分区。
  • 最后,它允许Kafka为整个系统使用单一的安全模型,而不是为Kafka和Zookeeper提供一个安全模型。

3。路线图

ZooKeeper有望在2021年被移除,并具有以下里程碑式的一些里程碑:

|   KIP   |                           Name                           |      Status      | Fix Version/s |
|:-------:|:--------------------------------------------------------:|:----------------:|---------------|
| KIP-455 | Create an Administrative API for Replica Reassignment    |     Accepted     | 2.6.0         |
| KIP-497 | Add inter-broker API to alter ISR                        |     Accepted     | 2.7.0         |
| KIP-543 | Expand ConfigCommand's non-ZK functionality              |     Accepted     | 2.6.0         |
| KIP-555 | Deprecate Direct ZK access in Kafka Administrative Tools |     Accepted     | None          |
| KIP-589 | Add API to update Replica state in Controller            |     Accepted     | None          |
| KIP-590 | Redirect Zookeeper Mutation Protocols to The Controller  |     Accepted     | None          |
| KIP-595 | A Raft Protocol for the Metadata Quorum                  |     Accepted     | None          |
| KIP-631 | The Quorum-based Kafka Controller                        | Under discussion | None          |

KIP-500引入了 bridge版本的概念,该概念可以与KIP-500之前和之后的Kafka版本共存。 Bridge版本之所以重要,是因为它们可以实现对ZooKeeper后世界的零停机升级。

参考:

  1. KIP-500: Replace ZooKeeper with a Self-Managed Metadata Quorum
  2. Apache Kafka Needs No Keeper: Removing the Apache ZooKeeper Dependency
  3. Preparing Your Clients and Tools for KIP-500: ZooKeeper Removal from Apache Kafka

答案 3 :(得分:21)

重要更新-2019年8月:

ZooKeeper依赖关系将从Apache Kafka中删除。请参阅KIP-500: Replace ZooKeeper with a Self-Managed Metadata Quorum中的高级讨论。

这些工作将需要一些Kafka版本和其他KIP。 Kafka控制器将接管当前的ZooKeeper任务。管制员将利用事件日志的好处,这是Kafka的核心概念。

新的Kafka架构的一些好处是更简单的架构,易于操作和更好的可伸缩性(例如,允许“无限分区”。

答案 4 :(得分:10)

Kafka是为了使用Zookeeper而构建的。没有逃脱。

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

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

答案 5 :(得分:6)

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

它主要用于维护集群中不同节点之间的协调。 Kafka最重要的事情之一是它使用zookeeper定期提交偏移量,以便在节点发生故障的情况下,它可以从先前提交的偏移量恢复(想象一下你自己处理所有这些)。

Zookeeper还可以为其他许多目的发挥重要作用,例如领导者检测,配置管理,同步,检测新节点何时加入或离开集群等等。

未来的Kafka版本计划删除zookeeper的依赖,但截至目前它已成为其中不可或缺的一部分。

以下几行来自他们的常见问题页面:

  

一旦Zookeeper法定人数下降,经纪人可能会导致状态不佳,无法正常服务客户请求等。虽然当Zookeeper法定人数恢复时,卡夫卡经纪人应该能够自动恢复到正常状态,但仍有几个角落的情况他们不能,并且需要一个艰难的杀戮和恢复才能恢复正常。因此,建议密切监视您的zookeeper集群并进行配置,以使其具有高性能。

有关详细信息,请查看here

答案 6 :(得分:2)

除了通常的有效载荷消息传输外,kafka中还会发生许多其他通信。喜欢 *与代理请求集群成员资格有关的事件 *与经纪人有关的事件可用 *获取引导程序配置设置。 *与控制器和领导者更新有关的事件。 *帮助状态更新,例如心跳更新。

Zookeeper本身是一个由系统中的多个节点组成的分布式系统。 Zookeeper是用于维护此类元数据的集中服务。

答案 7 :(得分:2)

Apache Kafka v2.8.0 可让您提前访问 KIP-500,从而消除 Zookeeper 对 Kafka 的依赖,这意味着它不再需要 Apache Zookeeper。 >


相反,Kafka 现在可以在 Kafka Raft 元数据模式 (KRaft mode) 下运行,从而启用内部 Raft 仲裁。当 Kafka 在 KRaft mode 中运行时,它的元数据不再存储在 ZooKeeper 上,而是存储在控制器节点的这个内部仲裁中。这意味着您甚至不再需要运行 ZooKeeper。

但是请注意,v2.8.0 目前处于抢先体验阶段,您暂时不应在生产中使用 Zookeeper-less Kafka。


移除 ZooKeeper 依赖项并将其替换为内部仲裁的一些好处:

  • 效率更高,因为控制器不再需要在每次集群启动或进行控制器选举时与 ZooKeeper 通信来获取集群状态元数据
  • 可扩展性更强,因为新实现将能够支持 KRaft mode
  • 中的更多主题和分区
  • 更轻松的集群管理和配置,因为您不必再​​管理两个不同的服务
  • 单进程Kafka集群

有关更多详细信息,您可以阅读文章Kafka No Longer Requires ZooKeeper

答案 8 :(得分:1)

Zookeeper正在针对任何种类的分布式系统进行集中和管理。分布式系统是在不同的节点/群集(可能位于地理位置较远的位置)上运行但作为一个系统运行的不同软件模块。 Zookeeper促进了节点之间的通信,在节点之间共享配置,跟踪哪个节点是领导者,哪个节点加入/离开等。Zookeeper是使分布式系统保持健全并保持一致性的人。 Zookeeper基本上是一个编排平台。

Kafka是分布式系统。因此,它对可能在地理位置上相距遥远(或不相距遥远)的节点需要某种编排

答案 9 :(得分:1)

是的,Zookeeper必须是Kafka设计的。因为Zookeeper负责管理Kafka集群。它具有所有Kafka经纪人的列表。如果任何代理发生故障,分区发生故障或新代理发生故障或分区已发生故障,它会通知Kafka。简而言之,ZK使每个Kafka经纪人保持有关Kafka集群当前状态的最新信息。

然后,每个Kafka客户端(生产者/消费者)都需要做的就是与任何单个代理连接,并且该代理具有由Zookeeper更新的所有元数据,因此客户端不必担心代理发现的麻烦。

答案 10 :(得分:1)

This文章介绍了Zookeeper在Kafka中的作用。它说明了卡夫卡如何是无状态的,以及人妖在卡夫卡(以及更多分布式系统)的分布式性质中如何发挥重要作用。

答案 11 :(得分:1)

在没有Zookeeper的情况下运行Kafka的请求似乎很常见。库Charlatan解决了这个问题。

根据描述,Charlatan或多或少是Zookeeper的模拟,提供了由其他工具或数据库支持的Zookeeper服务。

在处理Charlatan库作者的主要产品时,我遇到了该库;在那里工作正常……

答案 12 :(得分:0)

首先

Apache ZooKeeper是一个分布式存储,用于以高可用性方式提供配置同步服务。 在最新版本的Kafka中,已进行了一些工作,以使客户端使用者不将有关已消耗消息(称为偏移量)的信息存储到ZooKeeper中list1=['Potato', 'Tomato', 'Mango', 'Milk'] def remove_item(list1, *args): for word in args: if word in list1: list1.remove(word) return list1 print(remove_item(list1, 'Mango')) ,而Kafka提供容错和弹性< / strong>,需要一些东西来提供所需的协调,而ZooKeeper可以启用整个系统的那一部分。

第二

商定分区的领导者是谁,是ZooKeeper在Kafka生态系统中实际应用的一个示例。

.This reduced usage did not get rid of the need for consensus and coordination in distributed systems however.

这些来自Kafka In Action书。 图片来自this course