一. 前言
主要梳理kafka版本,后续研究的开始kafka做准备.
二. Kafka版本规则
,遵循 版本规则,其中Major大版本通常是一些重大变化,因此它们之间的功能可能不兼容;Minor小版本通常是一些新功能的增加;最后Patch修订版主要是为了修复一些关键点Bug发布版本。比如Kafka 2.1.大版本是2,小版本是1,Patch版本为1,是为修复Bug第一版发布。
三. Kafka版本演进
0.7.x版本
这是很老的Kafka版本,它只有基本的消息队列功能,甚至没有消息副本机制,不推荐使用。
0.8.x版本
两个重要特征,一个Kafka 0.8.二是增加了副本机制,二是Kafka 0.8.2.引入新版本Producer API。0.9.x版本
Kafka 0.9 是一个重大的版本迭代,增加了非常多的新特性,主要体现在三个方面:
:在0.9.0之前,Kafka安全考虑几乎为0。Kafka 0.9.0 支持安全认证、授权管理、数据加密等。Kerberos等。 :Kafka 0.9.0 重写并提供新版消费端API,也从连接中使用Zookeeper切到了连接Broker,但此时新版本Consumer API也不稳定,存在很多Bug,生产和使用可能更痛苦;0.9.0版本的Producer API相对稳定,生产使用问题不大。 :Kafka 0.9.0 引入新组件 Kafka Connect ,用于实现Kafka数据提取与其他外部系统。
0.10.x版本
Kafka 0.10 是一个重要的大版本,因为Kafka 0.10.0.0 引入了 ,使得Kafka它不再仅仅是一个消息引擎,而是一个分布式流处理平台。.10 大版本包括两个小版本:0.10.1 和 0.10.2.它们的主要功能变化是 Kafka Streams 组件上。
值得一提的是,自我 0.10.2.2 从版本开始,新版本 Consumer API 它已经相对稳定和稳定了 Producer API 性能也有所提高,所以用于使用 0.10.x 建议使用或升级大版本用户 Kafka 0.10.2.2 版本。
0.11.x版本
Kafka 0.11 这是一个里程碑式的大版本,主要有两个大的变化,一个是Kafka支持这个版本 Exactly-Once
语义是准确的一次语义,主要是实现的Producer对于终端消息的等性和事务特性,这是为了Kafka流式处理意义重大。
另一个重大变化是Kafka重构新闻格式
,Kafka 0.以实现为主Producer权力等级和事务特性重构了发送信息的数据结构。这是值得注意的,因为Kafka 0.11后的消息格式发生了变化,要特别注意Kafka不同版本之间的新闻格式不兼容。
1.x版本
Kafka 1.x 更多的是Kafka Streams方面的改进,以及Kafka Connect的改进与功能完善等
。但仍有两个重要特征,一是Kafka 1.0.0实现了磁盘故障转移,当Broker当磁盘损坏时,数据会自动转移到其他正常磁盘上
,Broker也会正常工作,直接导致之前版本中的工作Broker宕机,因此Kafka提高了可用性和可靠性;
二是Kafka 1.1.0开始支持副本跨路径迁移
,分区副本可以相同Broker移动不同磁盘目录间,对磁盘负载平衡具有重要意义。
2.x版本:
。 Kafka 2.1.0开始支持ZStandard压缩方法提高了新闻的压缩比,显著降低了磁盘空间和网络io消耗。
kafka2.8.x自我管理仲裁取代了版本ZooKeeper
2.x 版本特征概述
Kafka 2.0.0
- 简化 Kafka Streams 升级过程
- 修补多次 Kafka 分区主本迁移时日志分歧
- 降低信息格式向下转换时的内存消耗
- 加入消费者客户端的领先指标
- 加入更多 Kafka 控制器的健康指标
- 更全面的数据安全支持
- 访问控制细粒度前缀
- xxx
Kafka 2.1.0
[新功能]
- 重载StreamsBuilder接受施工方法
java.util.Properties
新功能 [KAFKA-7027] - 重载StreamsBuilder接受施工方法`java.util.Properties` 改进 [KAFKA-4514] - 为ZStandard加入压缩编解码器 [KAFKA-4932] - 增加UUID Serde [KAFKA-5886] - 介绍delivery.timeout.ms生成器配置(KIP-91) [KAFKA-5928] - 在重新分配主题分区时,避免重新分配主题分区zookeeper冗余请求 [KAFKA-6195] - DNS名称支持安全连接 [KAFKA-6432] - 查找索引可能会导致不必要的页面错误 [KAFKA-6437] - Streams不会警告缺少输入主题,而是挂起 [KAFKA-6591] - 在ACL评估之前,在SimpleAclProvider中移动对超级用户的检查 [KAFKA-6684] - 支持使用字节模式转换为字符串 [KAFKA-6751] - 使max.connections.per.ip.overrides成为动态配置 [KAFKA-6753] - 加速控制器上的事件处理 [KAFKA-6761] - 减少Kafka Streams足迹 [KAFKA-6863] - 如果第一个IP地址失败,Kafka客户端应尝试使用多个DNS解析的IP地址 [KAFKA-6880] - Zombie副本必须fenced [KAFKA-6884] - ConsumerGroupCommand使用新的AdminClient [KAFKA-6914] - Kafka Connect - Plugins类应该有一个可以接受父ClassLoader的构造函数 [KAFKA-6923] - 合并ExtendedSerializer/Serializer和ExtendedDeserializer/Deserializer [KAFKA-6926] - 减少Connect中的NPath异常 [KAFKA-6950] - 添加机制以延迟响应失败的客户端身份验证 [KAFKA-6978] - 使Streams窗口保留时间严格 [KAFKA-6986] - 通过Stream Threads导出Admin Client指标 [KAFKA-6998] - 如果cache-size配置为零字节,则删除缓存包装器存储 [KAFKA-6999] - 记录启用缓存的仓库的读写
锁使用情况 [KAFKA-7009] - 在系统测试中警告级别的reflections.org无日志 [KAFKA-7019] - 减少元数据更新和元数据读取操作之间的争用 [KAFKA-7101] - 会话窗口存储应该设置主题策略`compact,cleanup` [KAFKA-7117] - 允许AclCommand使用AdminClient API [KAFKA-7126] - 创建主题后,减少大型消费者组的重新平衡次数 [KAFKA-7131] - 更新发布脚本以生成公告电子邮件文本 [KAFKA-7147] - 允许kafka-reassign-partitions.sh和kafka-log-dirs.sh获取admin客户端属性文件 [KAFKA-7152] - 如果LEO等于leader的LEO,则副本应该是同步的 [KAFKA-7161] - KTable Reduce应检查无效条件 [KAFKA-7169] - 在OAuth身份验证中添加对自定义SASL扩展的支持 [KAFKA-7198] - 增强KafkaStreams启动方法javadoc [KAFKA-7207] - 使费率和总指标文档保持一致 [KAFKA-7210] - 添加系统测试以进行日志压缩 [KAFKA-7211] - MM应该在commitSync中处理超时 [KAFKA-7215] - 在出错时改进LogCleaner行为 [KAFKA-7222] - KIP-328:添加窗口宽限期(并弃用窗口保留) [KAFKA-7264] - 初始化的Kafka对Java 11的支持 [KAFKA-7266] - 修复MetricsTest测试片状 [KAFKA-7269] - KStream.merge没有文档 [KAFKA-7277] - 将Streams API迁移到Duration而不是longMs [KAFKA-7278] - replaceSegments()不应从已经删除的段列表中调用asyncDeleteSegment() [KAFKA-7285] - 在EOS下的任务暂停期间,流应该对防护更敏感 [KAFKA-7313] - 仅当将来的副本存在时,StopReplicaRequest才会尝试删除该分区的未来副本 [KAFKA-7326] - 让KStream.print()在每条打印行上刷新 [KAFKA-7332] - 尝试生成没有密钥的压缩主题的消息时改进错误消息 [KAFKA-7394] - 允许OffsetsForLeaderEpoch使用主题描述ACL(KIP-320)请求 [KAFKA-7395] - 将fencing添加到复制协议 (KIP-320) [KAFKA-7396] - KIP-365: Materialized, Serialized, Joined, Consumed and Produced使用隐式Serde [KAFKA-7399] - Streams-Scala中的FunctionConversions应该是私有的 [KAFKA-7406] - Naming Join 和 Grouping Repartition Topics [KAFKA-7414] - 在副本获取中,超出范围不应导致broker失败。 [KAFKA-7429] - 使用相同的文件名/密码启用动态密钥/信任库更新 [KAFKA-7430] - 改进Transformer接口JavaDoc [KAFKA-7437] - 在偏移提交元数据中存储leader epoch [KAFKA-7441] - 允许同时使用LogCleanerManager.resumeCleaning() [KAFKA-7454] - 对SslTransportLayer缓冲区使用延迟分配 [KAFKA-7456] - Streams DSL中的Serde继承 [KAFKA-7475] - 打印实际的集群引导程序 [KAFKA-7477] - 改进Streams关闭超时语义 [KAFKA-7559] - ConnectStandaloneFileTest系统测试未通过 其他略... 详情参考: https://www.orchome.com/1377
Kafka 2.2.0
[KAFKA-4217] - KStream.transform相当于flatMap [KAFKA-4453] - 添加请求优先级 [KAFKA-4850] - RocksDb无法使用Bloom Filters [KAFKA-5692] - 重构PreferredReplicaLeaderElectionCommand以使用AdminClient [KAFKA-5994] - 提高broker用户ACL错误配置的透明度 [KAFKA-6431] - 在Purgatory中锁定争用 [KAFKA-6567] - KStreamWindowReduce可以被KStreamWindowAggregate取代 [KAFKA-6774] - 改进使用者中的默认groupId行为 [KAFKA-6928] - StreamsPartitionAssignor在InternalTopicManager中进行双重重试 [KAFKA-7024] - 应在打开DB之前创建Rocksdb状态目录 [KAFKA-7054] - Kafka描述命令应抛出的主题不存在异常 [KAFKA-7096] - 消费者应该删除未分配的主题分区的数据 [KAFKA-7131] - 更新发布脚本以生成公告电子邮件文本 [KAFKA-7235] - 使用brokerZkNodeVersion可防止broker处理过时的控制器请求 [KAFKA-7266] - 修复MetricsTest测试片状 [KAFKA-7352] - KIP-368: 允许SASL连接定期重新进行身份验证 [KAFKA-7367] - 除非需要,否则Streams不应创建状态存储目录 [KAFKA-7389] - 升级spotBugs以支持Java 11 [KAFKA-7391] - 向Producer和AdminClient引入close(Duration),而不是close(long,TimeUnit) [KAFKA-7402] - Kafka Streams应该在适当的时候实现AutoCloseable [KAFKA-7413] - 用网站中的fllower替换slave术语 [KAFKA-7418] - 为所有可用的Kafka CLI命令添加'--help'选项(KIP-374) [KAFKA-7420] - 对于常规任务,全球商店应该被保密为只读 [KAFKA-7433] - 在TopicCommand中引入broker选项以使用AdminClient [KAFKA-7446] - 更好的错误消息来解释TimeWindow的上限 [KAFKA-7461] - 连接值转换器应具有逻辑类型的覆盖范围 [KAFKA-7478] - 减少OAuthBearerLoginModule详细程度 [KAFKA-7510] - KStreams RecordCollectorImpl在出错时将数据泄漏到日志中 [KAFKA-7524] - 推荐使用Scala 2.12并将其用于开发 [KAFKA-7528] - 标准化Min/Avg/Max Kafka指标的默认值 [KAFKA-7537] - 如果分区状态没有变化,则仅在发送给现有broker的UpdateMetadataRequest中包含实时broker [KAFKA-7567] - 清除内部元数据用法以确保一致性和可扩展性 [KAFKA-7568] - 在ListOffsets响应中返回leader epoch [KAFKA-7584] - 如果将max.in.flight.request.per.connect指定为String,StreamsConfig将抛出ClassCastException [KAFKA-7610] - 检测初始JoinGroup中的消费者故障 [KAFKA-7641] - 添加`consumer.group.max.size`以限制broker上的消费者元数据大小 [KAFKA-7671] - KStream/GlobalKTable连接不应重置重新分区标志 [KAFKA-7673] - 升级RocksDB以包含对WinEnvIO::GetSectorSize的修复 [KAFKA-7687] - Print batch level information in DumpLogSegments when deep iterating [KAFKA-7719] - 提高SocketServer处理器的公平性 [KAFKA-7734] - 度量
标签应使用LinkedHashMap来保证顺序 [KAFKA-7738] - 跟踪客户端元数据中的分区领导者epochs [KAFKA-7758] - When Naming a Repartition Topic with Aggregations Reuse Repartition Graph Node for Multiple Operations [KAFKA-7762] - KafkaConsumer在javadocs中使用旧API [KAFKA-7798] - 从KafkaStreams threadMetadata暴露嵌入式客户端上下文 [KAFKA-7804] - 更新KIP-377的文档 [KAFKA-7829] - Javadoc应该显示Kafka 1.1.0或更高版本中支持AdminClient.alterReplicaLogDirs() [KAFKA-7834] - 在系统测试服务中扩展收集的日志以包括heap dumps [KAFKA-7837] - maybeShrinkIsr可能不会立即反映OfflinePartitions [KAFKA-7838] - 改进Partition.maybeShrinkIsr()中的日志记录 [KAFKA-7880] - Kafka Connect应标准化工作线程名称 [KAFKA-7916] - Streams存储清理:统一包装 [KAFKA-8040] - Streams需要在initTransactions中处理超时
详情: https://www.orchome.com/1584
Kafka 2.3.0
Kafka Connect REST API的一些改进。 Kafka Connect现在支持增量协作重新平衡。 Kafka Streams现在支持内存session存储和window存储。 AdminClient现在允许用户确定他们有权对topic执行哪些操作。 新的broker启动时间指标。 JMXTool现在可以连接到安全的RMI端口。 增加了新的AlterConfigs API。旧的AlterConfigs API已被弃用。 追踪最小ISR计数下的分区。 消费者现在可以选择不自动topic创建,即使在broker上启用它也是一样。 Kafka组件现在可以使用外部配置存储(KIP-421)。 我们在遇到错误时实现了改进的副本拉取程序行为。
- 主要特性讲解 为了保证 Kafka 的数据安全,Kafka 在不同的 Broker 上创建了几个副本。除非分区具有最小数量的同步副本,否则 Kafka 将不允许继续写入,这被称为“最小ISR”。
Kafka 已经有指标可以显示分区数量少于同步副本的最小数量。在此版本中,KIP-427 添加了其他指标,显示具有最小同步副本数的分区。通过监视这些指标,用户可以看到哪些分区的副本将不足,从而影响写。
此外,KIP-351 将 –under-min-isr 标签添加到 kafka-topics 命令里面。这使用户可以轻松查看哪些主题的副本数量少于最小 ISR 数量。
对于一阶近似(first-order approximation),压缩主题中的键的先前值在写入最新密钥之后的某个时间被压缩,只有最新值可用,而以前的值不可用。但是,始终可以设置密钥在压缩之前保持的最短时间,因此我们不会太快丢失旧值。现在,使用 KIP-354,可以设置旧值将保持的最大时间量。新参数 max.log.compation.time.ms 指定旧值可能存在于压缩主题中的时间长度,这可用于遵守GDPR等数据保留规定。
以前,Kafka 会优先考虑在处理现有连接时打开新的 TCP 连接。如果客户端尝试在短时间内创建许多新连接,则可能会出现问题。KIP-402 将现有连接优先用于新连接,从而提高了 broker 对连接风暴的恢复能力。这个KIP 还为每个 broker 添加了 max.connections 参数。
为了使副本保持最新,每个 broker 都维护一个 Replica Fetcher 线程池。池中的每个线程负责为一些跟随者分区获取副本。以前,如果其中一个分区失败,整个线程将失败,从而导致可能数百个分区的副本不足。使用此KIP,如果给定副本提取程序线程管理的单个分区失败,则该线程将继续处理其余分区。
当 broker 在不正常关闭后启动时,它会检查日志以确保它们没有被破坏。此 JIRA 优化该过程,以便 Kafka 仅检查尚未显式刷新到磁盘的日志段。现在,日志恢复所需的时间不再与日志数成比例。相反,它与未刷新的日志段的数量成比例。Zhanxiang Huang 在 JIRA 上讨论的一些基准测试显示,broker 的启动时间缩短了50%。
原文: https://www.orchome.com/1710
Kafka 2.4.0
2019年12月16号,发布Kafka 2.4.0。
允许consumer从最近的副本中拉取。 支持对消费者重新平衡协议进行渐进式合作重新平衡。 MirrorMaker 2.0 (MM2), 新的多集群,跨数据中心复制引擎。 新的Java认证接口。 支持KTable中的非key连接。 副本重新分配的Administrative API
- 新功能
[KAFKA-3333] - 支持“ Always Round-Robin”分区的备用分区程序 [KAFKA-3705] - 在KTable中支持非key连接 [KAFKA-7471] - 多消费组组管理(描述,重置,删除) [KAFKA-7500] - MirrorMaker 2.0 (KIP-382) [KAFKA-7800] - 扩展Admin API以支持动态日志级别 [KAFKA-8286] - KIP-460 Admin Leader 选举 RPC [KAFKA-8447] - 测量
连接器上任务数量的新指标 [KAFKA-8874] - KIP-517: 添加消费者指标以观察用户poll行为 [KAFKA-8885] - Kafka协议应支持可选的标记字段 [KAFKA-8907] - 在CreateTopics响应中返回topic配置 [KAFKA-8952] - 发现jackson-databind-2.9.9的漏洞
原文: https://www.orchome.com/6737
Kafka 2.5.0
2020年4月15号,Kafka 2.5.0发布。
支持 TLS 1.3(目前默认 1.2 版本) Kafka Streams引入Co-groups Kafka Consumer增量平衡机制(Incremental rebalance) 新指标可提供更好的运营监控 升级Zookeeper为3.5.7 不再支持Scala 2.11
- 新功能
[KAFKA-6049] - Kafka Streams: 在DSL中增加Cogroup
[KAFKA-6144] - 允许从同步备用服务器提供交互式查询
[KAFKA-7251] - 支持 TLS 1.3
[KAFKA-8843] - Zookeeper迁移工具对TLS的支持
[KAFKA-9352] - topic分区对任务的不均衡分配
[KAFKA-9445] - 允许从单个分区中获取密钥,而不是遍历实例上的所有存储
[KAFKA-9487] - 跟进:KAFKA-9445(允许从单个分区获取密钥); 解决代码审查意见
原文: https://www.orchome.com/8169
Kafka 2.6.0
2020年8月3日,Kafka 2.6.0发布
默认情况下,已为Java11或更高版本启用TLS v1.3 性能显着提高,尤其是当broker具有大量分区时 顺利扩展Kafka Streams应用程序 Kafka Streams支持更改时发出 新指标可提供更好的运营洞察力 配置为进行连接时,Kafka Connect可以自动为源连接器创建topic 改进了Kafka Connect中接收器连接器的错误报告选项 -Kafka Connect中的新过滤器和条件SMT client.dns.lookup配置的默认值现在是use_all_dns_ips Zookeeper升级到3.5.8
- 新功能
[KAFKA-6145] - 在迁移任务之前预热新的KS实例-可能会进行两阶段重新平衡
[KAFKA-8611] - 添加KStream#repartition操作
[KAFKA-8890] - KIP- 519:使SSL上下文/引擎配置可扩展
[KAFKA-9320] - 默认情况下启用TLSv1.3,并禁用某些较旧的协议
[KAFKA-9673] - 有条件地应用SMT
[KAFKA-9753] - 向流指标添加任务级活动进程比率
[KAFKA-9756] - 重构主循环以一次处理一个任务的多个记录
原文: https://www.orchome.com/9847
Kafka 2.7.0
TCP连接超时可配置和改善初始元数据的获取。 增强broker范围和每个listener的连接创建比率(KIP-612,第1部分) 限流创建topic、创建分区和删除topic操作。 将TRACE级别的端到端延迟指标添加到Streams。 添加broker端SCRAM配置API 支持PEM格式的SSL证书和私钥。 将RocksDB内存消耗添加到RocksDB指标中。 添加对聚合的滑动窗口支持
- 新功能
[KAFKA-9893] -可配置的TCP连接超时和改进初始元数据的获取。
[KAFKA-9915] - 节流创建主题、创建分区和删除主题的操作。
[KAFKA-10054] - 在Streams中增加TRACE级别的端到端延迟指标。
[KAFKA-10259] - KIP-554:添加broker端SCRAM配置API。
[KAFKA-10338] - 支持SSL证书和私钥的PEM格式。
原文: https://www.orchome.com/9993
Kafka 2.8.0
抢先体验,kafka通过自我管理的仲裁来替代ZooKeeper(很快,Apache Kafka将不再需要ZooKeeper。) 增加集群描述API 在SASL_SSL监听器上支持彼此TLS认证 JSON请求/响应的debug日志 限制broker连接创建率 Topic识别 在Connect REST API中公开任务配置 更新 Streams FSM 以澄清ERROR状态的含义 扩展 StreamJoined 以允许更多的存储配置 更方便的TopologyTestDriver构造 引入 Kafka-Streams 专用的未捕获异常处理程序 启动和关闭Streams线程的API 改进 TimeWindowedDeserializer 和 TimeWindowedSerde 处理窗口大小 改善Kafka流中的超时和重试情况
原文: https://cloud.tencent.com/developer/article/1821560