繁体   English   中英

Zookeeper是Kafka必备的吗? [关闭]

[英]Is Zookeeper a must for Kafka? [closed]

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

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

第2步:启动服务器

Kafka使用zookeeper,因此如果您还没有动物园管理员服务器,则需要先启动它。 您可以使用与kafka一起打包的便捷脚本来获取快速且脏的单节点zookeeper实例。

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

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

正如其他人所解释的那样,没有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/

2022 年 10 月更新

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

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

KRaft 模式在 Kafka 2.8 的抢先体验中发布。 3.3 版本之前不适合生产(详见KIP-833: Mark KRaft as Production Ready


一只忙碌的猫

1. Kafka新增quorum controller的好处

  1. 通过使用新的元数据管理改进控制平面性能,使 Kafka 集群能够扩展到数百万个分区
  2. 提高稳定性,简化软件,并使其更容易监控、管理和支持 Kafka。
  3. 允许 Kafka 对整个系统有一个单一的安全 model
  4. 提供一种轻量级、单一进程的方式来开始使用 Kafka
  5. 使 controller 故障转移接近瞬时

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

在此处输入图像描述

  • 2022/10:KRaft 模式在 Kafka 3.3 中宣布生产就绪
  • 2023/02:从 Kafka 3.4 支持的 ZK 模式升级为早期访问。
  • 2023/04:Kafka 3.5 发布,同时支持 KRaft 和 ZK。 从 ZK 升级到生产环境。 ZooKeeper 模式已弃用。
  • 2023/10:Kafka 4.0 发布,仅支持 KRaft 模式。

参考:

  1. KIP-500:用自我管理的元数据仲裁替换 ZooKeeper
  2. Apache Kafka 不需要 Keeper:移除 Apache ZooKeeper 依赖
  3. 为 KIP-500 准备客户端和工具:从 Apache Kafka 移除 ZooKeeper
  4. KRaft: Apache 没有 ZooKeeper 的 Kafka

Kafka是为了使用Zookeeper而构建的。 没有逃避这一点。

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

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

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

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

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

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

以下是他们的常见问题解答页面中的几行:

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

有关详细信息,请点击此处

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


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

但请注意,v2.8.0 目前处于早期访问阶段,您暂时不应在生产中使用无 Zookeeper 的 Kafka。


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

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

有关更多详细信息,您可以阅读文章Kafka 不再需要 ZooKeeper

重要更新 - 2019年8月:

将从Apache Kafka中删除ZooKeeper依赖项 请参阅KIP-500中的高级别讨论:将ZooKeeper替换为自我管理的元数据仲裁

这些努力将需要一些Kafka版本和其他KIP。 Kafka Controllers将接管当前ZooKeeper任务的任务。 控制器将利用事件日志的优势,这是Kafka的核心概念。

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

是的,Zookeeper 是为 Kafka 设计的。 因为 Zookeeper 有一种管理 Kafka 集群的责任。 它有所有 Kafka 代理的列表。 它会通知 Kafka,如果任何代理关闭,或分区关闭或新代理启动或分区启动。 简而言之,ZK 使每个 Kafka 经纪人都了解 Kafka 集群的当前 state。

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

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

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

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

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

这篇文章解释了 Zookeeper 在 Kafka 中的作用。 它解释了 kafka 如何是无状态的,以及 zookeper 如何在 kafka(以及更多分布式系统)的分布式特性中发挥重要作用。

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

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

我在处理 Charlatan 库作者的主要产品时遇到了那个库; 在那里它工作正常......

首先

Apache ZooKeeper 是一个分布式存储,用于以高可用方式提供配置同步服务。 在 Kafka 的最新版本中,为了让客户端消费者不将有关它消费了多远的消息(称为偏移量)的信息存储到 ZooKeeper 中,已经完成了工作.This reduced usage did not get rid of the need for consensus and coordination in distributed systems however. 虽然 Kafka 提供了容错和弹性,但还需要一些东西来提供所需的协调,而 ZooKeeper 支持整个系统的这一部分。

第二

就谁是分区领导者达成一致,是 Kafka 生态系统中 ZooKeeper 实际应用的一个例子。

Zookeeper would work if there was even a single broker. 

这些来自Kafka In Action一书。 图片来自本课程

暂无
暂无

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

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