2024年7月29日,Kafka 3.8.0发布。
以下是Kafka 3.8.0版本中解决JIRA问题的摘要,有关该版本的完整文档,入门指南以及关于该项目的信息,请参考Kafka官方文档,或kafka中文教程。
关于升级的注意事项:在升级集群之前,请仔细阅读此版本的升级文档。升级有关不兼容性和破坏性的变更,性能变化以及可能影响Kakfa生产的任何其他变化。
新功能
[KAFKA-10892] - 新增 `Topology#connectSourceStoreAndTopic` 作为公共方法
[KAFKA-15045] - 将 Streams 任务分配器移至公共配置
[KAFKA-15444] - KIP-974:基于 GraalVM 的原生 Kafka Broker 的 Docker 镜像
[KAFKA-15942] - 实现 `ConsumerInterceptor`
[KAFKA-16373] - 为 Apache Kafka 提供官方 Docker 镜像
改进
[KAFKA-7632] - 支持压缩级别
[KAFKA-7663] - 自定义处理器在 `addGlobalStore` 时没有在从主题恢复状态时被使用
[KAFKA-9401] - `kafka.server.FetchManager.newContext` 中的高锁争用
[KAFKA-10199] - 将状态恢复分离到独立的线程中
[KAFKA-12399] - 弃用 Log4J Appender(KIP-719)
[KAFKA-14041] - 在 `ConfigTransformer` 中避免使用 `var` 关键字声明变量
[KAFKA-14246] - 更新 `Consumer` 的线程模型
[KAFKA-14747] - 外键连接应记录丢弃的订阅响应
[KAFKA-14822] - 允许限制 `File` 和 `Directory ConfigProviders` 到特定路径
[KAFKA-15349] - 当 `gradlew systemTestLibs` 失败时,`ducker-ak` 应快速失败
[KAFKA-15420] - Kafka 分层存储 V1
[KAFKA-15517] - 在授权错误情况下改进 `MirrorMaker` 日志
[KAFKA-15541] - 改进 `StateStore` 迭代器度量以检测泄漏
[KAFKA-15625] - 不在每次提交时刷新全局状态存储
[KAFKA-15878] - KIP-768:扩展对 SASL/OAUTHBEARER 中不透明(即非 JWT)令牌的支持
[KAFKA-15905] - `MirrorCheckpointTask` 的重启不应永久中断偏移转换
[KAFKA-15948] - 重构 `AsyncKafkaConsumer` 的关闭操作
[KAFKA-15949] - 改进与 `KRaft` 元数据版本相关的消息
[KAFKA-15951] - `MissingSourceTopicException` 应包含主题名称
[KAFKA-15974] - 强制事件处理遵循用户提供的超时
[KAFKA-15996] - JSON 序列化器太慢
[KAFKA-16021] - 提前加载 `StringSerializer/StringDeserializer` 的 `Charset`
[KAFKA-16093] - 关于空路径注释和未实现提供者接口的提供者,错误记录到 `stderr` 的虚假警告
[KAFKA-16100] - 为所有 `CompletableApplicationEvents` 添加超时
[KAFKA-16104] - 为新的消费者启用额外的 `PlaintextConsumerTest` 测试
[KAFKA-16113] - `AsyncKafkaConsumer`:添加缺失的偏移提交度量
[KAFKA-16115] - `AsyncKafkaConsumer`:添加缺失的心跳度量
[KAFKA-16116] - `AsyncKafkaConsumer`:添加缺失的再平衡度量
[KAFKA-16161] - 避免在分区数据目录中创建远程日志元数据快照文件
[KAFKA-16166] - 泛型化 `RetryWithToleranceOperator` 和 `ErrorReporter`
[KAFKA-16200] - 强制 `RequestManager` 实现遵循用户提供的超时
[KAFKA-16202] - 生产者错误消息中的额外点
[KAFKA-16204] - 在运行核心测试时创建的无关文件 `core/00000000000000000001.snapshot`
[KAFKA-16210] - 升级 `jose4j` 到 0.9.4
[KAFKA-16238] - 在 KIP-1004 之后 `ConnectRestApiTest` 失败
[KAFKA-16239] - 清理对不存在的 `IntegrationTestHelper` 的引用
[KAFKA-16246] - 清理 `ConsoleConsumer` 中的引用
[KAFKA-16280] - 暴露用于确定度量可测量性的方法
[KAFKA-16285] - 当在异步 Kafka 消费者中设置新分配时,提供组元数据
[KAFKA-16325] - 将缺失的生产者度量添加到文档中
[KAFKA-16343] - 改进对 `streams foreignkeyjoin` 包的测试
[KAFKA-16391] - 服务器关闭后清理 `.lock` 文件
[KAFKA-16393] - `SslTransportLayer` 未正确实现 `write(ByteBuffer[], int, int)`
[KAFKA-16397] - 使用 `ByteBufferOutputStream` 避免数组复制
[KAFKA-16399] - 在分层存储中添加 JBOD 支持
[KAFKA-16415] - 修复 `ConsumerGroupCommand` 中 `--version` 选项的处理
[KAFKA-16416] - 使用 `NetworkClientTest` 替代 `RequestResponseTest`,作为 log4j 输出示例
[KAFKA-16445] - 为连接器配置添加 PATCH 方法
[KAFKA-16455] - 在 `ReassignPartitionsCommand` 中检查分区是否存在,然后发送重新分配请求
[KAFKA-16463] - 自动删除 ZK broker 上的元数据日志目录
[KAFKA-16467] - 为 `docs` 文件夹添加 README
[KAFKA-16477] - 在测试中检测线程泄漏的 `client-metrics-reaper`
[KAFKA-16490] - 将 `gradle` 从 8.6 升级到 8.7
[KAFKA-16507] - 在 `RecordDeserialisationException` 中添加原始记录
[KAFKA-16513] - 允许使用 `Alter Cluster Permission` 的 `WriteTxnMarkers` API
[KAFKA-16544] - `DescribeTopicsResult#allTopicIds` 和 `DescribeTopicsResult#allTopicNames` 应返回 `null` 而不是抛出 `NPE`
[KAFKA-16548] - 当我们只想从远程存储中找到匹配的记录时,避免解压缩/收集所有记录
[KAFKA-16549] - 抑制 `RemoteLogManager` 中的警告
[KAFKA-16552] - 在 `LogManager` 中创建控制 `InitialTaskDelayMs` 的内部配置,以加速测试
[KAFKA-16560] - 重构/清理 `BrokerNode/ControllerNode/ClusterConfig`
[KAFKA-16572] - 允许在 `ClusterTest` 中定义每个 broker 的磁盘数量
[KAFKA-16573] - Streams 未指定何处需要 `Serde`
[KAFKA-16591] - RaftClusterInvocationContext 应在停止时清除管理员队列
[KAFKA-16593] - 使用 ClusterTestExtensions 重写 DeleteConsumerGroupsTest
[KAFKA-16598] - 迁移 `ResetConsumerGroupOffsetTest` 到新的测试基础设施
[KAFKA-16610] - 将 "Map#entrySet#forEach" 替换为 "Map#forEach"
[KAFKA-16614] - 禁止使用 `@ClusterTemplate("")`
[KAFKA-16627] - 删除 BeforeEach 和 AfterEach 中的 ClusterConfig 参数
[KAFKA-16640] - 用 scala.util.Using 替换 TestUtils#resource
[KAFKA-16647] - 从 BrokerNode/ControllerNode 中移除 setMetadataDirectory
[KAFKA-16654] - 重构 kafka.test.annotation.Type 和 ClusterTestExtensions
[KAFKA-16660] - 减少检查间隔以加速 DelegationTokenRequestsTest
[KAFKA-16668] - 允许通过 `ClusterTest` 设置标签
[KAFKA-16676] - 安全文档缺少 KIP-714 和 KIP-1000 中的 RPCs
[KAFKA-16677] - 用 Array 替换 ClusterType#ALL 和 ClusterType#DEFAULT
[KAFKA-16685] - RLMTask 警告日志不包括父异常跟踪
[KAFKA-16763] - 升级到 scala 2.12.19 和 scala 2.13.14
[KAFKA-16787] - 从 AsyncKafkaConsumer 的热路径中移除 TRACE 级别日志
[KAFKA-16797] - 清理 FeatureControlManager
[KAFKA-16844] - ByteArrayConverter 无法转换 ByteBuffer
[KAFKA-16911] - Kafka Streams 拓扑优化文档不完整
[KAFKA-16935] - 在嵌入式 Connect 集成测试中自动等待集群启动
[KAFKA-17165] - 重新审视 LeaderEpochFileCache#writeToFileForTruncation
Bug
[KAFKA-5863] - `DistributedHerder#reconfigureConnector()` 中潜在的空引用解引用问题
[KAFKA-6527] - `DynamicBrokerReconfigurationTest.testDefaultTopicConfig` 中的瞬态失败
[KAFKA-7957] - `DynamicBrokerReconfigurationTest#testMetricsReporterUpdate` 不稳定的测试
[KAFKA-8206] - 当集群部分重启时,消费者无法发现新的组协调器
[KAFKA-9228] - 重新配置的转换器和客户端可能不会传递到连接器任务
[KAFKA-12679] - 重新平衡恢复中或正在运行的任务可能导致目录活锁,涉及新创建的任务
[KAFKA-13295] - 新任务的长时间恢复可能导致事务超时
[KAFKA-13328] - Connect 在每个连接器头转换器上未执行预检验证
[KAFKA-13329] - Connect 在每个连接器键和值转换器上未执行预检验证
[KAFKA-13907] - 修复 `ServerShutdownTest.testCleanShutdownWithKRaftControllerUnavailable` 挂起问题
[KAFKA-13922] - 无法生成整个项目的覆盖率报告
[KAFKA-13950] - 代码中多个地方的资源泄漏
[KAFKA-14089] - `ExactlyOnceSourceIntegrationTest.testSeparateOffsetsTopic` 不稳定的测试
[KAFKA-14404] - 修复并更新 Streams 客户端配置的文档
[KAFKA-14957] - `state.dir` 默认值令人困惑
[KAFKA-15018] - 精确一次源连接器的潜在墓碑偏移量损坏
[KAFKA-15170] - `CooperativeStickyAssignor` 无法正确调整分配
[KAFKA-15250] - `ConsumerNetworkThread` 正在运行紧密循环
[KAFKA-15305] - 背景线程应该尝试处理剩余任务直到关闭计时器过期
[KAFKA-15417] - `JoinWindow` 在 `KStream - KStream - LeftJoin()` 中似乎无法正常工作
[KAFKA-15475] - 即使用户 API 超时过期,请求也可能无限重试
[KAFKA-15610] - 修复 `CoreUtils.swallow()` 测试缺口
[KAFKA-15760] - `org.apache.kafka.trogdor.coordinator.CoordinatorTest.testTaskRequestWithOldStartMsGetsUpdated` 不稳定的测试
[KAFKA-15770] - `org.apache.kafka.streams.integration.ConsistencyVectorIntegrationTest.shouldHaveSamePositionBoundActiveAndStandBy` 不稳定的测试
[KAFKA-15804] - 启动时从 `ZkConfigManager` 抛出异常时,Broker 泄漏 `ServerSocketChannel`
[KAFKA-15816] - 测试中出现错别字泄漏网络套接字
[KAFKA-15823] - `NodeToControllerChannelManager`:身份验证错误阻止控制器更新
[KAFKA-15827] - `KafkaBasedLog.withExistingClients` 如果未调用 `start` 方法则泄漏客户端
[KAFKA-15834] - 订阅不存在的主题阻止 `StreamThread` 停止
[KAFKA-15848] - 设计解决方案以解决消费者委托超时策略之间的不一致
[KAFKA-15915] - 不稳定的测试 - `testUnrecoverableError` - `ProducerIdManagerTest`
[KAFKA-15950] - 序列化 Broker 心跳请求
[KAFKA-15964] - 不稳定的测试:`testHighAvailabilityTaskAssignorLargeNumConsumers` - `org.apache.kafka.streams.processor.internals.StreamsAssignmentScaleTest`
[KAFKA-16003] - 在“双写”模式下,KRaft 迁移期间的 `znode /config/topics` 未更新
[KAFKA-16009] - 修复 `PlaintextConsumerTest.testMaxPollIntervalMsDelayInRevocation`
[KAFKA-16015] - `kafka-leader-election` 超时值总是被默认值覆盖
[KAFKA-16025] - Streams `StateDirectory` 在重新平衡后有孤立的锁,阻止未来的重新平衡
[KAFKA-16047] - 启用 EOS 的源连接器有些 `InitProducerId` 请求超时,导致所有任务和整个连接器失败
[KAFKA-16051] - 连接器初始化时死锁
[KAFKA-16052] - Kafka 测试套件中的 OOM
[KAFKA-16055] - 在 `QueryableStoreProvider#storeProviders` 中线程不安全地使用 `HashMap`
[KAFKA-16073] - Kafka 分层存储:由于段删除延迟的 `Consumer Fetch Error`
[KAFKA-16083] - 在连接上过期请求时排除节流时间
[KAFKA-16087] - 任务在 `errors.tolerance=all` 和异步报告错误的情况下丢弃不正确的记录
[KAFKA-16089] - Kafka Streams 仍然泄漏内存
[KAFKA-16105] - 分层主题的重新分配由于 `RemoteStorageException` 失败
[KAFKA-16152] - 修复 `PlaintextConsumerTest.testStaticConsumerDetectsNewPartitionCreatedAfterRestart`
[KAFKA-16155] - 调查 `testAutoCommitIntercept`
[KAFKA-16167] - 修复 `PlaintextConsumerTest.testAutoCommitOnCloseAfterWakeup`
[KAFKA-16169] - `commitAsync` 中的 `FencedException` 未通过回调传播
[KAFKA-16178] - `AsyncKafkaConsumer` 在重新发现组协调器后不重试加入组
[KAFKA-16191] - 清理消费者客户端内部事件
[KAFKA-16196] - `Cast transform` 在处理无效的整体值转换时不够优雅
[KAFKA-16197] - Connect Worker 轮询超时打印消费者轮询超时特定警告
[KAFKA-16198] - 在主题元数据延迟时,重新协调可能丢失分区
[KAFKA-16203] - 空偏移量的自动提交阻塞后续请求由于在途标志
[KAFKA-16206] - `KRaftMigrationZkWriter` 尝试删除已删除的主题配置两次
[KAFKA-16209] - 如果主题在 v2.8 之前创建,则 `fetchSnapshot` 可能返回 `null`
[KAFKA-16217] - 事务性生产者在关闭期间卡在 `IllegalStateException` 中
[KAFKA-16222] - KRaft 迁移:迁移客户端配额时对实体名称进行反污名化
[KAFKA-16226] - Java 客户端:高分区计数的 Trogdor 基准测试中的性能回归
[KAFKA-16243] - 空闲 `kafka-console-consumer` 使用新消费者组协议预emptively 离开组
[KAFKA-16252] - 不对齐的度量格式
[KAFKA-16261] - `MembershipManagerImpl.updateSubscription` 如果订阅已经为空则失败
[KAFKA-16277] - `CooperativeStickyAssignor` 不均匀地在消费者组中分配主题
[KAFKA-16278] - 缺少 Scala 相关依赖的许可证
[KAFKA-16286] - KRaft 并不总是通知监听器最新的领导者
[KAFKA-16288] - `Values.convertToDecimal` 在 String 输入上抛出 `ClassCastExceptions`
[KAFKA-16289] - Values.parseString 在处理异构列表和映射时有时会通过推断错误的模式损坏数据
[KAFKA-16305] - SslTransportLayer:handshakeUnwrap 的优化导致 TLS 握手停止
[KAFKA-16310] - ListOffsets 不再报告具有 maxTimestamp 的偏移量
[KAFKA-16312] - ConsumerRebalanceListener.onPartitionsAssigned() 即使为空,也应在加入后调用
[KAFKA-16318] - 为 KafkaMetric 添加 javadoc
[KAFKA-16319] - 当涉及多个主题且主题/分区由不同的代理领导时,DeleteRecords 请求的代理目标错误
[KAFKA-16322] - 通过将 jline 从 3.22.0 更新到 3.25.1 修复 CVE-2023-50572
[KAFKA-16323] - 失败的测试:修复 testRemoteFetchExpiresPerSecMetric
[KAFKA-16347] - 将 ZooKeeper 升级到 3.8.4
[KAFKA-16349] - ShutdownableThread 通过调用 Exit 并发条件失败
[KAFKA-16352] - 事务可能卡在 PrepareCommit 或 PrepareAbort 状态
[KAFKA-16358] - 更新 Connect Transformation 文档
[KAFKA-16359] - 发布到 Maven Central 的 kafka-clients-3.7.0.jar 有缺陷
[KAFKA-16369] - 当 SocketServer 绑定失败时,代理可能不会关闭,地址已在使用中
[KAFKA-16371] - 在触发提交后,提交的偏移量不稳定,因为某些分区的元数据超出限制
[KAFKA-16381] - 使用 volatile 来保证 KafkaMetric#config 在跨线程中的可见性
[KAFKA-16385] - 段在达到 segment.ms 或 segment.bytes 之前滚动
[KAFKA-16386] - 来自事务验证的 NETWORK_EXCEPTION 未被转换
[KAFKA-16389] - consumer_test.py 的 test_valid_assignment 在新消费者上失败
[KAFKA-16392] - 虚假的日志警告:“忽略偏移分区键格式意外的第二个元素。预期类型:java.util.Map,实际类型:null”
[KAFKA-16405] - 在运行消费者滚动升级系统测试时,分配错误
[KAFKA-16408] - kafka-get-offsets / GetOffsetShell 不处理 --version 或 --help
[KAFKA-16410] - kafka-leader-election / LeaderElectionCommand 在出错时不设置退出代码
[KAFKA-16411] - 在 KRaft 迁移中正确迁移默认客户端配额实体
[KAFKA-16424] - 截断的日志在更改目录完成后未被删除
[KAFKA-16427] - 当组协议为 CONSUMER 时,KafkaConsumer#position() 不尊重超时
[KAFKA-16428] - 修复在迁移期间可能不会创建配置更改通知 znode 的错误
[KAFKA-16433] - 当提供零超时时,beginningOffsets 和 offsetsForTimes 行为不一致
[KAFKA-16435] - 为 KAFKA-16428 添加测试
[KAFKA-16447] - 修复失败的 ReplicaManagerTest
[KAFKA-16459] - 新消费者在 consumer_test.py 系统测试中因加入组超时而失败
[KAFKA-16461] - 新消费者在 security_test.py 系统测试中无法消费记录
[KAFKA-16465] - 新消费者未按预期调用 consumer_test.py 系统测试中的再平衡回调
[KAFKA-16466] - QuorumController 吞掉了一些异常消息
[KAFKA-16471] - SslTransportLayer 可能会泄漏 SSLEngine 资源
[KAFKA-16473] - KafkaDockerWrapper 在格式化日志目录时使用了错误的集群 ID
[KAFKA-16474] - AsyncKafkaConsumer 可能会在未等待响应的情况下发送心跳请求
[KAFKA-16511] - 分层段泄漏
[KAFKA-16539] - 在迁移模式前无法更新特定代理配置
[KAFKA-16541] - 操作系统崩溃时可能导致领导者时期检查点文件损坏
[KAFKA-16555] - 消费者的 RequestState 确定是否处于飞行中的逻辑不正确
[KAFKA-16556] - SubscriptionState 不应过早重置“挂起”分区
[KAFKA-16563] - 迁移到 KRaft 时在 MigrationClientException 后挂起
[KAFKA-16565] - 当尝试删除未分配的分区时,IncrementalAssignmentConsumerEventHandler 抛出错误
[KAFKA-16566] - 更新消费者静态成员资格隔离系统测试以支持新协议
[KAFKA-16570] - FenceProducers API 成功时返回“意外错误”
[KAFKA-16577] - 新消费者在 consumer_test.py 系统测试中超时后停止失败
[KAFKA-16583] - 从 3.4.0 升级到 3.7.0 时,在 Kraft 模式下写入失败
[KAFKA-16588] - 当 `log.segment.delete.delay.ms` 为零时,代理关闭挂起
[KAFKA-16592] - ConfigKey 构造函数更新可能会破坏使用它的客户端
[KAFKA-16606] - KRaft 中的 JBOD 支持似乎未受元数据版本限制
[KAFKA-16608] - AsyncKafkaConsumer 不尊重 KafkaConsumer.poll(Duration) 上的中断线程状态
[KAFKA-16609] - 更新 parse_describe_topic 以支持新的主题描述输出
[KAFKA-16622] - Mirromaker2 在消费组完全赶上之前不会发出第一个检查点
[KAFKA-16637] - AsyncKafkaConsumer 过于激进地从缓存中移除偏移量获取响应
[KAFKA-16639] - AsyncKafkaConsumer#close 不发送心跳以离开组
[KAFKA-16659] - 当组协议为 CONSUMER 时,KafkaConsumer#position() 不尊重唤醒
[KAFKA-16692] - InvalidRequestException: ADD_PARTITIONS_TO_TXN 版本 4 未启用,升级时从 kafka 3.5 到 3.6
[KAFKA-16705] - 即使集群已启动,RaftClusterInstance 的“started”标志仍为 false
[KAFKA-16709] - 在代理内更改 logDir 可能导致日志清理挂起
[KAFKA-16739] - 从聚合 JavaDocs 中排除受保护的变量
[KAFKA-16757] - 修复围绕 MV 3.7-IV2 的代理重新注册问题
[KAFKA-16759] - 在消费者关闭时,客户端遥测转换无效
[KAFKA-16764] - 新消费者在元数据中存在无效主题时应在轮询时抛出 InvalidTopicException
[KAFKA-16766] - 新消费者 offsetsForTimes 超时异常消息错误
[KAFKA-16777] - 如果没有重置策略,新消费者应在连续轮询零时抛出 NoOffsetForPartitionException
[KAFKA-16786] - 新消费者不应要求弃用的 partition.assignment.strategy
[KAFKA-16790] - 在配置之前对 RemoteLogManager 的调用
[KAFKA-16794] - 无法在流文档中打开视频
[KAFKA-16807] - DescribeLogDirsResponseData#results#topics 包含意外的没有分区的主题
[KAFKA-16814] - 当 `partition.metadata` 缺失时,KRaft 代理无法启动
[KAFKA-16824] - Utils.getHost 和 Utils.getPort 未捕获大量无效主机和端口
[KAFKA-16833] - Cluster 缺少 topicIds 的 equals 和 hashCode,PartitionInfo 缺少 equals 和 hashCode
[KAFKA-16837] - Kafka Connect 在更新错误的先前配置提供程序任务时失败
[KAFKA-16838] - Kafka Connect 从已删除的连接器中加载旧任务
[KAFKA-16858] - Flatten SMT 抛出 NPE
[KAFKA-16861] - 如果大小超过组最大大小,请勿转换为经典组
[KAFKA-16886] - 在升级到 3.7.0 后,KRaft 分区重新分配失败
[KAFKA-16888] - 修复失败的 StorageToolTest.testFormatSucceedsIfAllDirectoriesAreAvailable 和 StorageToolTest.testFormatEmptyDirectory
[KAFKA-16890] - 在代理故障转移时构建辅助状态失败
[KAFKA-16903] - 任务应考虑以前发生在不同任务上的生产者错误
[KAFKA-16933] - 新消费者离开组流程可能不会发送离开请求并清除纪元
[KAFKA-16946] - Utils.getHost/getPort 无法解析 SASL_PLAINTEXT://host:port
[KAFKA-16948] - 成为跟随者时重置层滞后指标
[KAFKA-16954] - 将消费者关闭时的离开操作移动到后台线程
[KAFKA-16969] - 设置多个日志目录时,KRaft 无法升级到 v3.7.1 及更高版本
[KAFKA-16977] - 代理重启后,远程日志管理器的动态配置不可用
[KAFKA-16988] - ConnectDistributedTest 系统测试中的资源不足错误
[KAFKA-17083] - 系统测试中 KRaft 升级失败
[KAFKA-17085] - Streams 协作再平衡升级测试在系统测试中失败
[KAFKA-17098] - RocksDBStore 打开时出错
[KAFKA-17148] - Kafka 存储工具打印 MetaPropertiesEnsemble
[KAFKA-17150] - Connect 转换器验证不接受类别名
任务
[KAFKA-10047] - 在 FloatSerializer 中不必要的类型扩展(从 int 到 long)
[KAFKA-13115] - 文档说明 doSend 可能会阻塞
[KAFKA-15575] - 防止连接器超出 tasks.max 配置
[KAFKA-15576] - 将 3.6.0 版本添加到 broker/client 和 streams 的升级/兼容性测试中
[KAFKA-15711] - LogRecoveryTest 中的 KRaft 支持
[KAFKA-15717] - LeaderEpochIntegrationTest 中的 KRaft 支持
[KAFKA-15719] - OffsetsForLeaderEpochRequestTest 中的 KRaft 支持
[KAFKA-15721] - DeleteTopicsRequestWithDeletionDisabledTest 中的 KRaft 支持
[KAFKA-15723] - ListOffsetsRequestTest 中的 KRaft 支持
[KAFKA-15726] - ProduceRequestTest 中的 KRaft 支持
[KAFKA-15728] - DescribeUserScramCredentialsRequestNotAuthorizedTest 中的 KRaft 支持
[KAFKA-15729] - GetOffsetShellTest 中的 KRaft 支持
[KAFKA-15735] - SaslMultiMechanismConsumerTest 中的 KRaft 支持
[KAFKA-15738] - ConsumerWithLegacyMessageFormatIntegrationTest 中的 KRaft 支持
[KAFKA-15740] - DeleteOffsetsConsumerGroupCommandIntegrationTest 中的 KRaft 支持
[KAFKA-15741] - DescribeConsumerGroupTest 中的 KRaft 支持
[KAFKA-15742] - GroupCoordinatorIntegrationTest 中的 KRaft 支持
[KAFKA-15743] - ReplicationQuotasTest 中的 KRaft 支持
[KAFKA-15747] - DynamicConnectionQuotaTest 中的 KRaft 支持
[KAFKA-15750] - KafkaMetricReporterExceptionHandlingTest 中的 KRaft 支持
[KAFKA-15776] - 更新 DelayedRemoteFetch 请求的延迟超时时间
[KAFKA-16004] - 审查新的消费者在飞行中的偏移提交逻辑
[KAFKA-16112] - 审查 Async Consumer 中的 JMX 指标,并确定遗漏的指标
[KAFKA-16137] - ListClientMetricsResourcesResponse 定义缺少字段描述
[KAFKA-16146] - 远程日志启用主题的 checkpoint log-start-offset
[KAFKA-16356] - 移除 RemoteLogMetadataSerde 中的 class-name 调度
[KAFKA-16362] - 修复 KStreamKStreamJoin 中由于 isLeftSide 引起的类型不安全问题
[KAFKA-16406] - 拆分长时间运行的消费者集成测试
[KAFKA-16409] - kafka-delete-records / DeleteRecordsCommand 应使用标准异常处理
[KAFKA-16452] - 将 highwatermark 偏移量限制在 local-log-start-offset 和 log-end-offset 之间
[KAFKA-16457] - 无用的导入类
[KAFKA-16493] - 如果元数据版本未更改,则避免不必要的订阅正则表达式检查
[KAFKA-16528] - 在请求发送时重置成员心跳间隔
[KAFKA-16579] - 还原 consumer_rolling_upgrade_test.py 中对新异步消费者的更改
[KAFKA-16605] - 修复 flaky 的 LogCleanerParameterizedIntegrationTest
[KAFKA-16645] - 3.7.0 Docker 镜像中的 CVE 漏洞
[KAFKA-16665] - 在新的消费者中无法从 onPartitionsAssigned 回调中获取分区的位置
[KAFKA-16675] - 将 rebalance 回调测试移动到回调测试文件中
[KAFKA-16695] - 通过显示超出时间来改进过期的轮询间隔日志记录
[KAFKA-16696] - 移除 RSM 和 RLMM 的内存实现
[KAFKA-16771] - 格式化存储时首次打印的日志目录重复
[KAFKA-16815] - 处理新的消费者心跳中的 FencedInstanceId
[KAFKA-16825] - Jetty 和 netty 中的 CVE 漏洞
[KAFKA-16826] - 将 Native Kafka Docker 镜像集成到 GitHub Actions 中
[KAFKA-16827] - 将 Native Apache Kafka 与系统测试集成
[KAFKA-16865] - KIP-966 后 Admin.describeTopics 行为的变化
[KAFKA-16881] - 初始状态类型泄露到 Connect REST API OpenAPI 规范中
[KAFKA-16932] - Native Docker 镜像的文档更改
[KAFKA-17050] - 恢复 3.8 和 3.9 版本的 group.version
测试
[KAFKA-15140] - 改进 TopicCommandIntegrationTest 以减少不稳定性
[KAFKA-15206] - 不稳定的测试 RemoteIndexCacheTest.testClose()
[KAFKA-15691] - 更新系统测试以使用 AsyncKafkaConsumer
[KAFKA-15692] - 新的集成测试以确保全面覆盖
[KAFKA-15897] - 不稳定的测试:testWrongIncarnationId() — kafka.server.ControllerRegistrationManagerTest
[KAFKA-16011] - 修复 PlaintextConsumerTest.testMultiConsumerSessionTimeoutOnClose
[KAFKA-16019] - 一些 PlaintextConsumer 测试似乎无法确定性地调用和验证消费者回调
[KAFKA-16023] - PlaintextConsumerTest 需要等待协调完成后再继续
[KAFKA-16037] - 更新 VerifiableConsumer 以支持 KIP-848 的组协议配置
[KAFKA-16048] - 测试失败 kafka.admin.ConfigCommandTest.shouldNotSupportAlterClientMetricsWithZookeeper
[KAFKA-16064] - 改进 ControllerApisTest
[KAFKA-16084] - 简化和去重 StandaloneHerderTest 的模拟
[KAFKA-16134] - kafka.api.PlaintextConsumerTest.testPerPartitionLagMetricsCleanUpWithSubscribe(String, String).quorum=kraft+kip848.groupProtocol=consumer 不稳定
[KAFKA-16135] - kafka.api.PlaintextConsumerTest.testPerPartitionLeadMetricsCleanUpWithSubscribe(String, String).quorum=kraft+kip848.groupProtocol=consumer 不稳定
[KAFKA-16230] - 更新 verifiable_consumer.py 以支持 KIP-848 的组协议配置
[KAFKA-16231] - 更新 consumer_test.py 以支持 KIP-848 的组协议配置
[KAFKA-16267] - 更新 consumer_group_command_test.py 以支持 KIP-848 的组协议配置
[KAFKA-16268] - 更新 fetch_from_follower_test.py 以支持 KIP-848 的组协议配置
[KAFKA-16269] - 更新 reassign_partitions_test.py 以支持 KIP-848 的组协议配置
[KAFKA-16270] - 更新 snapshot_test.py 以支持 KIP-848 的组协议配置
[KAFKA-16271] - 更新 consumer_rolling_upgrade_test.py 以支持 KIP-848 的组协议配置
[KAFKA-16273] - 更新 consume_bench_test.py 以支持 KIP-848 的组协议配置
[KAFKA-16274] - 更新 replica_scale_test.py 以支持 KIP-848 的组协议配置
[KAFKA-16275] - 更新 kraft_upgrade_test.py 以支持 KIP-848 的组协议配置
[KAFKA-16276] - 更新 transactions_test.py 以支持 KIP-848 的组协议配置
[KAFKA-16287] - 实现常见的再平衡回调场景的示例测试
[KAFKA-16293] - 测试 Kraft 中的日志目录失败
[KAFKA-16388] - 为 MetadataVersionTest.testFromVersionString 添加生产就绪测试 3.3 - 3.6 版本
[KAFKA-16413] - 为 FileLock 添加测试
[KAFKA-16438] - 更新 consumer_test.py 的静态测试以支持 KIP-848 的组协议配置
[KAFKA-16439] - 更新 replication_replica_failure_test.py 以支持 KIP-848 的组协议配置
[KAFKA-16440] - 更新 security_test.py 以支持 KIP-848 的组协议配置
[KAFKA-16472] - Java 中的集成测试未能真正运行 kraft 情形
[KAFKA-16482] - 消除接受 ClusterConfig 的 BeforeEach 中的 IDE 警告
[KAFKA-16483] - 将 `ClusterTestExtensions` 应用到 DeleteOffsetsConsumerGroupCommandIntegrationTest
[KAFKA-16484] - 支持通过 ClusterConfigProperty 定义每个 broker/controller 属性
[KAFKA-16487] - 支持通过 ClusterTestDefaults 定义服务器属性
[KAFKA-16559] - 允许在 TestKitNodes 中定义每个 broker 的磁盘数量
[KAFKA-16596] - 不稳定的测试 — org.apache.kafka.clients.ClientUtilsTest.testParseAndValidateAddressesWithReverseLookup()
[KAFKA-16613] - 移除 TestUtils#subscribeAndWaitForRecords
[KAFKA-16671] - 重新审视 SessionedProtocolIntegrationTest.ensureInternalEndpointIsSecured
[KAFKA-16678] - 从 EndToEndAuthorizationTest 中移除未实现的 quorum
[KAFKA-16679] - 将单元测试合并到集成测试类中
[KAFKA-16686] - TopicBasedRemoteLogMetadataManagerTest 中的不稳定测试
[KAFKA-16702] - KafkaLog4jAppenderTest 泄漏了生产者实例
[KAFKA-16703] - SocketServer 在端口已被使用时泄漏了 ServerSocketChannel
[KAFKA-16712] - 在 TopicBasedRemoteLogMetadataManagerMultipleSubscriptionsTest 中设置 RemoteLogMetadataTopicPartitioner 时的竞态条件
[KAFKA-16774] - 修复不稳定的 StreamThreadTest#shouldCloseAllTaskProducersOnCloseIfEosEnabled
[KAFKA-16783] - 将 RemoteLogMetadataManagerTest 迁移到新测试基础设施
[KAFKA-16784] - 将 TopicBasedRemoteLogMetadataManagerMultipleSubscriptionsTest 迁移到新测试基础设施
[KAFKA-16789] - 线程泄漏检测检查错误的 QuorumController 线程名称
[KAFKA-16828] - RackAwareTaskAssignorTest 失败
[KAFKA-16866] - RemoteLogManagerTest.testCopyQuotaManagerConfig 失败
[KAFKA-16961] - TestKRaftUpgrade 系统测试在 v3.7.1 RC1 中失败
[KAFKA-16990] - 系统测试中传递给 kafka-storage.sh 的未识别标志
子任务
[KAFKA-12187] - 在更新到 JUnit 5.8 时,将 `assertTrue(obj instanceof X)` 替换为 `assertInstanceOf`
[KAFKA-14505] - 实现 TnxOffsetCommit API
[KAFKA-14509] - 添加 ConsumerGroupDescribe API
[KAFKA-14576] - 将 ConsoleConsumer 移动到工具
[KAFKA-14589] - 将 ConsumerGroupCommand 移动到工具
[KAFKA-14683] - 在 WorkerSinkTaskTest 中用 Mockito 替换 EasyMock 和 PowerMock
[KAFKA-14701] - 将更多 broker 端分区分配器移到公共代码中
[KAFKA-15460] - 为 ListGroups API 添加组类型过滤器
[KAFKA-15462] - 为管理员客户端添加组类型过滤器
[KAFKA-15538] - 客户端支持基于 Java 正则表达式的订阅
[KAFKA-15807] - 添加对度量的压缩/解压缩支持
[KAFKA-15811] - 实现从 Socket Server 捕获客户端端口信息
[KAFKA-15813] - 改进客户端实例缓存的实现
[KAFKA-15832] - 基于管理器轮询触发客户端协调
[KAFKA-15882] - 每夜 GitHub Actions 工作流的 CVE 报告
[KAFKA-15989] - 升级现有的通用组为消费者组
[KAFKA-16016] - 将实用程序脚本迁移到 Kafka 代码库
[KAFKA-16032] - 审查 OffsetFetch 和 OffsetCommit 失败时抛出的客户端错误
[KAFKA-16033] - 审查 OffsetFetch 和 OffsetCommit 响应的客户端重试逻辑
[KAFKA-16034] - AsyncKafkaConsumer 在尝试重新加入时会收到无效请求错误
[KAFKA-16053] - 修复 Default DirectoryService 泄漏
[KAFKA-16058] - 修复 ControllerApiTest 中的泄漏
[KAFKA-16059] - 修复 ExpirationReaper-1-AlterAcls 线程在 :core:test 中的泄漏
[KAFKA-16062] - 升级 Mockito 到 5.8.0
[KAFKA-16063] - 修复 EndToEndAuthorizationTests 中的 ApplicationShutdownHooks 泄漏
[KAFKA-16065] - 修复 DelayedOperationTest 中的泄漏
[KAFKA-16082] - Broker 在 logdir 失败后重新创建分配的分区
[KAFKA-16095] - 更新 List Groups 状态类型过滤器以包括新消费者组类型的状态
[KAFKA-16103] - AsyncKafkaConsumer:在 commitSync 和 close 中始终等待异步提交回调
[KAFKA-16107] - 确保消费者在 onPartitionsAssigned 完成之前不会开始从添加的分区中获取数据
[KAFKA-16117] - 添加集成测试以检查是否选择了正确的分配器
[KAFKA-16147] - 分区同时分配给两个成员
[KAFKA-16148] - 实现 GroupMetadataManager#onUnloaded
[KAFKA-16156] - 新消费者在 endOffsets 上的负时间戳导致系统测试失败
[KAFKA-16165] - 消费者在过期轮询间隔上无效转换
[KAFKA-16168] - 实现 GroupCoordinator.onPartitionsDeleted
[KAFKA-16185] - 修复相同分配在不同周期中的客户端协调
[KAFKA-16186] - 实现 Broker 指标用于客户端遥测使用
[KAFKA-16189] - 扩展管理员以支持 ConsumerGroupDescribe API
[KAFKA-16190] - 成员重新加入时应发送完整的心跳
[KAFKA-16194] - KafkaConsumer.groupMetadata() 应在返回第一条记录时正确
[KAFKA-16207] - 为 KRaft 版本记录和投票者记录添加 KRaft 内部监听器
[KAFKA-16215] - 消费者在延迟撤销时被隔离后无法重新加入
[KAFKA-16224] - 修复在撤销前自动提交时处理已删除主题
[KAFKA-16227] - ConsoleConsumer 失败并抛出 `IllegalStateException`
[KAFKA-16234] - 日志目录故障在另一个 logdir 中自动重新创建分区
[KAFKA-16249] - 改进协调状态机
[KAFKA-16251] - 被隔离的成员在等待 onPartitionsLost 完成时不应发送心跳
[KAFKA-16258] - 过时的成员在离开组时应触发 onPartitionsLost
[KAFKA-16265] - 为 ListTransactionsRequest 添加 durationFilter
[KAFKA-16294] - 添加组协议迁移启用配置
[KAFKA-16297] - 在提升未来副本时的竞态条件可能导致分区不可用
[KAFKA-16298] - 确保用户回调异常在消费者轮询时传递给用户
[KAFKA-16306] - GroupCoordinatorService 记录器未配置
[KAFKA-16307] - 修复 EventAccumulator 线程空闲比率度量
[KAFKA-16313] - 离线组协议迁移
[KAFKA-16314] - 添加新的 ABORTABLE_ERROR
[KAFKA-16341] - 修复未压缩记录
[KAFKA-16342] - 修复压缩记录
[KAFKA-16363] - 如果目录不可用,存储工具崩溃
[KAFKA-16365] - AssignmentsManager 错误管理完成通知
[KAFKA-16367] - 完整的 ConsumerGroupHeartbeat 响应必须在收到完整请求时发送
[KAFKA-16374] - 高水位更新应具有更高优先级
[KAFKA-16375] - 修复成员重新加入时丢弃协调的逻辑
[KAFKA-16436] - 在线升级触发和组类型转换
[KAFKA-16470] - kafka-dump-log --offsets-decoder 应支持新记录
[KAFKA-16485] - 修复 broker 指标以遵循 kebab/hyphen 风格
[KAFKA-16486] - 将指标可测性更改集成到指标收集器中
[KAFKA-16515] - 修复 ZK Metadata 缓存使用的投票者静态配置
[KAFKA-16516] - 修复 controller 节点提供程序以控制 broker 通道
[KAFKA-16525] - 请求管理器和 raft 通道发现节点端点
[KAFKA-16526] - 更改 KIP-853 的法定状态
[KAFKA-16530] - 修复高水位计算,以不假设领导者在投票者集中
[KAFKA-16554] - 在线降级触发和组类型转换
[KAFKA-16568] - 为分配器性能测试添加 JMH 基准
[KAFKA-16587] - 将消费者组的订阅模型存储在组状态中
[KAFKA-16615] - 用于升级 ConsumerGroup 的 JoinGroup API
[KAFKA-16625] - 在分配器中反向查找分区到成员
[KAFKA-16626] - 在分配规范中将 UUID 转换为字符串以表示订阅的主题名称
[KAFKA-16646] - 仅在 apache/kafka 上运行 CVE 扫描器操作,而不是在 fork 中
[KAFKA-16663] - CoordinatorRuntime 写入定时器任务应在 HWM 前进后取消
[KAFKA-16664] - 重新添加 EventAccumulator.take(timeout)
[KAFKA-16694] - 暂时删除分配器中的机架感知代码以提高性能
[KAFKA-16722] - 添加 ConsumerGroupPartitionAssignor 接口
[KAFKA-16735] - 在 3.8 中弃用 offsets.commit.required.acks
[KAFKA-16762] - 用于升级 ConsumerGroup 的 SyncGroup API
[KAFKA-16770] - 将记录合并成更大的批次
[KAFKA-16793] - 用于升级消费者组的心跳 API
[KAFKA-16795] - 修复 `kafka.tools.NoOpMessageFormatter`、`kafka.tools.DefaultMessageFormatter` 和 `kafka.tools.LoggingMessageFormatter` 中的兼容性问题
[KAFKA-16796] - 引入新的 `org.apache.kafka.tools.api.Decoder`,以取代 `kafka.serializer.Decoder`
[KAFKA-16802] - 将 `build.gradle` 中的 Java 版本信息移动到 Java 块内
[KAFKA-16804] - 用 `archivesName` 替换 `gradle archivesBaseName`
[KAFKA-16805] - 停止使用 `ClosureBackedAction` 配置 Spotbugs 报告
[KAFKA-16821] - 创建一个新接口来存储成员元数据
[KAFKA-16831] - `CoordinatorRuntime` 应使用最大批次写入限制初始化 `MemoryRecordsBuilder`
[KAFKA-16832] - 用于升级消费者组的 `LeaveGroup` API
[KAFKA-16860] - 引入 `group.version` 功能标志
[KAFKA-16864] - 在优化的均匀分配器中使用写时复制
[KAFKA-16930] - 当成员没有订阅时,`UniformHeterogeneousAssignmentBuilder` 抛出空指针异常
[KAFKA-17142] - 修复 `LogManagerTest#testLogRecoveryMetrics` 导致的死锁
[KAFKA-17166] - 使用 `NoOpScheduler` 重写 `LogManagerTest#testLogRecoveryMetrics`