Apache Kafka 2.8允许第一次看到zookeeper的未来,广泛使用的事件流媒体平台:发货预览kip - 500(“用自管理元数据仲裁替换ZooKeeper”),你现在可以运行Kafka集群,而不需要设置和操作Apache ZooKeeper。这不仅从操作的角度简化了Kafka的运行,新的元数据仲裁实现(命名为“KRaft”,Kafka Raft元数据模式)也应该提供更好的扩展特性,例如当涉及到大量的主题和分区时。

我写过博客关于我第一次使用卡夫和无zookeeper卡夫卡的经历,在我的个人博客上。从那时起,Debezium社区升开云体育官方注册网址级了它的容器的形象对于Apache Kafka到2.8版本,这使得开始自己的探索在没有ZooKeeper的情况下运行Kafka变得非常简单。请注意,目前KRaft模式是Apache Kafka的早期访问特性,不应该用于生产目的。

启用KRaft模式

从Debez开云体育官方注册网址ium 1.7版开始,Kafka的容器映像支持三个新的环境变量,在运行映像时指定:

  • CLUSTER_ID:唯一id,如“5Yr1SIgYQz-b-dgRabWx4g”;如果该变量存在,则启用KRaft模式。否则,镜像的行为和以前一样,并且必须配置一个对ZooKeeper的引用。当使用KRaft模式时,Kafka集群的所有节点必须使用相同的集群id。属性可以生成值kafka-storage.sh脚本随Apache Kafka而来。

  • NODE_ROLE: Kafka节点的角色;必须是“控制人”、“经纪人”或“合并人”中的一个。在KRaft模式下,Kafka节点既可以是元数据仲裁(控制节点)的一部分,也可以专门用于传播消息(代理节点),或者两者都可以(组合节点)。根据您的用例和需求,例如,您可以选择由三个节点组成的较小的Kafka集群,或者由三个控制器和七个代理组成的较大的Kafka集群。如果没有给出值,映像将以组合模式启动代理。

  • NODE_ID;为集群中的每个节点指定唯一的id(1,2,3,…)前面使用的变量BROKER_ID已被弃用而赞成NODE_ID;目前,它仍然被支持作为新名称的别名,但使用它将在日志中触发警告,并且计划最终逐步淘汰它。

另外,当在KRaft模式下使用Debezium容器镜像启动Kafka集群时,必须给出一个环境变量:开云体育官方注册网址KAFKA_CONTROLLER_QUORUM_VOTERS。这个是用来传递controller.quorum.votersKafka的配置选项,以“id-1@controller-node-1:controller-port-1,…”的格式引用集群中的所有控制节点KAFKA_CONTROLLER_QUORUM_VOTERS = 1 @kafka-1:9093 2 @kafka-2:9093 3 @kafka-3:9093

试一试

这就是它的全部。那么,让我们来看看一个Docker Compose文件,用于启动一个三节点的Kafka集群,仅由组合节点组成:

版本' 2 '服务kafka-1图像开云体育官方注册网址debezium /卡夫卡:1.7港口: -19092:9092-19093:9093环境: -CLUSTER_ID = 5 yr1sigyqz-b-dgrabwx4g-BROKER_ID = 1-KAFKA_CONTROLLER_QUORUM_VOTERS = 1 @kafka-1:9093 2 @kafka-2:9093 3 @kafka-3:9093kafka-2图像开云体育官方注册网址debezium /卡夫卡:1.7港口: -29092:9092-29093:9093环境: -CLUSTER_ID = 5 yr1sigyqz-b-dgrabwx4g-BROKER_ID = 2-KAFKA_CONTROLLER_QUORUM_VOTERS = 1 @kafka-1:9093 2 @kafka-2:9093 3 @kafka-3:9093kafka-3图像开云体育官方注册网址debezium /卡夫卡:1.7港口: -39092:9092-39093:9093环境: -CLUSTER_ID = 5 yr1sigyqz-b-dgrabwx4g-BROKER_ID = 3-KAFKA_CONTROLLER_QUORUM_VOTERS = 1 @kafka-1:9093 2 @kafka-2:9093 3 @kafka-3:9093

一个快速Docker组合之后,你将有你的无zookeeper的Kafka集群运行,准备与Debezium, Kafka Connect,或任何其他Kafka工作负载一起使用。开云体育官方注册网址只需要记住:不要马上将其推出到生产环境;)请注意,无论ZooKeeper是否被给定的集群使用,它只是Kafka的一个实现细节,也就是说,它对Debezium、它的历史生产者/消费者以及任何其他Kafka客户端都是完全透明的。开云体育官方注册网址

