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.Authorizer
和kafka.security.auth.SimpleAclAuthorizer
。 - 默认情况下,TLSv1和TLSv1.1已被禁用,因为它们具有已知的安全漏洞。现在默认情况下仅启用TLSv1.2。您可以通过在配置选项
ssl.protocol
和中明确启用它们来继续使用TLSv1和TLSv1.1ssl.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配置来利用此功能。
Kafka 2.5.0发布——弃用对Scala2.11的支持的更多相关文章
- Kafka2.6.0发布——性能大幅提升
近日Kafka2.6版本发布,距离2.5.0发布只过去了不到四个月的时间. Kafka 2.6.0包含许多重要的新功能.以下是一些重要更改的摘要: 默认情况下,已为Java 11或更高版本启用TLSv ...
- Spring Boot 2.5.0 发布:支持Java16、Gradle 7、Datasource初始化机制调整
今年520的事情是真的多,娱乐圈的我们不管,就跟DD一起来看看 Spring Boot 2.5.0 的发布吧!看看都带来了哪些振奋人心的新特性和改动! 主要更新 支持 Java 16 支持 Gradl ...
- Apache Flume 1.7.0 发布,日志服务器
Apache Flume 1.7.0 发布了,Flume 是一个分布式.可靠和高可用的服务,用于收集.聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型.这是一个可靠.容错的服务. 本次更 ...
- 开源搜索引擎Iveely 0.7.0发布,不一样,那就让他不一样!
2012年08月05日,Iveely Search Engine 0.1.0发布,今天,怀着对于未来的追求,终于,0.7.0如期和大家见面了,7个版本,历时2年4个月,感谢大家的支持,感谢我不离不弃的 ...
- Apache Storm 1.1.0 发布概览
写在前面的话 本人长期关注数据挖掘与机器学习相关前沿研究.欢迎和我交流,私人微信:846731084 我自己测试了一下这个版本,总的来说更加稳定,新增的特性并没有一一测试,仅凭kafk-client来 ...
- mysql8.0发布新特性
2018年4月21日 14:36:42 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html#mysqld-8-0-11-b ...
- 发行说明 - Kafka - 版本1.0.0
发行说明 - Kafka - 版本1.0.0 以下是Kafka 1.0.0发行版中解决的JIRA问题的摘要.有关该版本的完整文档,入门指南以及有关该项目的信息,请参阅Kafka项目网站. 有关升级的注 ...
- PHP 7.4.0发布!一起看看有哪些新特性
PHP 7.4.0 发布了,此版本标志着 PHP 7 系列的第四次特性更新. 看了英文手册后,发现其进行了许多改进,并带来了一些新特性,现在将这些新特性您: 1.Typed Properties 类型 ...
- Windows下Kafka 2.3.0的下载和安装
Kafka是由Apache软件基金会开发的一个开源流处理平台,是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据. 特性:(1)通过O(1)的磁盘数据结构提供消息的持久化 ...
随机推荐
- POJ1703 Find them Catch them 关于分集合操作的正确性证明 种类并查集
题目链接:http://poj.org/problem?id=1703 这道题和食物链那道题有异曲同工之处,都是要处理不同集合之间的关系,而并查集的功能是维护相同集合之间的关系.这道题中有两个不同的集 ...
- hdu1045 炮台的配置 dfs
只要炮台在同一行或者同一列,就可以互相摧毁,遇到墙则无法对墙后的炮台造成伤害,可以通过dfs搜索n*n的方格,全部搜完算一轮,计算炮台数,并保存其最大值. 其中对于t编号的炮台,位置可以计算出是(t/ ...
- 安装自动化测试工具webdriver与selenium模块
webdriver是一个驱动,需要与selenium配合使用,selenium是自动化测试和爬虫的专业模块,对于不同的浏览器需要不同的webdriver,这里我用的是ubuntu19.10的系统,以p ...
- UVA11987 Almost Union-Find 并查集的节点删除
题意: 第一行给出一个n,m,表示 n个集合,里面的元素为1~n,下面有m种操作,第一个数为 1 时,输入a,b 表示a,b 两个集合合并到一起,第一个数为 2 时,输入a,b表示将 a 从他原来的集 ...
- [React]核心概念
本文是对React文档:核心概念部分的笔记,内容大致与文档相同. 文档链接 React哲学部分写的很好,务必要看 JSX JSX是JS的语法扩展,配合react使用,为JS和HTML的混写 JSX支持 ...
- 7.Maven命令
在eclipse中运行maven 一.首先要对pom.xml文件右键→Run As→Maven build 二.输入Maven命令 三.常见的Maven命令有: [1]clean 清理 [2]comp ...
- Excel决定吃什么
1.Excel填充 在第一列填充1到100 (1)下拉填充 (2)填充——自动填充——序列 2.第二列加权填上自己吃的午饭 3.vloopup函数(列查找) 几乎都使用精确匹配,该项的参数一定要选择为 ...
- yum-程序包管理器前端工具
一.要想使用yum先要指定yum源 /etc/yum.com /etc/yum.repos.d/*repo 一.yum的使用 yum [option] command 包名 option -y: c ...
- (3)SQL Server表分区
1.简介 当一个表数据量很大时候,很自然我们就会想到将表拆分成很多小表,在执行查询时候就到各个小表去查,最后汇总数据集返回给调用者加快查询速度.比如电商平台订单表,库存表,由于长年累月读写较多,积累数 ...
- Bitmap之位图采样和内存计算详解
原文首发于微信公众号:躬行之(jzman-blog) Android 开发中经常考虑的一个问题就是 OOM(Out Of Memory),也就是内存溢出,一方面大量加载图片时有可能出现 OOM, 通过 ...