1. Kafka Core升级

第一部分 基础升级

1)弃用Kafka中对Java8的支持

早期版本(3.x以下):Kafka支持java8,11和15(即将为16)

Kafka3.x版本:弃用java8,依然可用,官方建议更新至java11,未来将支持jdk11,jdk16,jdk16,jdk17(非LTS版本)

展望Kafka4.0:完全放弃java8

2)弃用Kafka中对scala2.12的支持

早期版本(3.x以下):Kafka支持scala2.11(kafka2.5及后续版本不支持),2.12,2.13版本

Kafka3.x版本:弃用scala2.12版本,依然可用,官方建议推荐使用scala2.13,后续会推出基于scala3的版本

展望Kafka4.0:完全放弃scala2.12

第二部分 Kafka Raft快照

Kafka2.8.0正式发布了KRaft的先行版,并且支持在Kraft模式下的部署和运行。KRaft模式下的Kafka可以完全脱离Zookeeper运行,使用自己的基于Raft算法实现的quorum来保证分布式Metadata的一致

而这样我们只需要管理和配置一项服务即可,让kafka集群更加具有可扩展性,并且让其能够支持更多的topic和partition
在这里插入图片描述
kafka3.0发布,在kafka的Raft模式下,引入了一个主要的功能是快照:能够为kraft控制器和brokers元数据分区主题(_cluster_metadata)提供更加有效的存储,加载和复制这些信息
在这里插入图片描述
问题一:磁盘空间不足
问题二:加载内存消耗时间
问题三:新增节点上线时效
新版本快照模型

第三部分 Kraft模式下的生产者ID生成

kafka Controller在3.0完全接管了生成Kafka生产者ID的责任。Controller在ZK和KRaft模式下都这样做。这让我们离开桥接版本更近了,这就允许用户从使用ZK的Kafka部署过渡到使用Kraft的新部署。

PID生成在前序的版本中实现使用的是利用Zookeeper进行持久性和并发控制的块生成方案。每次代理需要分配一个新的PID块时,它将使用Zookeeper的setData API来分配下一个快。

Kafka2.8版本生成生产者ID
Kafka-3.0版本生成生产者ID

第四部分 Producer将默认启动最强的交付保障

从3.0开始,Kafka Producer默认开启幂等性和所有副本的交付确定。这使得默认情况下记录交付保证更强

2.8版本 ack默认为1

3.0版本 ack默认为all

第五部分 增加默认消费者会话超时

kafka Consumer的配置属性的默认值session.timeout.ms从10秒增加到45秒。这将允许消费者在默认情况下更好地适应暂时的网络故障,并在消费者似乎只是暂时离开组时避免连续重新平衡。

2.8 版本 : 10000(10seconds)

3.0 版本: 45000(45seconds)

第六部分:删除对消息格式V0和V1的支持

如果有从事过kafka从0.11.x以下升级到0.11.x以上版本的程序员应该清楚,kafka为了能够保证在升级过程中不会出现停止,可以完成滚动升级的计划,提供了消息格式版本,分别为V0,V1,V2(0.11.x以后),V3(3.x)等

而目前大部分的kafka的程序员使用的都是V2的消息版本,也就是0.11.x以上的相关版本,故在3.0将对V0和V1的消息格式进行弃用,不推荐使用其写入,从而在kafka4.0中完全剔除。

2. Kafka Connect升级

2.1 什么是Kafka connect

在这里插入图片描述
KafkaConnect是一种用于在ApacheKafka和其他系统之间可扩展且可靠地流式传输数据的
工具。它使快速定义将大量数据移入和移出Kafka的连接器变得简单。KafkaConnect可以摄取
整个数据库或从所有应用程序服务器收集指标到Kafka主题中,使数据可用于低延迟的流处理。
导出作业可以将数据从Kafka主题传送到二级存储和查询系统或批处理系统进行离线分析。

第一部分 连接API以重新启动连接器和任务

当用户在Apache Kafka Connect上运行连接器时,框架会启动连接器Connector一个实例和一个或多个实例Task。这些实例中的任何一个都可能遇到错误。通常,如果ConnectororTask实例抛出异常,Connect框架会将该实例标记为失败,并通过Connect REST API将其公开为FAILED

目前,用户必须使用RESTAPI状态方法和/或JMX指标来监控每个命名连接器Connector和
Task实例的运行状况(“状态”)。 如果这些实例中的任何一个失败,用户必须发出单独的REST API调用以手动重新启动每个Connector和Task实例。

Connect REST API应该允许用户Connector使用单个REST API调用重新启动所有失败的和Task实例。

在3.0中,使用户能够通过一次调用重新启动所有或仅失败的连接器Connector和Task实例。此功能是附加功能,res tartREST API的先前行为保持不变

第二部分 默认启动连接客户端覆盖

从Apache Kafka 2.3.0开始,可以配置Connect worker以允许连接器配置覆盖连接器使用的Kafka客户端属性。这是一个广泛使用的功能,在3.0中,默认启用覆盖连接器客户端属性的功能(默认connector. client. config. override. policy设置为All)。

第三部分 启动连接器日志上下文

另一个在2.3.0中引入但到目前为止尚未默认启用的功能是连接器日志上下文(将连接器上下文添加到Connect工作器的日志中)。这在3.0中发生了变化,连接器上下文默认添加log4 j到Connect工作器的日志模式中。

3. Kafka Stream升级

第一部分 开放在流中关于偏移量API

在使用kafka中,我们如果想要跟踪客户端的消息的进度,可以根据其返回的偏移量信息来判断,但是此操作在kafka的stream中并没有提供,因为stream的客户端中嵌入了多个kafka客户端(发送和消费)

在kafka3.0中对stream客户端开放其偏移量相关的API,这样所有的客户端可以响应回馈其偏移量信息,以方便所有任务的进行进度监控工作。
在这里插入图片描述

第二部分 新增及更改相关的API

1)将TaskMetadata和ThreadMetadata迁移到具体内部实现的接口

	在原有的版本中TaskMetadata和ThreadMetadata都是具体的实现类,但是在实际使用中都不需要用户进行实例化,仅使用公开的元数据API,所以在kafka3.0中都将进行分离,形成公共接口,将具体的实现保留为内部类即可。

2)扩展了ReadOnlySessionStore和SessionStore接口中的一组新方法
在这里插入图片描述
3)在ProcessorContext类中增加两个新的方法

	在kafka3.0 中processorContext增加两个新的方法: currentSystemTimeMs和CurrentStreamTimeMs.
这两个新的方法可以让用户分别查询缓存的系统时间和流时间,起到统一API的作用

第三部分 更改kafka Streams默认副本因子配置

Streams配置属性的默认值replication. factor会从1更改为-1。这将允许新的Streams应用程序使用在KafkaBroker中定义的默认复制因子,因此在它们转移到生产时不需要设置此配置值。请注意,新的默认值需要Kafka Brokers2.5或更高版本。

4. Kafka Kraft集群安装

目前Kraft模式下运行kafka处于预览阶段,尚未推荐用于生产,本次提供Kraft的Local和用于生产的基于zookeeper的集群模式文档: < <kafka环境搭建>>

前提安装好jdk11

1)下载Kafka的版本
在这里插入图片描述
2)上传到服务器解压

3)配置kafka storage(存储

./bin/kafka-storage.sh format --config config/kraft/server.properties -- cluster-id $(./bin/kafka-storage.sh random-uuid)

Formatting /tmp/kraft-combined-logs

4)启动命令

./bin/kafka-server-start.sh config/kraft/server.properties

5. Kafka基本使用

1)创建生产者

./bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test01

2)创建消费者

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test01
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