Apache Kafka 发布 2.7.0 版本

2,140 阅读12分钟

Release Notes - Kafka - Version 2.7.0

下面是Kafka的2.7.0版本中解决的JIRA问题的摘要。有关该版本的完整文档、入门指南和项目信息,请参见Kafka项目网站

关于升级的注意事项: 在升级你的集群之前,请仔细查看该版本的升级文档。升级说明讨论了任何关于不兼容的关键信息和突破性变化、性能变化以及可能影响你的Kafka生产部署的任何其他变化。

最新版本的文档可以在kafka.apache.org/documentati…找到。

新特性

  • [kafka-9893] - 可配置的TCP连接超时和改进初始元数据的获取
  • [kafka-9915] - 节制创建主题、创建分区和删除主题的操作
  • [kafka-10054] - 为流添加TRACE级别的端到端延迟指标
  • [kafka-10259] - KIP-554:增加经纪商侧SCRAM配置API
  • [kafka-10338] - 支持PEM格式的SSL证书和私钥

改进

  • [kafka-5636] - 为聚合添加滑动窗口支持

  • [kafka-6585] - 整合重置工具上的重复逻辑

  • [kafka-6733] - 支持在DefaultMessageFormatter中打印额外的ConsumerRecord字段

  • [kafka-7334] - 建议在出现FileNotFoundException时改变state.dir的配置。

  • [kafka-8360] - 文档中没有提到RequestQueueSize JMX metric。

  • [kafka-8836] - 添加经纪商之间的协议来改变ISR

  • [kafka-9018] - Kafka Connect - 在序列化错误时抛出更清晰的异常

  • [kafka-9076] - MirrorMaker 2.0自动化消费者偏移同步

  • [kafka-9194] - 缺少replicaMaxWaitTimeMs配置值的文档

  • [kafka-9439] - 为KafkaProducer添加更多公共API测试

  • [kafka-9450] - 将内部状态刷新与提交解耦

  • [kafka-9587] - 文档中省略了生产者的配置

  • [kafka-9924] - 在RocksDB指标中添加RocksDB内存消耗量

  • [kafka-9929] - 支持WindowStore上的反向迭代器

  • [kafka-10002] - 改善StopReplicaRequest在有大量分区需要删除时的表现

  • [kafka-10020] - KIP-616:重命名kafka-streams-scala中隐含的Serdes实例

  • [kafka-10023] - 强制执行整个经纪商和每个听众的连接创建率(KIP-612,第1部分)。

  • [kafka-10033] - 如果改变不存在的主题的配置,AdminClient应该抛出UnknownTopicOrPartitionException而不是UnknownServerException。

  • [kafka-10035] - 改进AbstractResetIntegrationTest

  • [kafka-10040] - 让PreferredReplicaImbalanceCount指标的计算更加高效

  • [kafka-10077] - 过滤state-store下游的虚假墓碑的结果

  • [kafka-10098] - 删除SaslAuthenticatorTest.java中正则表达式中不必要的转义。

  • [kafka-10106] - 记录处理LeaderAndIsr请求的时间

  • [kafka-10122] - 消费者在重新平衡期间也应该允许心跳。

  • [kafka-10126] - 废弃ConsumerPerformance中未使用的选项。

  • [kafka-10131] - 尽量减少ducktape测试中的--zookeeper标记的使用。

  • [kafka-10135] - 将Task#executeAndMaybeSwallow提取为一个通用的工具。

  • [kafka-10135] - 将Task#executeAndMaybeSwallow提取出来,成为TaskManager的一个通用函数。

  • [kafka-10141] - 为日志段的删除信息添加更多细节

  • [kafka-10143] - 增加集成测试,确保重新分配工具可以在重新平衡过程中改变复制配额

  • [kafka-10168] - 重新命名公共StreamsConfig变量

  • [kafka-10186] - 终止有待处理数据的事务应该抛出非致命性的异常

  • [kafka-10205] - StreamTask中的NullPointerException

  • [kafka-10211] - 添加DirectoryConfigProvider

  • [kafka-10225] - 增加系统测试的默认zk会话超时时间

  • [kafka-10232] - MirrorMaker2内部主题格式化

  • [kafka-10277] - 放宽对KStream-GlobalKTable连接的非空键要求。

  • [kafka-10279] - 允许动态更新带有额外SubjectAltNames的证书

  • [kafka-10305] - 当解析ConsumerPerformance失败时打印用法

  • [kafka-10316] - 考虑重新命名交互式查询的getter方法

  • [kafka-10355] - 将意外删除源主题作为特殊故障处理

  • [kafka-10367] - 允许使用配置文件运行Streams演示应用程序

  • [kafka-10403] - 在生成MBeans属性时用java集合代替scala集合。

  • [kafka-10407] - 为KafkaLog4jAppender添加linger.ms参数支持

  • [kafka-10418] - 通过kafka-topics与--bootstrap-server改变主题配置时,不完整的错误/文档

  • [kafka-10458] - 需要一种方法来更新用Sensor注册的TokenBucket的配额。

  • [kafka-10459] - 文档IQ API,其中存储之间的顺序不成立

  • [kafka-10478] - 广告.监听器应该允许重复的端口

  • [kafka-10494] - 流:如果节点本身是物化的,enableSendingOldValues不应该调用父节点。

  • [kafka-10503] - 当主题没有分区时,MockProducer不会抛出ClassCastException。

  • [kafka-10509] - 添加指标以跟踪因触及连接速率配额而导致的节流时间

  • [kafka-10521] - 移除完成分区重新分配的ZK手表

  • [kafka-10584] - IndexSearchType应该使用密封的trait而不是Enumeration

  • [kafka-10611] - 合并日志错误以避免双重错误

  • [kafka-10801] - 关于配置的文档有多处使用相同的HTML锚标签

  • [kafka-10802] - 启动消费者时出现虚假的日志信息

