Kafka3.0新特性

Kafka3.0版本带来了多项改进,包括弃用Java8和支持、引入快照功能以提高Kraft模式下的存储效率、增强生产者ID生成机制、默认启用更强的数据交付保障、延长消费者的会话超时时间、移除旧消息格式支持;KafkaConnect增加了重启连接器的功能、默认覆盖客户端配置和日志上下文;Kafka Streams开放了偏移量API、扩展了API并调整了副本因子配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:Kafka3.0新特性

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
### 使用Docker安装Kafka 3.0教程 #### 准备工作 确保已安装 Docker 并能够正常运行容器。对于 Kafka 版本 3.0 及以上,在某些部署场景下不再强制依赖 ZooKeeper,引入了 KRaft (Kafka Raft MetaData) 模式来替代传统的 ZooKeeper 协调机制[^3]。 #### 配置环境 创建一个新的项目文件夹用于存放所有的配置文件和服务定义: ```bash mkdir kafka-docker && cd kafka-docker ``` #### 编写 `docker-compose.yml` 文件 为了简化操作流程,可以利用 `docker-compose` 工具一次性启动多个服务实例。下面是一个适用于 Kafka 3.0 的基础版 `docker-compose.yml` 文件示例,这里假设采用的是 Kraft 模式而非传统ZooKeeper模式: ```yaml version: &#39;3&#39; services: broker-1: image: confluentinc/cp-kafka:7.2.0 # 确认此版本支持Kafka 3.0及以上特性 hostname: broker-1 ports: - "9092:9092" environment: KAFKA_NODE_ID: 1 KAFKA_PROCESS_ROLES: controller,broker KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_LISTENERS: PLAINTEXT://broker-1:29092,CONTROLLER://broker-1:9093 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_LOG_DIRS: /var/lib/kafka/data KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_JMX_PORT: 9101 KAFKA_METRIC_REPORTERS: io.confluent.metrics.reporter.ConfluentMetricsReporter KAFKA_CONFLUENT_LICENSE_topic.replication.factor: 1 KAFKA_CONFLUENT_BALANCER_ENABLE: false KAFKA_AUTO_CREATE_TOPICS_ENABLE: true volumes: - ./data/broker-1:/var/lib/kafka/data ``` 上述配置中指定了单节点Broker作为controller角色,并开放必要的端口以便外部访问。注意调整 `image:` 字段中的镜像标签以匹配最新的稳定发行版[^4]。 #### 启动服务 保存好 `docker-compose.yml` 文件之后,在命令行执行如下指令即可初始化并启动整个集群: ```bash docker-compose up -d ``` 这将会以后台守护进程的方式启动所有指定的服务组件。可以通过 `docker ps` 查看当前正在运行的容器状态;也可以通过 `docker logs <container_name>` 来查看特定容器的日志输出情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值