ITPub博客

首页 > 自动化运维 > DevOps > Apache Kafka 4.0 发布:默认 KRaft、队列、更快的重平衡

Apache Kafka 4.0 发布:默认 KRaft、队列、更快的重平衡

DevOps 作者:ITPUB社群 时间:1970-01-01 08:33:45 0 删除 编辑


推出 Apache Kafka® 4.0

我们很荣幸地宣布 Apache Kafka® 4.0 正式发布。此版本包含许多新功能和改进。本博客文章将重点介绍其中一些较为突出的功能。如需查看完整的变更列表,请务必查阅发布说明。

您还可以通过 Tim Berglund 了解 Apache Kafka 4.0:

Apache Kafka 4.0 是一个重要的里程碑,标志着首个完全无需 Apache ZooKeeper ™️ 运行的主要版本。通过默认以 KRaft 模式运行,Kafka 简化了部署和管理,消除了维护独立 ZooKeeper 集群的复杂性。这一变化显著降低了运维开销,增强了可扩展性,并简化了管理任务。我们希望借此机会向 ZooKeeper 社区表达我们的感激之情,并说一声谢谢!ZooKeeper 作为 Kafka 的支柱超过 10 年,它确实为 Kafka 提供了非常好的服务。没有它,Kafka 很可能不会是今天的样子。我们不会将此视为理所当然,并高度赞赏社区为构建 ZooKeeper 所投入的所有辛勤工作。谢谢!

Kafka 4.0 还带来了 KIP-848 的正式可用,引入了一个强大的新消费者组协议,旨在显著提升再平衡性能。这一优化大幅减少了停机时间和延迟,增强了消费者组的可靠性和响应能力,尤其是在大规模部署中。

此外,我们很高兴提供 Kafka 队列(KIP-932)的早期访问,使 Kafka 能够直接支持传统队列语义。此功能扩展了 Kafka 的多功能性,使其成为更广泛用例的理想消息平台,特别是那些需要点对点消息传递模式的用例。

Kafka 的主要版本(如 4.0 版本)会移除已弃用至少 12 个月的 API(应用程序编程接口),以简化平台并鼓励采用更新的功能。值得注意的是,在 Kafka 4.0 中,Kafka 客户端和 Kafka Streams 需要 Java 11,而 Kafka Broker、Connect 和工具现在需要 Java 17。此版本还更新了最低支持的客户端和 Broker 版本(KIP-896),并定义了支持的升级路径的新基线要求。更多详细信息请参阅本文档后续章节。

这些亮点展示了 Kafka 的持续演进,以满足现代、可扩展且高效的数据流和消息架构的需求。

请参阅文档中的升级到 4.0 部分,了解重要变更列表和详细升级步骤。