Bug

  • [kafka-6078] - 调查ReassignPartitionsClusterTest.shouldExpandCluster的失败。

  • [kafka-7970] - 缺少主题导致服务关闭而没有例外

  • [kafka-8033] - 摇摆不定的测试PlaintextConsumerTest#testFetchInvalidOffset

  • [kafka-8098] - 明显的测试AdminClientIntegrationTest#testConsumerGroups

  • [kafka-8264] - 诡异的测试PlaintextConsumerTest#testLowMaxFetchSizeForRequestAndPartition

  • [kafka-8334] - 偶尔会出现OffsetCommit超时

  • [kafka-8362] - 日志目录之间的分区移动后,LogCleaner会卡住。

  • [kafka-8630] - 使用WindowStore对流处理器进行单元测试时,出现了ClassCastException。

  • [kafka-9066] - Kafka Connect JMX : 失败状态的任务的源和汇任务指标丢失

  • [kafka-9381] - Javadocs + Scaladocs未在maven中心发布

  • [kafka-9514] - 当一个字段被设置为空时,协议生成器产生了无用的条件,并使用了灵活的版本

  • [kafka-9516] - 摇摆不定的测试PlaintextProducerSendTest#testNonBlockingProducer

  • [kafka-9584] - 删除头文件会导致并发修改异常。

  • [kafka-9666] - 事务性生产者的Epoch无法被重置

  • [kafka-9769] - ReplicaManager Partition.makeFollower 在ZooKeeper断开连接时增加LeaderEpoch

  • [kafka-9845] - plugin.path属性与config provider不起作用。

  • [kafka-10014] - 总是尝试在Selector#close中关闭所有通道

  • [kafka-10048] - 使用MM2时,消费者在故障转移后可能会出现数据缺口

  • [kafka-10079] - 改善有状态任务的线程级粘性

  • [kafka-10109] - kafka-acls.sh/AclCommand打开多个AdminClients

  • [kafka-10120] - DescribeLogDirsResult暴露了内部类

  • [kafka-10133] - 无法用MM2压缩目的地集群中的消息

  • [kafka-10134] - 升级到2.5后,Kafka消费者在重新平衡时出现高CPU问题

  • [kafka-10140] - 增量配置api不包括插件配置的变化

  • [kafka-10147] - MockAdminClient#describeConfigs(Collection

    )无法处理经纪人资源。

  • [kafka-10158] - 修复闪烁的kafka.admin.TopicCommandWithAdminClientTest#testDescribeUnderReplicatedPartitionsWhenReassignmentIsInProgress。

  • [kafka-10160] - Kafka MM2消费者配置

  • [kafka-10179] - State Store将错误的Changelog主题传递给Serde,以获得优化的源表

  • [kafka-10180] - TLSv1.3系统测试不应该在Java 8下运行

  • [kafka-10188] - 水槽任务preCommit方法在任务停止后被调用

  • [kafka-10189] - 重置公制EventQueueTimeMs

  • [kafka-10192] - 摇摆不定的测试 BlockingConnectorTest#testBlockInConnectorStop

  • [kafka-10193] - 为有回调的控制器事件添加优先权

  • [kafka-10200] - MockProcessorContext与WindowStores不起作用

  • [kafka-10215] - MockProcessorContext不能与SessionStores一起工作

  • [kafka-10218] - DistributedHerder的canReadConfigs字段从未被重置为true。

  • [kafka-10220] - 描述资源时的NPE

  • [kafka-10224] - 关于球衣的许可条款不正确

  • [kafka-10235] - 修复闪烁的transactions_test.py

  • [kafka-10240] - 水槽任务不应该在关闭时抛出WakeupException

  • [kafka-10243] - 处理连接设置超时时的ConcurrentModificationException

  • [kafka-10268] - 像"--delete-config log.retention.ms "这样的动态配置不起作用。

  • [kafka-10271] - 从一个分区获取一个密钥时的性能退步

  • [kafka-10272] - kafka-server-stop.sh在IBM i上失败。

  • [kafka-10282] - 如果一个日志被快速删除并重新创建,日志指标会被删除

  • [kafka-10284] - 由于静态成员重新加入而导致的组成员更新应该被持久化

  • [kafka-10300] - 修理飘忽不定的core/group_mode_transactions_test.py

  • [kafka-10312] - MetadataCache.getPartitionMetadata在分区领导不在MetadataCache时可能会返回不正确的错误代码。

  • [kafka-10314] - 当离线日志目录存在时,重新分配的KafkaStorageException

  • [kafka-10321] - shouldDieOnInvalidOffsetExceptionDuringStartup在JDK11上会永远阻塞。

  • [kafka-10326] - 串行器和反串行器都应该能够看到生成的客户端ID。

  • [kafka-10332] - 如果先创建了远程主题,MirrorMaker2就无法检测主题。

  • [kafka-10340] - 当试图向不存在的主题生成记录时,源连接器应报告错误,而不是永远挂起。

  • [kafka-10362] - 当用EOS恢复Streams活动任务时,检查点文件应该被删除。

  • [kafka-10384] - 将转换器与生成的消息分开

  • [kafka-10387] - 不能将SMT配置与使用topic.creation.*属性的源连接器一起包含。

  • [kafka-10391] - 流应该覆盖检查点,排除损坏的分区

  • [kafka-10395] - TopologyTestDriver在动态主题路由中不工作

  • [kafka-10401] - GroupMetadataManager忽略了GROUP_METADATA_VALUE_SCHEMA_V3的current_state_timestamp域。

  • [kafka-10426] - KafkaConfigBackingStore的死锁问题

  • [kafka-10439] - Connect的Values类对大于64位的整数失去了精度

  • [kafka-10454] - 当流<>表连接分区不匹配时,Kafka流卡在了无限的REBALANCING循环中

  • [kafka-10455] - 探测再平衡不能保证由非领导成员触发

  • [kafka-10463] - Dockerfile中的必要工具应包括git

  • [kafka-10477] - 当试图将空键的Kafka记录转换为连接记录时,Sink Connector出现了DataException故障。

  • [kafka-10479] - 如果用户试图更新现有监听器的配置,则抛出异常。

  • [kafka-10502] - 线程本地不能设置null,因为它可能会产生内存泄漏。

  • [kafka-10515] - NPE:如果应用程序是分布式的,外键连接serde可能不会被初始化为默认serde。

  • [kafka-10520] - 如果最少加载的节点没有准备好发送,InitProducerId可能会被阻止。

  • [kafka-10531] - KafkaBasedLog可以对负值进行休眠

  • [kafka-10557] - 描述主题配置时缺少文档,包括文档

  • [kafka-10559] - 在内部主题验证时,不要在出现TimeoutException时关闭整个应用程序

  • [kafka-10564] - 持续记录关于删除过时的状态目录的情况

  • [kafka-10574] - SimpleHeaderConverter和Values类中的无限循环

  • [kafka-10598] - KafkaStreams为IQ报告不适当的错误信息

  • [kafka-10600] - 如果连接器没有定义属性,Connect会在验证结果中为该属性添加错误。

  • [kafka-10602] - 当从不同线程报告时,DLQ Reporter会抛出NPE。

  • [kafka-10606] - 在获取所有主题的元数据时自动创建不存在的主题

  • [kafka-10613] - 如果list-offset请求的版本<4,Broker不应该设置leader epoch

  • [kafka-10616] - StreamThread被 "IllegalStateException: 处理器已经关闭了"

  • [kafka-10631] - ProducerFencedException在Offest Commit上没有被处理。

  • [kafka-10638] - 由于更严格的存储检查,QueryableStateIntegrationTest失败。

  • [kafka-10647] - 只有当消费者协议版本>=0时,才会序列化拥有的分区

  • [kafka-10651] - 指派者报告来自未初始化任务的偏移量

  • [kafka-10664] - Streams无法覆盖损坏的偏移量,导致无限的OffsetOutOfRangeException循环。

  • [kafka-10687] - 生产请求应针对新的错误代码PRODUCE_FENCED进行碰撞。

  • [kafka-10755] - 在计算下一次提交时间戳时,应考虑提交延迟。

  • [kafka-10758] - 当添加一个新的主题时,从模式中消耗的Kafka流会进入PENDING_SHUTDOWN。

  • [kafka-10799] - AlterIsr路径不更新ISR的收缩/扩展表。

  • [kafka-10811] - 系统退出MirrorConnectorsIntegrationTest#testReplication

  • [kafka-10813] - StreamsProducer应该捕获InvalidProducerEpoch并在所有情况下抛出TaskMigrated。

