Kafka 2.5.0发布——弃用对Scala2.11的支持

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Kafka 2.5.0发布——弃用对Scala2.11的支持

近日Kafka发布了最新版本 2.5.0,增加了很多新功能:

下载地址:https://kafka.apache.org/downloads#2.5.0

  • 对TLS 1.3的支持(默认为1.2)
  • 引入用于 Kafka Streams 的 Co-groups
  • 用于 Kafka Consumer 的增量 rebalance 机制
  • 为更好的监控操作增加了新的指标
  • 升级Zookeeper至 3.5.7
  • 取消了对Scala 2.1.1的支持

下面详细说明本次更新:


一、新功能


1、Kafka Streams: Add Cogroup in the DSL

当多个流聚集在一起以形成单个较大的对象时(例如,购物网站可能具有购物车流,心愿单流和购买流。它们共同构成一个客户),将其在Kafka Streams DSL中使用非常困难。

通常需要您将所有流分组并聚合到KTables,然后进行多个外部联接调用,最后得到具有所需对象的KTable。这将为每个流和一长串ValueJoiners创建一个状态存储,每个新记录都必须经过此连接才能到达最终对象。

创建使用单个状态存储的Cogroup 方法将:

  • 减少从状态存储获取的数量。对于多个联接,当新值进入任何流时,都会发生连锁反应,联接处理器将继续调用ValueGetters,直到我们访问了所有状态存储。
  • 性能略有提高。如上所述,所有ValueGetters都被调用,还导致所有ValueJoiners被调用,从而强制重新计算所有其他流的当前联接值,从而影响性能。

2、Add support for TLS 1.3

Java 11添加了对TLS 1.3的支持。添加对Java 11的支持后,我们应该对此提供支持。

3、不再支持Scala 2.11

为什么不再支持?

我们目前为3个Scala版本构建Kafka:2.11、2.12和最近发布的2.13。由于我们必须在每个受支持的版本上编译和运行测试,因此从开发和测试的角度来看,这是一笔不小的成本。