Kafka Broker、Controller、Producer、Consumer 和 Admin Client

  • KIP-848:下一代消费者再均衡协议 ‎ Apache Kafka 随着下一代消费者再均衡协议的正式发布,告别了“stop-the-world”式的再均衡。它提升了消费者组的稳定性和性能,同时简化了客户端。新协议在服务端默认启用。消费者必须通过设置 group.protocol=consumer 来选择启用。详情请见此处。 ‎

  • KIP-890:事务服务端防御 ‎ KIP-890 的第二阶段已完成。它降低了生产者故障期间出现“僵尸事务”的可能性。详情请见此处。 ‎

  • KIP-932:Kafka 的队列(早期访问) ‎ 该 KIP 引入了共享组(share group)的概念,作为使用 Kafka 主题实现协作式消费的一种方式。它并没有在 Kafka 本身中增加“队列”的概念,而是引入了协作式消费,以使用常规 Kafka 主题来满足这些队列使用场景。共享组使这成为可能。你可以将共享组大致理解为现有系统中的“持久共享订阅”。有关限制和配置,请参阅早期访问发布说明。 ‎

  • KIP-966:合格领导者副本(预览) ‎ KIP-966 在 4.0 中预览引入了合格领导者副本(ELR)。ELR 是 ISR 副本的一个子集,保证拥有直到高水位线的完整数据。ELR 可安全用于领导者选举,从而防止数据丢失。详情请见此处。 ‎

  • KIP-996:预投票 ‎ KIP-996 引入了一种“预投票”机制,以减少 Apache Kafka 集群中不必要的 KRaft 领导者选举。通过允许节点在发起选举前检查其是否具备领导资格,这种方法可以最大限度地减少由网络分区或瞬时问题造成的中断。 ‎

  • KIP-1076:客户端应用程序指标 KIP-714 扩展 ‎ 借助 KIP-714,集群运维人员现在可以使用插件直接从 broker 收集客户端指标。这使得监控客户端行为变得更加容易。然而,KIP-714 仅从 Kafka 客户端(admin、consumer 和 producer)收集指标,并不涵盖嵌入式客户端(例如 Kafka Streams)的应用程序级指标。要全面了解性能,收集客户端指标和应用程序特定指标都很重要。该 KIP 为使用 Kafka 客户端的应用程序引入了一种方式,使其能够在现有客户端指标之外包含自己的指标。 ‎

  • KIP-1106:为消费者客户端添加基于持续时间的偏移重置选项 ‎ Kafka 消费者支持 auto.offset.reset 配置选项,该选项用于 Kafka 中没有初始偏移,或者当前偏移在服务器上已不存在的情况。该配置目前支持 earliest/latest/none 选项。当前消费者重置可能会迫使应用程序从较早的偏移重新处理大量数据。在无限存储的情况下,拥有基于持续时间的偏移重置策略是有益的。该 KIP 允许应用程序在 Kafka 中没有初始偏移时,从固定持续时间开始消费/初始化。 ‎

  • KIP-1043:组的管理 ‎ KIP-848 和 KIP-932 分别引入了新的组类型:consumer 和 share。Admin Client API 在处理较新的组类型时存在限制,有时会返回错误或错误地声明组不存在。为应对这一挑战,Kafka 4.0 中新增了一个命令行工具 kafka-groups.sh,并对现有命令行工具 kafka-consumer-groups.sh 和 kafka-share-groups.sh 进行了更新,使用户能够查看集群中的所有组及其类型和协议——即使 Admin Client API 失败,也能提供准确信息。 ‎

  • KIP-1099:扩展 kafka-consumer-groups 命令行工具以支持新的消费者组 ‎ 该 KIP 扩展了 kafka-consumer-groups.sh 和 kafka-share-groups.sh 命令行工具,以提供与 consumer 和 share 组相关的更多信息。这有助于分别对 KIP-848 和 KIP-932 引入的 consumer 和 share 组进行故障排查。 ‎

  • KIP-1102:使客户端能够基于超时或错误代码重新引导 KIP-1102 通过在超时时间内没有更新时主动触发元数据重新引导,并允许服务端明确指示客户端重新引导,从而增强 Kafka 客户端的弹性。这解决了 KIP-899 中此前的限制,即除非所有 broker 都不可达,否则客户端可能会因过时元数据而卡住。 ‎

  • KIP-896:在 Kafka 4.0 中移除旧客户端协议 API 版本 ‎ 这是首次移除旧协议 API 版本。用户应确保在将 Java 客户端(包括 Connect 和 Streams)升级到 4.0 之前,broker 版本为 2.1 或更高。同样,用户应确保在将 broker 升级到 4.0 之前,其 Java 客户端版本为 2.1 或更高。 ‎

  • KIP-1124:为 4.x 提供清晰的 Kafka Client 升级路径 ‎ 该 KIP 概述了 Kafka Clients、Streams 和 Connect 升级到 4.0 的路径。在升级集群和客户端之前,这是必读内容。 ‎

  • KIP-653:将 log4j 升级到 log4j2 ‎ 日志框架已从 Log4j 迁移到 Log4j2。用户可以使用 log4j-transform-cli 工具自动将其现有 Log4j 配置文件转换为 Log4j2 格式。用户也可以继续使用其 Log4j 配置,但会有某些限制。详情请查看迁移指南。 ‎

  • KIP-724:放弃对消息格式 v0 和 v1 的支持 ‎ 消息格式 v0 和 v1 已在 Apache Kafka 3.0 中弃用。它们已在 4.0 中移除。 ‎

  • KIP-750:在 Kafka 4.0 中放弃对 Java 8 的支持(在 3.0 中弃用)以及 KIP-1013:在 Kafka 4.0 中放弃 broker 和工具对 Java 11 的支持(在 3.7 中弃用) ‎ Kafka Clients 和 Kafka Streams 需要 Java 11,而 Kafka Brokers、Connect 和 Tools 现在需要 Java 17。 ‎

  • KIP-1030:更改各种配置的约束和默认值 ‎ KIP-1030 更改了一些配置的默认值,以便为刚开始使用 Apache Kafka 的用户提供更好的默认值。详情请查看该 KIP。