##任务

  • [kafka-10068] - 验证HighAvailabilityTaskAssignor在大型集群和拓扑结构下的性能
  • [kafka-10084] - 系统测试失败。StreamsEosTest.test_failure_and_recovery_complex
  • [kafka-10153] - 连接文档中的错误报告
  • [kafka-10341] - 为流和系统测试添加2.6版本
  • [kafka-10456] - kafka-console-producer.sh帮助中的错误描述
  • [kafka-10556] - 如果sasl.mechanism未被识别,则出现NPE。
  • [kafka-10592] - python3合并后系统测试无法运行
  • [kafka-10669] - ListOffsetRequest: make CurrentLeaderEpoch field ignorable and set MaxNumOffsets field to 1

##测试

  • [kafka-9273] - 重构AbstractJoinIntegrationTest和子类
  • [kafka-9943] - 在系统测试中启用TLSv.1.3 "运行所有 "执行。
  • [kafka-10191] - 修复闪烁的StreamsOptimizedTest
  • [kafka-10255] - 修理易碎的testOneWayReplicationWithAutorOffsetSync1测试
  • [kafka-10286] - 连接系统测试应等待工作者加入小组
  • [kafka-10295] - ConnectDistributedTest.test_bounce应该等待优雅的停止。
  • [kafka-10351] - 为GlobalStateManagerImpl添加缺失的IOExceptions测试
  • [kafka-10404] - Flaky Test kafka.api.SaslSslConsumerTest.testCoordinatorFailover

