Kafka2.7.0发布信息可参考https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=158872629
1.发布时间
KIP Freeze时间:2020年9月30日
Feature Freeze时间:2020年10月7日
Code Freeze时间:2020年10月21日
Release时间:2020年12月21日
2.版本需求
Kafka2.7.0版本对以下22个特性进行了开发。
KIP-662: Throw Exception when Source Topics of a Streams App are Deleted
当 Kafka Streams 应用程序的源主题被删除时抛出异常
现在,如果用户删除正在运行的 Kafka Streams 应用程序的源主题,其中的消费者客户端会正常关闭。这个客户端关闭触发重新平衡,直到 Streams 应用程序的所有流线程优雅退出,使应用程序完全关闭,没有任何方法来处理这个错误。
这个版本添加了 KIP-662,当用户从正在运行的 Streams 应用程序中删除源主题时,应用程序将抛出 MissingSourceTopicException,允许我们对错误作出反应。
KIP-654: Aborted transaction with non-flushed data should throw a non-fatal exception
终止带有任何未刷新数据的事务时抛出一个非致命异常
在 Kafka 2.7.0 之前,当 Java client producer 程序终止带有任何未刷新(挂起)数据的事务时,将抛出一个致命异常。但是,终止一个有挂起数据的事务实际上被认为是一种正常的情况。抛出的异常应该是通知我们没有发送记录,而不是通知应用程序处于不可恢复状态。
所以,在 KIP-654 中引入了一个名为TransactionAbortedException 的异常,允许我们在需要时重试。
KIP-651 - Support PEM format for SSL certificates and private key
私钥和 SSL证书支持 PEM 格式
目前,Kafka 在使用 SSL 时只支持基于JKS 或 PKCS12 文件的密钥和信任存储。虽然 Privacy-Enhanced Mail(PEM)不再是电子邮件的标准,但它是存储和分发加密密钥和证书的标准格式。
在KIP-651 中为密钥和信任存储增加了对 PEM 文件的支持,允许使用依赖于 PEM 格式的第三方提供商。
KIP-648: Renaming getter method for Interactive Queries
为交互式查询重命名 getter 方法,使其遵循不使用 get 前缀的 Kafka 格式。
KIP-632: Add DirectoryConfigProvider
添加 DirectoryConfigProvider 类,以支持需要为存储在容器文件系统(比如Kubernetes环境)中的密钥提供保护的用户。
KIP-626: Rename StreamsConfig config variable name
KIP-620 Deprecate ConsumerConfig#addDeserializerToConfig and ProducerConfig#addSerializerToConfig
KIP-617: Allow Kafka Streams State Stores to be iterated backwards
允许 Kafka Stream 状态存储向后迭代
目前,在 Kafka Streams 状态存储上使用迭代器时,只能从最老的元素遍历到最新的元素。当迭代一个有窗口的状态存储时,如果用户希望返回最新的 N 条记录,那么别无选择,只能使用低效的方法,即遍历所有最旧的记录,然后再获得所需的新记录。
KIP-617 增加了对反向状态存储迭代的支持,反向迭代使最新的N 条记录检索更加有效。
KIP-616: Rename implicit Serdes instances in kafka-streams-scala
KIP-613: Add end-to-end latency metrics to Streams
添加了 Kafka Stream 端到端的延迟度量
目前,Kafka Stream 中消息的实际端到端延迟是很难估计的,Kafka Stream 现在公开了端到端的指标,可以使得用户在选型是做出更好的选择
KIP-612: Ability to Limit Connection Creation Rate on Brokers
能够限制 broker 上的连接创建速率
创建连接会给 broker 增加 CPU 开销。连接风暴(Connection storms)可能来自表面上表现良好的客户机,并可能阻止 broker 执行其他有用的工作。这个版本添加了一种方法可以强制限制每个 broker 中每个监听器创建连接的速率。
2.7.0版本包含了 KIP-612的第一部分,每个 IP 的连接限制预计会在 2.8.0 版本中出现。
KIP-607: Add Metrics to Kafka Streams to Report Properties of RocksDB
在 Kafka Stream 中添加了 RocksDB 属性相关的度量
当前 Kafka Stream 中 RocksDB 公开的指标不包括内存或磁盘使用情况。在2.7.0中,Kafka Stream 将 RocksDB 相关属性也暴露出来了,具体细节参见 KIP-607。
KIP-601: Configurable socket connection timeout in NetworkClient
KIP-599: Throttle Create Topic, Create Partition and Delete Topic Operations
支持对创建主题、创建分区和删除主题的操作进行节流
创建主题、创建分区和删除主题的 API 是直接影响 Kafka 控制器总体负载的操作。为了防止由于高并发主题和分区创建或主题删除而导致集群不堪重负,KIP-599 中引入了一个新的配额来限制这些操作。
KIP-597: MirrorMaker2 internal topics Formatters
KIP-572: Improve timeouts and retries in Kafka Streams
KIP-554: Add Broker-side SCRAM Config API
添加 Broker 端的 SCRAM 配置 API
通过 KIP-554,SCRAM凭据可以通过 Kafka 协议进行管理,kafka-configs 工具使用了这个新的协议API 以便在 Broker 端对 SCRAM 进行配置,这个也是 Kafka 移除 Zookeeper 项目的一部分。
KIP-545: support automated consumer offset sync across clusters in MM 2.0
KIP-497: Add inter-broker API to alter ISR
添加可以修改ISR 的 Broker 内部 API
目前,Kafka partition leader 和 ISR 信息存储在 ZooKeeper 中。控制器或分区 leader 都可以更新这个信息。因为两者都可以更新此状态,所以需要有一种机制来共享此信息,这可能会出现一方出现ISR 信息延迟,这些延迟的影响意味着元数据请求可能接收到旧的信息。
在2.7.0版本中,添加了一个名为 Alterlsr 新的 API,它赋予 controller 独家更新分区 leader 和 ISR 状态的能力。这个新 API 的主要好处是元数据请求将始终获取到最新的状态。
KIP-478 - Strongly typed Processor API
KIP-450: Sliding Window Aggregations in the DSL
DSL 中的滑动窗口支持聚合操作
Kafka Streams 实现了会话窗口(session windows),滚动窗口(tumbling windows)和跳跃窗口(hopping windows)作为窗口聚合方法。虽然提前时间较短的跳转窗口可以模仿滑动窗口的行为,但这种实现的性能很差,因为它会导致许多重叠且经常是冗余的窗口,这需要昂贵的计算。不过,在KIP-450 中,Kafka Stream 现在提供了一种有效的方式来世行滑动聚合。
KIP-431: Support of printing additional ConsumerRecord fields in DefaultMessageFormatter
使用 ConsoleConsumer 打印 Record 中的其他字段
现在我们可以使用 ConsoleConsumer 打印 ConsumerRecord 中的头信息