Kafka3.8.0的发布计划可参考https://cwiki.apache.org/confluence/display/KAFKA/Release+Plan+3.8.0
1.发布时间
KIP Freeze时间:2024年5月15日
Feature Freeze时间:2024年5月29日
Code Freeze: 2024年6月12日
至少两周的稳定性测试后,期待在2024年6月26日之后发布。
2.版本需求
主要包含以下重要的特性。
KIP-1028: 构建kafka的官方docker镜像
这个提议主要是基于JVM镜像构建kafka的官方docker镜像。
我们已经提供了OSS赞助镜像,在Apache的Docker Hub镜像仓库中。
现在我们要为Docker官方构建kafka镜像,并将交由Docker社区维护。
KIP-1036: Extend RecordDeserializationException exception
拓展 KIP-334,针对 RecordDeserializationException 这个异常额外增加 record 的内容和元信息,使得下游接收这个报错后可以更加容易去实现类似死信队列这样的能力。
KIP-1019: 暴露确定Metric是否可测量的方法
kafka当前缺乏直接而高效的机制来确定一个Metric是否可测量,现存的方法依赖以下两种机制:
(1)Exception-Based Measurability Check:通过measurable() 方法可获取Metric的值,当不是Measurable的实例时,就会抛异常。这就意味着,当Metric是不可测量时,检查可测量性就会触发异常处理和堆栈信息采集。
(2)Accessing Value Provider Field:KafkaMetricsCollector利用java反射机制可以在KafkaMetric类外部获取Metric值,这个方法是脆弱的,与kafka未来的特性相冲突。
这个小提议给KafkaMetric类新增了isMeasurable()方法,消除对私有变量的访问以及不可测量Metric的异常处理。
KIP-1004: Enforce tasks.max property in Kafka Connect
KIP-989: Improved StateStore Iterator metrics for detecting leaks
KIP-993: Allow restricting files accessed by File and Directory ConfigProviders
安全性的改进。过去 Kafka 对于访问的文件和目录是无限制的,现在可以做一些限制使得其更加安全:
config.providers=directory
config.providers.directory.class=org.apache.kafka.connect.configs.DirectoryConfigProvider
config.providers.directory.param.allowed.paths=/var/run,var/configsKIP-989: Improved StateStore Iterator metrics for detecting leaks
针对 Kafka Streams 的一个优化。通过引入一些新的 metric,方便开发者可以排查 Iterator 的泄露。
KIP-974: Docker Image for GraalVM based Native Kafka Broker
GraavlVM是一款由 Oracle 推出的高性能、低资源消耗、快速启动的 JDK。利用 AOT 编译生成 Native Image 使得 Java 拥有更快的启动速度和更低的内存消耗,从而更好的适应云原生时代。
KIP 974为 Apache Kafka 提供了一个使用 KRaft 模式,基于 GraalVM 的 Native Docker Image。采用该 Native Image,可以将 Broker 的启动时间缩小到 140ms 以内 (原来差不多需要 3s)。更快的 Broker 启动速度可以使得开发者需要运行大批量的 Broker 测试的场景时更有效率。
KIP-924: customizable task assignment for Streams
Task Assignor 是 KStream 里面负责给节点分配任务的组件 [5]。3.8 添加一组新的可配置接口,用于将自定义行为插入 Streams Partition Assignor 来使用自定义的 Task Assignor 从而带来更好的灵活性。
KIP-813: Shareable State Stores
State Stores 在 KStream 里面用来保存流应用的状态数据。State Stores 底层也是通过一个 topic 来实现的。过去这个 topic 不能在不同的 stream task 之间被共享,现在则可以被共享来减少数据冗余改善性能。
KIP-719: 移除log4j appender依赖
虽然kafka2.8.0中已经将log4j升级到了log4j2,但还有一些模块被忽略了,比如trogdor、shell、tools。trogdor和shell并没有从tools模块移除,tools还依赖log4j-appender,因为VerifiableLog4jAppender使用到了。因此log4j和log4j2的包都会存在包以及进程classpath中。
随着测试的跟进,保留log4j包的方案会产生一些问题。有些kafka用户报告了使用log4j配置文件的一些问题,有些日志消息并没有正确地输出到日志文件中。这个问题可以通过从classpath移除log4j包进行解决。
这个提议就是要将log4j升级到log4j2,所有的模块都不依赖log4j-appender,这样就能解决以上的问题。
KIP-390: 支持压缩级别
压缩中,CPU代表运行时间,IO代表压缩比率,CPU和IO是相互制衡的。因为依赖最优用例场景,许多compression库提供了可控制压缩级别的方法,并提供了默认的压缩级别,大部分情况下能带来优秀的性能表现。但是,Kafka并不提供配置压缩级别的方法。
这个提议建议给broker、topic、producer添加可配置的压缩级别。通过测试发现,这个配置可提升producer的消息发送速率提升到156%。
KIP-1018: Introduce max remote fetch timeout config for DelayedRemoteFetch requests
KIP-1037: Allow WriteTxnMarkers API with Alter Cluster Permission
KIP-1041: Drop offsets.commit.required.acks config in 4.0 (deprecate in 3.8)
KIP-1047 Introduce new org.apache.kafka.tools.api.Decoder to replace kafka.serializer.Decoder
KIP-899: Allow producer and consumer clients to rebootstrap
KIP-1004: Enforce tasks.max property in Kafka Connect
过去通过 tasks.max 来限制 Kafka connect 生成的任务是无效的,在 3.8 以后可以通过该参数做强置限制。属于修复了一个历史遗留的 BUG。