子任务

  • [kafka-9432] - 用自动协议替换DescribeConfigs请求/响应
  • [kafka-9434] - 用自动协议替换AlterReplicaLogDirs请求/响应
  • [kafka-9627] - 用自动协议替换ListOffset请求/响应
  • [kafka-9629] - 用自动协议替换Fetch请求/响应
  • [kafka-9911] - 实施新的生产者围栏错误
  • [kafka-10027] - 实现功能版本计划的读取路径
  • [kafka-10028] - 实现特征版本计划的写路径
  • [kafka-10042] - 使INVALID_PRODUCER_EPOCH可从Produce响应中中止。
  • [kafka-10163] - 实施经纪商方面的变化
  • [kafka-10164] - 实施管理员方面的更改
  • [kafka-10174] - 倾向于使用kafka_configs.sh进行 --bootstrap-server ducktape测试
  • [kafka-10213] - 在Kafka客户端的ducktape测试中首选--bootstrap-server
  • [kafka-10258] - 摆脱kafka.py公共方法中的use_zk_connection标志。
  • [kafka-10261] - 引入带垫片的KIP-478处理器
  • [kafka-10270] - 在控制器通道管理器中添加一个经纪人,以重定向AlterConfig
  • [kafka-10308] - 修复易碎的core/round_trip_fault_test.py
  • [kafka-10319] - 修复Trunk上的未知偏移量和
  • [kafka-10379] - 实现KIP-478的StreamBuilder#addGlobalStore()
  • [kafka-10435] - 为KIP-595修改获取协议
  • [kafka-10437] - KIP-478:实施测试-实用程序变更
  • [kafka-10447] - 将工具模块迁移到JUnit 5
  • [kafka-10516] - 实施Topic Command变更
  • [kafka-10535] - KIP-478:实现StateStoreContext和Record
  • [kafka-10536] - KIP-478:实现KStream变更
  • [kafka-10562] - KIP-478:将存储包装器委托给新的init方法
  • [kafka-10570] - 重命名KIP-629的JMXReporter配置
  • [kafka-10571] - 将KIP-629的blackout的出现替换为backoff的出现
  • [kafka-10572] - 为KIP-629重命名MirrorMaker 2的黑名单配置。
  • [kafka-10573] - 重命名KIP-629的连接转换配置
  • [kafka-10599] - 实现功能版本系统的基本CLI工具
  • [kafka-10605] - KIP-478:废止被替换的处理器API成员