Kafka Streams

  • KIP-1104:允许在 KTable 连接中从键和值中提取外键 ‎ KIP-1104 增强了 Kafka Streams,允许直接从记录键和值中提取外键,从而无需为了外键连接而将键复制到值中。这一改进简化了连接,减少了存储开销,并提供了更直观的开发者体验。 ‎

  • KIP-1112:允许自定义处理器包装 ‎ KIP-1112 通过引入 ProcessorWrapper 接口,简化了在 Kafka Streams 中应用横切逻辑的过程,使得可以无缝地在 Processor API 和 DSL 处理器周围注入自定义逻辑。这消除了此前的冗余,并减少了因逐个手动将逻辑集成到每个处理器中而产生的维护开销。 ‎

  • KIP-1065:为 ProductionExceptionHandler 添加“retry”返回选项 ‎ KIP-1065 通过允许用户在 ProductionExceptionHandler 中使用新的“RETRY”选项来打破重试循环,从而解决 Kafka Streams 中的持续错误。这一增强提供了可定制的错误处理,支持重试、优雅失败或丢弃有问题的记录以继续高效处理。 ‎

  • KIP-1091:改进 Kafka Streams 算子指标 ‎ Kafka Streams 通过 KIP-1076 暴露其指标。该 KIP 特别为每个 StreamThread 和客户端实例本身添加了状态指标。它还提供了对应用程序状态的详细可见性。

Kafka Connect

  • KIP-970:弃用并移除 Connect 的冗余任务配置端点 ‎ 在 KIP-661 中添加的端点 GET /connectors/{connector}/tasks-config 在 Apache Kafka 3.7 中已被弃用,并最终在 4.0 中移除。必须使用端点 GET /connectors/{connector}/tasks 作为替代。 ‎

  • KIP-1074:允许复制用户内部主题 ‎ 此前,MirrorMaker 2 会自动排除名称以 .internal 或 -internal 结尾的主题,错误地将它们归类为内部主题。此行为阻止了合法的业务主题被复制,除非用户实现自定义复制策略。此 KIP 引入了一个可配置选项,允许用户无需自定义代码即可复制此类主题。 ‎

  • KIP-1089:允许在 MirrorSourceConnector 中禁用心跳复制 ‎ 此前,MirrorSourceConnector 总是复制心跳主题,当多个具有不同配置的连接器在同一集群之间复制主题时,这可能导致问题,造成重复的心跳复制。此 KIP 引入了一个可配置选项来禁用心跳主题复制,为用户提供了更大的灵活性,特别是在使用多个具有不同配置的连接器时。 ‎

  • KIP-1032:在 Kafka 4.0 中升级到 Jakarta 和 JavaEE 10 ‎ Kafka Connect 此前使用了过时的 JavaEE 应用程序编程接口,限制了其与当代 Jakarta EE 框架和应用程序的兼容性。KIP-1032 通过将 Kafka 4.0 升级到 Jakarta EE 和 JavaEE 10 应用程序编程接口来解决此问题,引入 Java 17 作为要求的最低版本,并使 Kafka 与当前标准保持一致,以提高可维护性。

总结

准备好开始使用 Apache Kafka 4.0.0 了吗?请查看升级说明和发布说明中的所有详细信息,并下载 Apache Kafka 4.0.0。

这是社区共同努力的成果,因此感谢所有为本次发布做出贡献的人,包括所有用户和我们的 175 位贡献者:

