Kafka3.2.0版本信息


发布于 2022-04-03 / 54 阅读 / 0 评论 /
Kafka3.2.0版本内容和发布时间

Kafka3.2.0发布信息可参考https://cwiki.apache.org/confluence/display/KAFKA/Release+Plan+3.2.0

1.发布时间

KIP Freeze时间:2022年3月2日

Feature Freeze时间:2022年3月16日

Code Freeze时间:2022年3月30日

代码封板后,最少需要保持2周的稳定期。

2.版本需求

Kafka3.2.0对以下19个特性进行了开发。

KIP-815: Support max-timestamp in GetOffsetShell

KIP-814: Static membership protocol should let the leader skip assignment

静态成员协议应该让领导者跳过分配

自 Apache Kafka 2.4.0 引入静态成员资格以来,消费者可以在短暂离开后重新加入消费者组,而不会触发重新平衡。如果消费者组的领导者短暂缺席然后重新加入,它将仍然是领导者。但是,没有办法让重新加入的消费者知道它仍然是领导者而不触发另一个重新平衡。最终,这可能会导致组错过一些元数据更改,例如分区增加。使用KIP-814,重新加入的领导者无需计算新任务即可获知其领导地位。

KIP-811: Add config repartition.purge.interval.ms to Kafka Streams

KIP-810: Allow producing records with null values in Kafka Console Producer

kafka-console-producer工具允许将具有价值null的记录写入主题。这意味着 kafka-console-producer 现在可以为压缩主题生成墓碑记录。

KIP-798 和 KIP-810这两个特性都改进了使用 kafka-console-producer 的调试。

KIP-808: Add support for different unix precisions in TimestampConverter SMT

在 TimestampConverter SMT 中添加对不同 Unix 时间精度的支持

KIP-808unix.precision为SMT引入了一个新的可选配置字段TimestampConverter,允许用户为 SMT 定义所需的精度。此新字段的有效值为秒、毫秒、微秒和纳秒。这种添加的动机是在外部系统中 Unix 时间以不同的精度表示。

KIP-806: Add session and window query over kv-store in IQv2

KIP-806增加了Query接口的两个实现——WindowKeyQuery类和WindowRangeQuery类。前者允许在给定时间范围内使用给定键扫描窗口,而后者允许在给定时间范围内独立于窗口键扫描窗口。

KIP-805: Add range and scan query over kv-store in IQv2

KIP-805将该RangeQuery类添加到 Interactive Query v2。该类RangeQuery是Query接口的一个实现,它允许在由上下键边界指定的范围内查询状态存储,或者在没有提供边界时扫描状态存储的所有记录。

KIP-801: Implement an Authorizer that stores metadata in __cluster_metadata

KRaft 的标准授权器

KIP-801引入了一个不依赖于 Zookeeper 的内置授权器 StandardAuthorizer。这意味着您现在可以在没有 Zookeeper 的情况下运行安全的 Kafka 集群!StandardAuthorizer 将其 ACL 存储在__cluster_metadata主题中,默认情况下在 KRaft 集群中使用。StandardAuthorizer 与 AclAuthorizer 对依赖于 Zookeeper 的集群所做的所有事情都是一样的。

KIP-800: Add reason to JoinGroupRequest and LeaveGroupRequest

为JoinGroupRequest和LeaveGroupRequest添加原因

当消费者离开或加入消费者组时,它会在本地记录原因。在此版本之前,经纪人没有任何关于消费者加入或离开消费者组的原因的信息。这使得重新平衡触发LeaveGroupRequest并JoinGroupRequest难以解决。KIP-800将离开和加入消费者组的原因传播给代理,从而更容易解决再平衡问题。

KIP-798: Add possibility to write kafka headers in Kafka Console Producer

kafka-console-producer工具提供了一种将标题添加到写入主题的记录的方法。

KIP-796: Interactive Query v2

KIP-796为 Kafka Streams (IQv2) 中的交互式查询指定了改进的接口。新接口旨在使查询状态存储更简单、更快,并在修改现有状态存储和添加新状态存储时降低维护成本。

KIP-796 描述了使用交互式查询查询状态存储的通用接口。Query通过实现接口,可以将特定查询类型添加到 Interactive Query v2 。

KIP-976 还定义了KeyQuery允许用户通过 IQv2 评估键/值查找的类。

KIP-796 是一个长期项目,将在未来版本中使用新的查询类型进行扩展。从 Apache Kafka 3.2.0 开始,IQv2 处于预览阶段。公共文档站点尚未更新,IQv2 的接口被标记为@Evolving(意味着如果预览用户发现当前 API 存在重大缺陷,它们可能会在没有弃用期的小版本中破坏兼容性)。未来版本将删除@Evolving注释并将 IQv2 指定为稳定版本。

KIP-791: Add Record Metadata to StateStoreContext

将记录元数据添加到状态存储上下文

