《动物园管理员》对卡夫卡来说必不可少吗?

在 Kafka 中,我希望只使用单个代理、单个主题和单个分区,这些分区有一个生产者和多个使用者(每个使用者从代理获得自己的数据副本)。考虑到这一点,我不想要使用 Zookeep 的开销; 难道我不能只使用代理吗?为什么动物园管理员必须这样?

110556 次浏览

恕我直言,动物园管理员不是一个开销,但使你的生活容易得多。

它主要用于维护集群中不同节点之间的协调。对于卡夫卡来说,最重要的事情之一就是它使用 zookeep 来周期性地提交偏移量,这样在节点失败的情况下,它可以从之前提交的偏移量恢复(想象一下你自己来处理这一切)。

“动物管理员”在其他方面也扮演着重要角色,比如领导者检测、组态管理、同步、检测新节点何时加入或离开集群等。

未来的卡夫卡版本正计划消除对动物园管理员的依赖,但是现在它已经成为其中不可或缺的一部分。

以下是他们的常见问题解答:

一旦动物园管理员法定人数下降,代理可能会导致糟糕的状态,并且通常不能服务客户端请求,等等。虽然当动物园管理员的法定人数恢复时,卡夫卡的经纪人应该能够自动恢复到正常状态,但是仍然有一些他们无法做到的极端情况,需要一个艰难的杀戮和恢复才能使其恢复到正常状态。因此,建议密切监视您的动物管理员集群,并为其提供服务,使其具有良好的性能。

有关详细信息,请查看 给你

是的,《动物园管理员》需要运行卡夫卡:

步骤2: 启动服务器

卡夫卡使用动物园管理员,所以你需要首先启动一个动物园管理员服务器,如果 你还没有,你可以使用便利脚本 包装卡夫卡得到一个快速和肮脏的单节点动物园管理员 例子。

至于为什么,人们很久以前就发现,需要一些方法来跨分布式系统协调任务、状态管理、配置等。有些项目已经构建了自己的机制(想想 MongoDB 分片集群中的配置服务器,或者 Elasticsearch 集群中的 Master 节点)。其他人则选择利用 Zookeep 作为一个通用的分布式进程协调系统。所以卡夫卡,风暴,HBase,SolrCloud 等等都使用动物园管理员来帮助管理和协调。

卡夫卡是一个分布式系统,并建立使用动物园管理员。您没有使用卡夫卡的任何分布式特性这一事实并不会改变它的构建方式。在任何情况下,使用动物园管理员不应该有太多的开销。一个更大的问题是为什么要使用这种特殊的设计模式—— Kafka 的单个代理实现忽略了多代理集群的所有可靠性特性及其扩展能力。

卡夫卡生来就是为了使用动物园管理员的,这是无法逃避的。

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

看看你的问题,似乎你不需要卡夫卡。您可以使用任何支持发布-订阅的应用程序,如 雷迪斯、 Rabbit MQ 或者宿主解决方案,如 酒吧

正如其他人解释的那样,卡夫卡(即使在最近的版本中)离开了动物园管理员也无法工作。

卡夫卡用《动物园管理员》做了以下事情:

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

群集成员关系 -哪些代理是活的并且是群集的一部分? 这也是通过 ZooKeeper 管理的。

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

(0.9.0)-Quotas -每个客户机允许读写多少数据

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

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

对于您的场景,只有一个代理实例和一个具有多个使用者的生产者,您可以使用 pusher 创建一个通道,并将事件推送到使用者可以订阅和提交这些事件的通道。 Https://pusher.com/

除了通常的有效载荷消息传输,还有许多其他的通信发生在卡夫卡,如

  • 与请求群集成员身份的代理相关的事件。
  • 与经纪人有关的事件可用。
  • 获取引导配置设置。
  • 与控制器和引导程序更新相关的事件。
  • 帮助状态更新,如心跳更新。

Zookeep 本身是一个集成的由多个节点组成的分布式系统。动物园管理员是维护这种元数据的集中服务。

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

卡夫卡是一个 分发系统,因此它的节点可能在地理上很远(或者不远)。

重要更新-二零一九年八月:

将从 Apache Kafka 中删除 ZooKeeper 依赖项。

这些努力将采取一些卡夫卡发行和额外的 KIP。卡夫卡控制器将接管当前动物园管理员的任务。控制器将利用事件日志的好处,这是卡夫卡的核心概念。

新的卡夫卡体系结构的一些好处是更简单的体系结构、易于操作和更好的可伸缩性,例如允许“无限分区”。

