
3 月 22 日,南京,聊聊生成式 AI 应用构建

Apache Kafka 4.0 已正式发布,这是一个重要里程碑,官方称这是第一个完全无需 Apache ZooKeeper 运行的重大版本。
以下为官方公告:
我们自豪地宣布Apache Kafka® 4.0版本的发布。这个版本包含了众多新功能和改进。本博客文章将突出介绍其中一些较为显著的特性。要查看完整的变更列表,请务必查看发布说明。
Apache Kafka 4.0 是一个重要的里程碑,标志着第一个完全无需 Apache ZooKeeper® 运行的重大版本。通过默认运行在 KRaft 模式下,Kafka 简化了部署和管理,消除了维护单独的 ZooKeeper 集群的复杂性。这一变化显著降低了运营开销,增强了可伸缩性,并简化了管理任务。我们想借此机会向 ZooKeeper 社区表达我们的感激之情,并表示谢谢!ZooKeeper 多年来一直是 Kafka 的支柱,并且它确实为 Kafka 做了很好的服务。如果没有 ZooKeeper,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代理、Connect和工具现在则需要Java 17。此版本还更新了最低支持的客户端和代理版本(KIP-896),并为支持的升级路径定义了新的基线要求。更详细的信息请参阅本文件的后续部分。
这些亮点展示了Kafka持续进化以满足现代、可扩展和高效的数据流和消息架构需求。
请参阅文档中的升级到4.0部分,以获取显著变更列表和详细的升级步骤。
Kafka代理、控制器、生产者、消费者和管理客户端
-
KIP-848: 消费者重平衡协议的下一代
Apache Kafka 通过下一代消费者重平衡协议的通用可用性,告别了“停止世界”的重平衡。它提高了消费者组的稳定性和性能,同时简化了客户端。新的协议在服务器端默认启用。消费者必须通过设置group.protocol=consumer
来选择加入。有关详细信息,请参阅此处。 -
KIP-890: 事务服务器端防御
KIP-890 的第二阶段已完成。它降低了生产者故障期间“僵尸事务”的可能性。有关详细信息,请参阅此处。 -
KIP-932: Kafka 的队列(早期访问)
本KIP介绍了“共享组”的概念,作为一种通过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,集群管理员现在可以使用插件直接从代理中收集客户端指标,这使得监控客户端行为变得更加容易。然而,KIP-714仅收集Kafka客户端(管理员、消费者和生产者)的指标,并不涵盖嵌入式客户端(如Kafka Streams)的应用级指标。要全面了解性能,收集客户端指标和应用特定指标都很重要。本KIP介绍了一种方法,让使用Kafka客户端的应用能够在现有客户端指标之外包含自己的指标。
- KIP-1106:为消费者客户端添加基于持续时间的偏移重置选项
Kafka消费者支持auto.offset.reset
配置选项,该选项用于在Kafka中没有初始偏移量,或者当前偏移量在服务器上不再存在的情况下。此配置当前支持earliest/latest/none选项。目前,消费者重置可能会强制应用程序从较早的偏移量重新处理大量数据。在有无限存储的情况下,基于持续时间的偏移量重置策略是有益的。此KIP允许应用程序在Kafka中没有初始偏移量时从固定持续时间进行消费/初始化。
- KIP-1043: 群组管理
KIP-848 和 KIP-932 分别引入了新的群组类型,消费者和共享。在处理较新的群组类型时,Admin 客户端 API 存在限制,有时会返回错误或错误地声明群组不存在。为了解决这个挑战,在 Kafka 4.0 中,实现了一个新的命令行工具 kafka-groups.sh
,并更新了现有的命令行工具 kafka-consumer-groups.sh
和 kafka-share-groups.sh
,使用户能够查看集群中所有群组及其类型和协议——即使在 Admin 客户端 API 失败的情况下也能提供准确的信息。
- KIP-1099:扩展 kafka-consumer-groups 命令行工具以支持新的消费者群组
本KIP扩展了kafka-consumer-groups.sh
和kafka-share-groups.sh
命令行工具,以提供更多与消费者和共享组相关的信息。这有助于解决由KIP-848和KIP-932引入的消费者和共享组的问题。
-
KIP-1102: 启用客户端基于超时或错误代码重新引导
KIP-1102通过在超时时间内没有更新时主动触发元数据重新引导,并允许服务器明确地通知客户端重新引导,从而增强了Kafka客户端的容错性。这解决了KIP-899中的先前限制,即客户端可能会陷入过时的元数据中,除非所有代理都不可达。 -
KIP-896: 在Kafka 4.0中删除旧的客户端协议API版本
首次,旧协议API版本已被移除。用户在升级Java客户端(包括Connect和Streams)到4.0之前,应确保代理版本为2.1或更高。同样,用户在升级代理到4.0之前,应确保他们的Java客户端版本为2.1或更高。
-
KIP-1124:为4.x版本提供清晰的Kafka客户端升级路径
此KIP概述了Kafka客户端、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中移除对代理和工具对Java 11的支持(在3.7中弃用)
Kafka 客户端和 Kafka Streams 需要 Java 11,而 Kafka 代理、Connect 和工具现在需要 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 API,这限制了它与当代Jakarta EE框架和应用的兼容性。KIP-1032通过将Kafka 4.0升级到Jakarta EE和JavaEE 10 API,引入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)
Apache Kafka 3.9.0 版本发布公告
2024年11月6日 - Colin P. McCabe
我们自豪地宣布Apache Kafka 3.9.0版本的发布。这是一个重大版本,也是3.x系列的最后一个版本。这将是最后一个包含已弃用的Apache ZooKeeper模式的重大版本。从4.0版本开始,Kafka将始终在没有ZooKeeper的情况下运行。
动态 KRaft 队列
当处于KRaft模式时,Kafka依赖于控制器进程的Raft队列来存储其元数据日志。之前,控制器队列由静态配置指定,需要在所有代理和控制器上设置。这使得更改控制器的主机名,或者添加或删除控制器,变得非常困难,而且很难在不中断服务的情况下完成。
KIP-853: KRaft 控制器成员变更 使得法定成员资格动态化。管理员现在可以通过运行 kafka-metadata-quorum.sh 工具或使用相关的 AdminClient API 来添加和移除控制器节点。
这个特性一直是社区热切期待的,我们很高兴在 3.9 版本中提供它。3.9 版本中的主要限制是我们不支持将静态元数据法定成员资格转换为动态的。然而,这项功能即将到来。
有关使用新动态法定成员资格特性的更多信息,请参阅 KIP-853 文档。
改进的 ZooKeeper 迁移
今天正在使用ZooKeeper模式的用户在使用KRaft模式之前,需要经历一个称为ZooKeeper迁移的过程。迁移过程包括运行一系列命令,将存储在ZooKeeper中的元数据复制到KRaft共识中。
ZK迁移不是一个新特性;实际上,它自Kafka 3.4版本以来就已经在开发中。然而,我想强调的是,Kafka 3.9是我们ZK迁移特性的最终和最佳迭代版本。随着我们迁移了成千上万的集群(无论大小),我们发现了并修复了许多错误。我们还关闭了所有剩余的功能差距,这使一些用户继续依赖于ZooKeeper。
Kafka 4.0 将完全告别 ZooKeeper。将不再支持以 ZK 模式运行或从 ZK 模式迁移。这意味着仍在使用已过时的 ZK 模式的管理员,如果需要升级到 4.0 及更高版本,将需要在“桥梁版本”处暂停。例如,如果您想从 Kafka 3.0 升级到 Kafka 4.0,您可能需要执行以下步骤:
-
升级到 Kafka 3.9。
-
执行 ZK 迁移。
-
升级到 Kafka 4.0。
在这个例子中,Kafka 3.9 作为通往 4.0 的“桥梁”。
在迁移您的旧 Kafka 集群时,请记住,Kafka 3.5 及更高版本使用的是与 Kafka 2.4 以下版本不兼容的 ZooKeeper 版本。因此,如果您想迁移比这更旧的集群,您将需要在同时支持两个 Kafka 版本的 ZK 版本的版本处再暂停一次。有关详细信息,请参阅 KIP-902。
以下是一个示例,如果您想从Kafka 1.0迁移到Kafka 4.0,您可能需要执行以下步骤:
-
升级到Kafka 3.4(由于ZK不兼容,较新版本将无法使用)
-
升级到ZooKeeper 3.8
-
升级到Kafka 3.9。
-
执行ZK迁移。
-
升级到Kafka 4.0。
这种多步骤的迁移应该相当罕见。毕竟,运行如此旧的Kafka版本会引发安全担忧。然而,我想提及这一点以示完整。
分层存储
分层存储是一个自Kafka 3.6以来一直在开发中的功能。它允许Kafka无缝地将数据卸载到可插拔的外部存储系统,例如云对象存储。(有关更多详细信息,请参阅KIP-405)
分层存储现在在Kafka 3.9中已准备好投入生产。此外,我们还添加了以下改进:
-
KIP-950: 分层存储禁用:
现在有一个机制可以基于主题动态禁用分层存储。 -
KIP-956 分层存储配额:
管理员现在可以设置分层存储上传和下载速率的上限。 -
KIP-1005: 暴露 EarliestLocalOffset 和 TieredOffset:
Kafka 现在暴露了分区数据在远程存储中存储的最高偏移量。 -
KIP-1057: 在导出日志工具中添加远程日志元数据标志:
Kafka-dump-log.sh 工具
kafka-dump-log.sh 工具现在具备了检查分层存储记录的能力。
Kafka Streams
Apache Kafka 3.9 中包含了几项 Kafka Streams 的改进。
-
KIP-1049: 为 Kafka Streams 添加 config log.summary.interval.ms 配置:
引入 log.summary.interval.ms 配置以控制摘要日志的频率。 -
KIP-1033: 添加 Kafka Streams 异常处理器,用于处理处理过程中发生的异常:
改进了 Kafka Streams 中的异常处理。
Kafka Connect
Kafka Connect 在 3.9 版本中也获得了多项改进。
-
KIP-1040: 改进InsertField、ExtractField和其他转换中可空值的处理:
添加更多配置旋钮以处理空值。 -
KIP-1031: 在MirrorSourceConnector中控制偏移量转换:
添加emit.offset-syncs.enabled配置,可用于禁用配置同步。 -
KIP-1017: Kafka Connect的健康检查端点:
添加一个REST端点,可用于确定Kafka Connect工作进程是否健康。
相关来源
- 发布公告:https://kafka.apache.org/blog#apache_kafka_400_release_announcement
- 下载地址:https://kafka.apache.org/downloads
- 发布说明:https://dlcdn.apache.org/kafka/4.0.0/RELEASE_NOTES.html
还没有评论,来说两句吧...