近日Kafka发布了最新版本 2.5.0,增长了不少新功能:html
下载地址:https://kafka.apache.org/downloads#2.5.0apache
对TLS 1.3的支持(默认为1.2)安全
引入用于 Kafka Streams 的 Co-groups网络
用于 Kafka Consumer 的增量 rebalance 机制session
为更好的监控操做增长了新的指标架构
升级Zookeeper至 3.5.7性能
取消了对Scala 2.1.1的支持单元测试
下面详细说明本次更新:测试
当多个流汇集在一块儿以造成单个较大的对象时(例如,购物网站可能具备购物车流,心愿单流和购买流。它们共同构成一个客户),将其在Kafka Streams DSL中使用很是困难。网站
一般须要您将全部流分组并聚合到KTables,而后进行多个外部联接调用,最后获得具备所需对象的KTable。这将为每一个流和一长串ValueJoiners建立一个状态存储,每一个新记录都必须通过此链接才能到达最终对象。
建立使用单个状态存储的Cogroup 方法将:
减小从状态存储获取的数量。对于多个联接,当新值进入任何流时,都会发生连锁反应,联接处理器将继续调用ValueGetters,直到咱们访问了全部状态存储。
性能略有提升。如上所述,全部ValueGetters都被调用,还致使全部ValueJoiners被调用,从而强制从新计算全部其余流的当前联接值,从而影响性能。
Java 11添加了对TLS 1.3的支持。添加对Java 11的支持后,咱们应该对此提供支持。
为何再也不支持?
咱们目前为3个Scala版本构建Kafka:2.十一、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版本。
[KAFKA-3061] 修复Guava依赖问题
[KAFKA-4203] Java生产者默认的最大消息大小再也不与broker默认一致
[KAFKA-5868] kafka消费者reblance时间过长问题
若是要从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
并将其设置为2.5来提升协议版本 。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。Void
以表示输入主题中的空键或空值。UsePreviousTimeOnInvalidTimestamp
并替换为UsePartitionTimeOnInvalidTimeStamp
。KafkaStreams.store(String, QueryableStoreType)
并替换为KafkaStreams.store(StoreQueryParameters)
。kafka.security.auth
均已弃用。请注意,在2.4.0中已弃用kafka.security.auth.Authorizer
和kafka.security.auth.SimpleAclAuthorizer
。ssl.protocol
和中明确启用它们来继续使用TLSv1和TLSv1.1 ssl.enabled.protocols
。