设置具有专用控制器和代理节点的集群也并不复杂。下面是一个具有一个控制器和三个代理的集群的配置(当然,在现实中,您希望至少使用三个控制器运行,以避免只有一个控制器节点的单点故障):

版本' 2 '服务kafka-1图像开云体育官方注册网址debezium /卡夫卡:1.7港口: -19092:9092-19093:9093环境: -CLUSTER_ID = 5 yr1sigyqz-b-dgrabwx4g-BROKER_ID = 1-KAFKA_CONTROLLER_QUORUM_VOTERS = 1 @kafka-1:9093-NODE_ROLE =控制器kafka-2图像开云体育官方注册网址debezium /卡夫卡:1.7港口: -29092:9092-29093:9093环境: -CLUSTER_ID = 5 yr1sigyqz-b-dgrabwx4g-BROKER_ID = 2-KAFKA_CONTROLLER_QUORUM_VOTERS = 1 @kafka-1:9093-NODE_ROLE =代理kafka-3图像开云体育官方注册网址debezium /卡夫卡:1.7港口: -39092:9092-39093:9093环境: -CLUSTER_ID = 5 yr1sigyqz-b-dgrabwx4g-BROKER_ID = 3-KAFKA_CONTROLLER_QUORUM_VOTERS = 1 @kafka-1:9093-NODE_ROLE =代理kafka-4图像开云体育官方注册网址debezium /卡夫卡:1.7港口: -49092:9092-49093:9093环境: -CLUSTER_ID = 5 yr1sigyqz-b-dgrabwx4g-BROKER_ID = 4-KAFKA_CONTROLLER_QUORUM_VOTERS = 1 @kafka-1:9093-NODE_ROLE =代理

您可以找到两个Compose文件的扩展版本(结合控制器/代理)在Debeziu开云体育官方注册网址m示例库中,也包含Kafka Connect和Postgres数据库的服务,并伴有开云体育电动老虎机指令为了运行开云体育官方注册网址Debezium教程没有zookeeper的卡夫卡。

随着卡夫模式在Kafka 3.0及后续版本中的成熟,我们可能会对容器映像做一些调整,以支持以最佳方式运行Kafka的新模式。最终,使用ZooKeeper运行的选项将被移除,但到那时还需要很长一段时间。

要了解更多关于卡夫的信息,请参考kip - 500以及相关的知识产权,这些知识产权非常详细地描述了该功能及其设计卡夫自述文件的自述Apache 开云体育官方注册网址Kafka的Debezium 1.7容器镜像,以及前面提到的博客文章“探索没有zookeeper的卡夫卡”

非常感谢雷内·肯纳感谢你在写这篇文章时提供反馈。

贡纳Morling

Gunnar是Decodable的软件工程师,也是一名不折不扣的开源爱好者。多年来,他一直是Debezium的项目负责人。开云体育官方注册网址Gunnar创建了kcctl、JfrUnit和MapStruct等开源项目,并且是Bean验证2.0 (JSR 380)的规范负责人。他在德国汉堡工作。


关于Debe开云体育官方注册网址zium

开云体育官方注册网址Debezium是一个开源的分布式平台,它将现有数据库转换为事件流,因此应用程序几乎可以立即看到并响应数据库中提交的每一个行级更改。开云体育电动老虎机开云体育官方注册网址Debezium是建立在卡夫卡并提供卡夫卡连接监控特定数据库管理系统的兼容连接器。开云体育电动老虎机开云体育官方注册网址Debezium在Kafka日志中记录了数据更改的历史,所以你的应用程序可以在任何时候停止和重新启动,并且可以很容易地使用它没有运行时错过的所有事件,确保所有事件都被正确和完整地处理。开云体育官方注册网址Debezium是开源Apache许可证,版本2.0

参与

我们希望您觉得Debezium有趣开云体育官方注册网址且有用,并愿意尝试一下。在Twitter上关注我们@开云体育官方注册网址debezium在Zulip上和我们聊天,或加入我们的邮件列表与社区对话。所有的代码都是开源的GitHub上,因此在本地构建代码并帮助我们改进现有连接器并添加更多连接器。如果您发现了问题或对我们如何改进Debezium有想法,请告诉我们开云体育官方注册网址记录问题

Baidu
map