KIP-791recordMetada()向 中添加方法StateStoreContext,提供对当前正在处理的记录的主题、分区和偏移量的访问。以这种方式公开当前上下文允许状态存储跟踪它们在每个输入分区中的当前偏移量,从而允许它们实现 KIP-796 中引入的一致性机制。

KIP-788: Allow configuring num.network.threads per listener

允许为每个侦听器配置 num.network.threads

在 Kafka 代理上,定义多个侦听器是很常见的。每个侦听器都有自己的网络线程池。在许多情况下,一些侦听器处理的流量比其他侦听器少得多,并且通常不需要与需要处理更多流量的侦听器相同数量的线程。

KIP-788允许为每个侦听器单独设置网络线程的池大小。这允许微调网络线程的数量以动态适应流量峰值或在使用具有不同流量负载的侦听器时略微减少内存使用量。为此,num.network.threads更新了现有配置以支持在特定侦听器上通过listener.name.{}.num.network.threads.

KIP-784: Add top-level error code field to DescribeLogDirsResponse

向 DescribeLogDirsResponse 添加顶级错误代码字段

KIP-784将错误代码添加到DescribeLogDirsAPI 的响应中。在以前的版本中DescribeLogDirs,如果用户没有请求的必要授权,则返回空响应。客户不得不将空响应解释为CLUSTER_AUTHORIZATION_FAILED错误。KIP-784 使DescribeLogDirsAPI 与其他 API 保持一致,并允许返回除CLUSTER_AUTHORIZATION_FAILED.

KIP-779: Allow Source Tasks to Handle Producer Exceptions

允许源任务处理生产者异常

KIP-779使源连接器对生产者异常具有弹性。由于源连接器从系统用户获取数据无法控制,因此可能会发生接收到的消息太大或无法处理配置的 Connect 工作线程、Kafka 代理和其他生态系统组件的情况。以前这样的错误总是会杀死连接器。

使用 KIP-779发送消息时WorkerSourceTask检查配置error.tolerance失败。如果error.tolerance设置为all,WorkerSourceTask则将忽略异常,允许连接器确认其源系统并继续处理。如果error.tolerance未设置为all,源连接器将失败。

关于兼容性的说明:设置errors.tolerance为all并预期在生产者失败时终止的现有源连接器将需要按照 KIP 中的描述进行更新。errors.tolerance未设置为的源连接器all将不受此更改的影响,并在生产者失败的情况下被终止。

KIP-769: Connect APIs to list all connector plugins and retrieve their configuration definitions

连接 API 以列出所有连接器插件并检索其配置定义

KIP-769使用新的查询参数扩展GET /connector-plugins端点connectorsOnly,当设置为false列出所有可用插件而不仅仅是连接器时。新的查询参数可帮助用户验证哪些插件可用,而无需知道如何设置 Connect 运行时。新参数的用法是GET /connector-plugins?connectorsOnly=false。默认情况下connectorsOnly设置true为与以前的行为兼容。

此外,KIP-769 添加了一个新端点,它将返回给定插件的配置。新端点的使用方式如下:GET /connector-plugins//config. 新端点适用于所有由GET /connector-plugins.

KIP-764: Configurable backlog size for creating Acceptor

用于创建 Acceptor 的可配置积压大小

当有许多大客户端时,首选领导者选举可以导致许多客户端在很短的时间内打开连接。这可能会导致 TCP 的接受器套接字的 SYN 积压被填满,从而导致重试延迟或生产者速度减慢。

KIP-764引入了一种新配置socket.listen.backlog.size,允许为代理上的 TCP 接受器套接字设置 SYN 积压的大小。增加此配置可以缓解许多打开连接导致的问题。

KIP-708: Rack awareness for Kafka Streams

Kafka Streams 的机架感知

从 Apache Kafka 3.2.0 开始,Kafka Streams 可以使用KIP-708将其备用副本分布在不同的“机架”上。为了形成一个“机架”,Kafka Streams 在应用程序配置中使用标签。例如,Kafka Streams 客户端可能被标记为集群或它们正在运行的云区域。用户可以通过设置配置来指定应用于备用副本的机架感知分布的标签rack.aware.assignment.tags。在任务分配过程中,Kafka Streams 会尽力将备用副本分布在不同的任务维度上。机架感知备用分配提高了在整个“机架”发生故障的情况下的容错能力。例如,这可用于确保副本分布在云托管提供商的不同可用区域中。

KIP-704: Send a hint to the partition leader to recover the partition

向分区领导者发送提示以恢复分区

使用 KIP-704,控制器现在能够与新选举的主题分区领导者进行通信,无论它是使用不干净的领导者选举策略选举的。此信息告诉新主题分区领导者它需要恢复其状态。例如,这将在未来用于清理事务状态,这可能会在不干净的选举之后变得不一致。

KIP-591: Add Kafka Streams config to set default state store

KIP-471: Expose RocksDB Metrics in Kafka Streams (implementation completed)