是的,《动物园管理员》是卡夫卡设计的。因为动物园管理员有责任管理一种卡夫卡集群。里面有所有卡夫卡经纪人的名单。它通知卡夫卡,如果任何经纪人下降,或分区下降,或新的经纪人或分区上升。简而言之,ZK 让每个卡夫卡经纪人了解卡夫卡集群的最新状态。

然后,每个 Kafka 客户(生产者/消费者)都需要连接到任何一个代理,而该代理具有 Zookeep 更新的所有元数据,所以客户不必担心代理发现问题。

二零二二年十月更新

对于3.3版本中的新集群,您可以在生产环境中使用 Apache Kafka 而不使用 ZooKeeper (在新模式下,称为 KRaft 模式)。

Apache Kafka Raft (卡夫)是为了消除 Apache Kafka 对 ZooKeeper 进行元数据管理的依赖而引入的共识协议。在 KIP-500中跟踪开发进度。

卡夫卡模式在卡夫卡2.8的早期版本中发布。它在3.3版本之前不适合生产(详见 KIP-833: 标记 KRaft 作为生产准备)


a busy cat

1. 卡夫卡新法定人数控制器的好处

  1. 通过使用新的元数据管理改进控制平面性能,使 Kafka 集群能够扩展到数百万个分区
  2. 提高稳定性,简化软件,使其更容易监视,管理和支持卡夫卡。
  3. 允许卡夫卡为整个系统建立一个单一的安全模型
  4. 提供了一种轻量级的单一进程方式来开始使用卡夫卡
  5. 使控制器的故障转移几乎是瞬时的

2. 时间表 注意: 这个时间表非常粗略,可能会有变化。

enter image description here

  • 2022/10: 卡夫卡3.3宣布已经可以生产了
  • 2023/02: 从 Kafka 3.4支持的 ZK 模式升级为早期访问。
  • 2023/04: 卡夫卡3.5发布,同时支持卡夫特和 ZK。从 ZK 升级到生产。不支持 ZooKeeper 模式。
  • 2023/10: 卡夫卡4.0发布,只支持卡夫特模式。

参考文献:

  1. KIP-500: 用自管理的元数据 Quorum 替换 ZooKeeper
  2. 阿帕奇 · 卡夫卡不需要守护者: 消除对 Apache ZooKeeper 的依赖
  3. 为 KIP-500准备客户端和工具: 从 Apache Kafka 删除 ZooKeeper
  4. 没有动物园管理员的阿帕奇卡夫卡

在没有动物园管理员的情况下运行卡夫卡的要求似乎相当普遍。

根据描述,Charlatan 或多或少是一个模拟的动物园管理员,提供动物园管理员的服务,要么备份其他工具或数据库。

我遇到了那个图书馆时,处理的主要产品的作者为 Charlatan 图书馆,在那里它工作良好..。

首先

Apache ZooKeeper 是一个分布式存储,用于以高可用性的方式提供 配置同步服务。 在最新版本的卡夫卡中,为了让客户消费者不会将消息(称为偏移量)存储到 ZooKeeper.This reduced usage did not get rid of the need for consensus and coordination in distributed systems however.中,卡夫卡提供了 容错和恢复能力,但是需要一些东西来提供所需的协调,而 ZooKeeper 则支持整个系统的这一部分。

其次

同意谁是分区的领导者是卡夫卡生态系统中 ZooKeeper 实际应用的一个例子。

Zookeeper would work if there was even a single broker.

这些是 卡夫卡在行动的书。 图片来自本课程

Apache Kafka V2.8.0提供了对 KIP-500的早期访问,它消除了动物园管理员对 Kafka 的依赖,也就是 不再需要 Apache ZooKeeper


相反,卡夫卡现在可以运行在 卡夫卡筏元数据模式(KRaft mode) ,这使内部筏法定人数。当卡夫卡在 KRaft mode中运行时,它的元数据不再存储在 ZooKeeper 中,而是存储在控制器节点的这个内部仲裁中。这意味着你甚至不再需要运行《动物园管理员》了。

然而,请注意,v2.8.0目前是早期访问,您不应该在生产目前使用 Zookeep-less 卡夫卡。


消除对 ZooKeeper 的依赖并用内部仲裁代替它的一些好处:

  • 更有效的是,控制器不再需要与 ZooKeeper 通信,以便在每次集群启动或进行控制器选举时获取集群状态元数据
  • 更具可伸缩性,因为新的实现将能够支持 KRaft mode中更多的主题和分区
  • 更容易的集群管理和配置,因为您不再需要管理两个不同的服务
  • 单进程卡夫卡集群

要了解更多细节,可以阅读文章 卡夫卡不再需要动物园管理员