Scala 2.11.0于2014年4月发布,对2.11.x的支持于2017年11月结束(到发布Kafka 2.5时将超过2年)。Scala 2.12.0于2016年11月发布,Scala 2.13.0于2019年6月发布。基于此,现在该放弃对Scala 2.11的支持了,以便我们使测试矩阵易于管理(最近的kafka-trunk-jdk8占用了将近10个小时,它将使用3个Scala版本构建并运行单元测试和集成测试。此外,Scala 2.12和更高版本还改进了与Java 8功能接口的互操作性(Scala 2.12中首次引入)。更具体地说,Scala 2.12中的lambda可以与Java 8代码相同的方式与Java 8功能接口一起使用。

在我们的下载页面中,我们推荐自Kafka 2.1.0起使用Scala 2.12构建的Kafka二进制文件。我们切换到Scala 2.12作为Kafka 2.2.0中源tarball,构建和系统测试的默认Scala版本。


二、改进与修复


  • 当输入 topic 事务时,Kafka Streams lag 不为 0
  • Kafka-streams 可配置内部 topics message.timestamp.type=CreateTime
  • 将 KStream#toTable 添加到 Streams DSL
  • 将 Commit/List Offsets 选项添加到 AdminClient
  • 将 VoidSerde 添加到 Serdes
  • 改进 Sensor Retrieval

[KAFKA-3061] 修复Guava依赖问题

[KAFKA-4203] Java生产者默认的最大消息大小不再与broker默认一致

[KAFKA-5868] kafka消费者reblance时间过长问题

详细更新内容点此查看


三、其他版本升级至2.5.0指南


如果要从2.1.x之前的版本升级,请参阅以下注释,以了解用于存储偏移量的架构的更改。将inter.broker.protocol.version更改为最新版本后,将无法降级到2.1之前的版本。

在所有Broker上更新server.properties并添加以下属性。CURRENT_KAFKA_VERSION指的是您要升级的版本。CURRENT_MESSAGE_FORMAT_VERSION是指当前使用的消息格式版本。如果以前覆盖了消息格式版本,则应保留其当前值。或者,如果要从0.11.0.x之前的版本升级,则应将CURRENT_MESSAGE_FORMAT_VERSION设置为与CURRENT_KAFKA_VERSION相匹配。

  • inter.broker.protocol.version = CURRENT_KAFKA_VERSION(例如0.10.0、0.11.0、1.0、2.0、2.2)。
  • log.message.format.version = CURRENT_MESSAGE_FORMAT_VERSION
  • 如果要从0.11.0.x或更高版本升级,并且尚未覆盖消息格式,则只需要覆盖Broker间协议版本。
  • inter.broker.protocol.version = CURRENT_KAFKA_VERSION(0.11.0,1.0,1.1,2.0,2.1,2.2,2.3)。
  • 一次升级一个Broker:关闭Broker,更新代码,然后重新启动。完成此操作后,Broker将运行最新版本,并且您可以验证集群的行为和性能是否符合预期。如果有任何问题,此时仍可以降级。
  • 验证群集的行为和性能后,通过编辑inter.broker.protocol.version并将其设置为2.5来提高协议版本 。
  • 逐一重新启动Broker,以使新协议版本生效。Broker开始使用最新协议版本后,将无法再将群集降级到较旧版本。
  • 如果您已按照上述说明覆盖了消息格式版本,则需要再次滚动重启以将其升级到最新版本。一旦所有(或大多数)使用者均已升级到0.11.0或更高版本,则在每个Broker上将log.message.format.version更改为2.5,然后逐一重新启动它们。请注意,不再维护的较旧的Scala客户端不支持0.11中引入的消息格式,因此,为避免转换成本,必须使用较新的Java客户端。

2.5.0主要的变化,可能产生的升级影响

  • RebalanceProtocol#COOPERATIVE使用时,Consumer#poll仍然可以返回数据,此外, Consumer#commitSync现在可以抛出RebalanceInProgressException来通知用户此类事件,CommitFailedException并允许用户完成正在进行的Reblance,然后重新尝试为那些仍然拥有的分区提交偏移量。
  • 为了提高典型网络环境中的弹性,默认值 zookeeper.session.timeout.ms已从6s增加到18s, replica.lag.time.max.ms从10s增加到30s。
  • cogroup()添加了新的DSL运营商,用于一次将多个流聚合在一起。
  • 添加了新的KStream.toTable()API,可将输入事件流转换为KTable。
  • 添加了新的Serde类型Void以表示输入主题中的空键或空值。
  • 弃用UsePreviousTimeOnInvalidTimestamp并替换为UsePartitionTimeOnInvalidTimeStamp
  • 通过添加挂起的偏移防护机制和更强大的事务提交一致性检查,改进了一次精确语义,这大大简化了可伸缩的一次精确应用程序的实现。
  • 弃用KafkaStreams.store(String, QueryableStoreType)并替换为KafkaStreams.store(StoreQueryParameters)
  • 不再支持Scala 2.11。
  • 软件包中的所有Scala类kafka.security.auth均已弃用。请注意,在2.4.0中已弃用kafka.security.auth.Authorizerkafka.security.auth.SimpleAclAuthorizer
  • 默认情况下,TLSv1和TLSv1.1已被禁用,因为它们具有已知的安全漏洞。现在默认情况下仅启用TLSv1.2。您可以通过在配置选项ssl.protocol和中明确启用它们来继续使用TLSv1和TLSv1.1 ssl.enabled.protocols
  • ZooKeeper已升级到3.5.7,并且如果3.4数据目录中没有快照文件,则ZooKeeper从3.4.X升级到3.5.7可能会失败。这通常发生在测试升级中,其中ZooKeeper 3.5.7尝试加载没有创建快照文件的现有3.4数据目录。有关问题请参考:https://issues.apache.org/jira/browse/ZOOKEEPER-3056
  • ZooKeeper 3.5.7版支持有或没有客户端证书的TLS加密的到ZooKeeper的连接,并且可以使用其他Kafka配置来利用此功能。


相关文章
|
SQL 消息中间件 分布式计算
如何查看spark与hadoop、kafka、Scala、flume、hive等兼容版本【适用于任何版本】
如何查看spark与hadoop、kafka、Scala、flume、hive等兼容版本【适用于任何版本】
983 0
如何查看spark与hadoop、kafka、Scala、flume、hive等兼容版本【适用于任何版本】
|
1月前
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
42 0
|
1月前
|
消息中间件 存储 分布式计算
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
91 0
|
1月前
|
消息中间件 存储 druid
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
42 3
|
消息中间件 运维 数据可视化
【Kafka】基于Windows环境的Kafka有关环境(scala+zookeeper+kafka+可视化工具)搭建、以及使用.NET环境开发的案例代码与演示
基于Windows系统下的Kafka环境搭建;以及使用.NET 6环境进行开发简单的生产者与消费者的演示。
559 0
【Kafka】基于Windows环境的Kafka有关环境(scala+zookeeper+kafka+可视化工具)搭建、以及使用.NET环境开发的案例代码与演示
|
消息中间件 安全 算法
神马操作!Kafka 竟然宣布弃用 Java 8
第一条就是宣布弃用对 Java 8 和 Scala 2.12 的支持!!! 在 Kafka 3.0.0 中,Kafka 项目中的所有组件都已弃用对 Java 8、Scala 2.12 的支持,宣布弃用,但 3.0.0 还能用,这次宣布只是给用户一个调整的时间,到了 Kafka 4.0,Java 8、Scala 2.12 将将正式取消支持。 其实,其他一些中间件也早有停止对 Java 8 的支持,选择 Java 11 作为最低支持版本,但 Kafka,这可能是自 Java 17 发布以来,也就是近半月时间,官宣弃用 Java 8 打响的第一枪。。 Java 8 虽然有点老了,但依然是现在市
|
消息中间件 存储 负载均衡
Zookeeper搭载kafka消息发布和订阅
ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现。 分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、 集群管理、Master 选举、配置维护,名字服务、分布式同步、分布式锁和分布式队列等功能。
180 0
|
消息中间件 运维 Cloud Native
StreamNative Cloud for KafkaⓇ新品发布!云上打通 Pulsar 与 Kafka
StreamNative Cloud for KafkaⓇ新品发布!云上打通 Pulsar 与 Kafka
154 0
StreamNative Cloud for KafkaⓇ新品发布!云上打通 Pulsar 与 Kafka
|
消息中间件 存储 SQL
Kafka监控必备——Kafka-Eagle 2.0.2正式发布
对于经常使用Kafka的同学,拥有一个炫酷又实用的监控系统是非常有必要的。可以实时的监控数据流的情况,了解实时数据流的变化。
371 0
Kafka监控必备——Kafka-Eagle 2.0.2正式发布
|
消息中间件 存储 缓存
重磅消息!弃用 Java 8、Apache Kafka 3.0 发布!
 什么是Kafka? Apache Kafka是分布式发布订阅消息传递系统和强大的队列,可以处理大量数据,并使您能够将消息从一个端点传递到另一个终端。Kafka适用于离线和在线消息消费。Kafka消息被保留在磁盘上,并在集群内复制以防止数据丢失。Kafka建立在ZooKeeper同步服务之上。它与Apache Storm和Spark完美结合,实时流式传输数据分析。 作者:zhulin1028 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
下一篇
无影云桌面