Apache Kafka 2.6更新

2020-08-07 02:32:47

我很高兴代表Apache Kafka®社区宣布Apache Kafka 2.6.0的发布。这是另一个具有许多新功能和改进的激动人心的版本。我们将在这篇博客文章中重点介绍一些更突出的特性,但请参阅发行说明以获取完整的更改列表。

我们在此版本中进行了相当多的性能改进,特别是当代理具有更大的分区计数时。代理关闭性能显著提高,当生产者使用压缩时,性能也会显著提高。ACL使用的各个方面速度更快,需要的内存更少。我们还减少了代理中其他几个位置的内存分配。

这个版本还增加了对Java14的支持,在过去的几个版本中,社区默认切换到使用Scala 2.13,现在推荐使用Scala 2.13进行生产。

最后,这些成就只是Apache Kafka 3.0之前更大的活动路线图的一部分,Apache Kafka 3.0可能是该项目历史上最重要的版本之一。用内置的基于木筏的共识取代动物园管理员的工作正在顺利进行,有8个KiP正在积极开发中。卡夫卡关于元数据法定人数的新RAFT协议已经可供审查。分层存储通过KIP-405实现无限扩展和更快的重新平衡时间,并且已在优步的内部群集中启动并运行。

今天在Kafka中管理配额可能很有挑战性,因为它们可以映射到用户和客户端的任何组合。此功能添加了用于管理配额的本机API,使该过程更加直观,不容易出错。新的kafka-client-quotas.sh命令行工具允许用户描述现有配额,使用有关如何派生这些配额的上下文信息解析实体的有效配额,并通过指定要添加、更新和/或删除哪些条目来修改配额配置条目。例如:

Kafka Broker机器上的磁盘访问可能会影响延迟和吞吐量。此更改添加了跟踪Kafka从磁盘读取和写入的字节数的度量。

Kafka消费者协调将哪些主题分区分配给同一消费者组中的每个客户端。此功能允许使用使用者的应用程序显式触发重新平衡,例如,如果应用程序使用某些系统条件来确定它是否准备好接收分区。

TLS 1.3现在是使用Java 11或更高版本时的默认TLS协议,而TLS 1.2仍然是早期Java版本的默认协议。与Apache Kafka 2.5.0一样,由于已知的安全漏洞,TLS 1.0和1.1在默认情况下是禁用的,但如果需要,用户仍然可以启用它们。

Kafka配置大部分由映射到配置名称的单个值定义。在此更改之前,很难设置由更复杂的结构(如嵌套列表或JSON)更好地定义的配置。Kafka现在支持使用kafka-configs.sh命令行工具设置文件中定义的配置。例如:

Apache Kafka 2.1.0和KIP-302为client.dns.lookup客户端属性引入了use_all_dns_ips选项。进行此更改后,use_all_dns_ips选项现在是默认选项,因此它将尝试使用主机名的所有可能的IP地址连接到代理。新的默认设置将降低连接故障率,并且在单个主机名可能解析为多个IP地址的云和集装箱化环境中更为重要。

这一被广泛要求的功能允许Kafka Connect自动为写入记录的源连接器创建Kafka主题(如果这些主题尚不存在)。这在默认情况下是启用的,但需要连接器配置来定义Connect在创建这些主题时使用的规则。例如,只需包含以下内容就会导致Connect创建所有缺少的主题,分区数为5,复制因子为3:

可以定义具有主题匹配表达式和特定主题设置的附加规则,使其成为一个强大而有用的功能,特别是在Kafka经纪人禁用了主题自动创建的情况下。

说到创建主题,Connect worker配置现在可以为连接器配置、偏移量和状态使用的内部主题指定额外的主题设置,包括使用Kafka Broker的默认分区计数和复制因子。

如果记录不能被序列化或反序列化,或者当单个消息转换(SMT)失败时,Kafka Connect已经能够将记录写入死信队列(Dead Letter Queue,DLQ)主题。现在,如果连接器认为记录无效或有问题,则Connect使接收器连接器能够将各个记录发送到DLQ。接收器连接器需要显式使用此功能,但这样做将允许接收器连接器继续操作,即使使用的主题中的某些记录与接收器连接器不知何故不兼容。

为使用多个主题的连接器定义SMT可能具有挑战性,因为并非每个SMT都适用于每个主题的每条记录。使用此功能,每个SMT都可以定义一个谓词,其中包含应应用该SMT的条件。它还定义了一个“筛选器”SMT,该SMT与谓词一起使用来删除符合特定条件的记录。

现在可以向所有Kafka Connect REST API响应添加自定义头部。这允许用户确保REST API响应符合公司安全策略。

在此更改之前,当Kafka Streams分配有状态任务时,Streams必须在开始处理它之前将其捕获到其ChangeLog的头部。此功能允许有状态任务的前一个所有者保留该任务,即使分配不平衡,直到新的所有者赶上,然后在追赶阶段之后更改所有权,从而避免了停止世界重新平衡。

此功能添加了更多开箱即用的指标,并删除了一些无用的指标。它还改进了流应用程序用来注册自定义指标的API。

此版本在此Kip上添加了额外的工作,以简化以事务方式读取和写入Kafka的应用程序的API。以前,此用例通常需要为每个输入分区单独的生产者实例,但现在没有特殊要求。这使得构建使用大量分区的只需一次语义(EOS)的应用程序变得容易得多。这是在下一版本中对Kafka Streams进行类似改进的基础。

此更改向Kafka Streams添加了更改时发射处理选项,并补充了现有的更新时发射和窗口关闭时发射选项。这个新选项删除先前记录和更新记录具有相同字节数组的幂等更新。此功能有助于消除沿拓扑向下转发大量不必要结果的大量相同操作。

要更多地了解Apache Kafka 2.6中的新特性,并查看此版本中包含的所有KiP,请务必查看下面视频中的发行说明和亮点。

这是社区做出的巨大努力,因此感谢为此版本做出贡献的每个人,包括我们所有的用户和在此版本中做出代码或文档更改的127人(根据git Short日志):

首页--期刊主要分类--期刊细介绍--期刊题录与文摘--期刊详细文摘内容。Florian Hussonnois,Gardner Vickers,Greg Harris,Gunnar Morling,Guozang Wang,High.Lee,Hossein Torabi,Huxi,Ismael Juma,Jason Gustafson,Jeff Huang,Jeff Kim,Jeff Widman,Jeremy Custen Borde,谢佳梅,佳美谢,焦立中,Jim Galasyn,Joel Hamill,John Roesler,Jorge Esteban Quilcate Otoya,Mitch,Navina Ramesh,Navinder Pal Singh Brar,Nicolasguyomar,Nigel Leung,Nikolay,Okada Haruki,Paul,Piotr Fras,Radai Rosenblatt,Rajini Sivaram,Randall Hauch,Rens Groothuijsen,Richard Yu,Rigel Bezerra de Melo,Rob Meng,Rohan,Ron Dagostino,Sanjana Kaundinya,Scott,Scott Hendricrica。

Randall Hauch是Apache Kafka项目的提交者,也是Confluent的Connect团队的软件工程师。他有25年的软件开发经验,主要专注于数据集成技术。Randall创建并参与开源项目已有10年之久,并创建了Debezium项目,为关系数据库构建Kafka Connect变更数据捕获连接器。