A. Sophie Blee-Goldman, abhi-ksolves, Abhijeet Kumar, Abhinav Dixit, Abhishek Giri, Alieh Saeedi, Almog Gavra, Alyssa Huang, Andrew Schofield, Anshul Goyal, Ao Li, Apoorv Mittal, Arnav Dadarya, Arpit Goyal, Artem Livshits, Ayoub Omari, bachmanity1, bboyleonp666, Bill Bejeck, brenden20, Bruno Cadonna, Caio Guedes, Calvin Liu, Chengyan, Cheryl Simmons, Chia-Chuan Yu, Chia-Ping Tsai, Chirag Wadhwa, Chris Egerton, Christo Lolov, Christopher L. Shannon, ClarkChen, Clay Johnson, Colin P. McCabe, Colt McNealy, Danica Fine, Dániel Urbán, David Arthur, David Jacot, David Mao, David Schlosnagle, Dejan Stojadinović, devanshikhatsuriya, Dimitar Dimitrov, Divij Vaidya, DL1231, Dmitry Werner, donaldzhu-cc, Dongnuo Lyu, dujian0068, Edoardo Comar, Eric Chang, Federico Valeri, Frederik Rouleau, GangHuo, Gantigmaa Selenge, Gaurav Narula, Greg Harris, Guozhang Wang, Hailey Ni, Hongten, Hyunsang Han, Ian McDonald, Igor Soarez, Ismael Juma, Ivan Yurchenko, Jakub Scholz, Jason Gustafson, Jason Taylor, Jeff Kim, Jhen-Yung Hsu, Jim Galasyn, João Pedro Fonseca Dantas, John Huang, JohnHuang, Jonah Hooper, José Armando García Sancio, Josep Prat, Jun Rao, Justin Lee, Justine Olshan, Kamal Chandraprakash, KApolinario1120, kartik-3513, Kaushik Raina, Ken Huang, kevin-wu24, Kirk True, Kondrat Bertalan, Krishna Agarwal, Kuan-Po Tseng, kwonyonghyun, Laxman Ch, Liam Miller-Cushon, Lianet Magrans, Linsiyuan9, Linu Shibu, Liu Zeyu, Logan Zhu, Loïc Greffier, Lucas Brutschy, Luke Chen, lushilin, Mahsa Seifikar, Manikumar Reddy, mannoopj, Martin Sillence, Mason Chen, Matthias J. Sax, Mehari Beyene, Mickael Maison, Ming-Yen Chung, mingdaoy, msureshpro, Murali Basani, Nancy, Nick Guo, Nick Telford, Oleg Bonar, Oleksandr K., Omnia Ibrahim, Parker Chang, Patrik Marton, Paul R. Mellor, Peter Lee, Philip Nee, PoAn Yang, Rajini Sivaram, Ramin Gharib, Ritika Reddy, Robert Young, Rohan, S.Y. Wang, Said Boudjelda, Sanskar Jhajharia, santhoshct, Sasaki Toru, Satish Duggana, Saxon Chen, Scott Hendricks, Sean Quah, Sebastien Viale, Shivsundar R, snehashisp, Stanislav Knot, Steven Xu, stevenbooke, Stig Døssing, Sushant Mahajan, Swikar Patel, TaiJuWu, tall15421542-lab, TapDang, Ted Yan, TengYao Chi, Thomas Thornton, Tim Fox, tkuramoto33, Tom Duckering, Vedarth Sharma, Vikas Singh, Viktor Somogyi-Vass, Vincent Jiang, wperlichek, xijiu, Xuan-Zhang Gong, yangjf2019, Yaroslav Kutsela, Yash Mayya, Yung, yungh, yx9o, Zhengke Zhou, Ziming Deng, 陳昱霖 (Yu-Lin Chen)



转载声明:本文为转载整理,原文版权归原作者及原站点所有。

原文来源:Confluent Blog

原创地址:https://www.confluent.io/blog/announcing-apache-kafka-0-10-1-0/

原文作者:David Jacot;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-11-21

  • 博文量
    1090
  • 访问量
    546712