草庐IT

详解Kafka 3.0 稳定版新特性

骨灰级收藏家 2023-09-10 原文

  第一部分: 基础升级

1: Kafka 中对 Java 8 的支持

Kafka 目前支持 Java 811 15(即将为 16)。换句话说,我们支持两个最新的 LTS 版本和最新的非 LTS 版本。由于我们必须在每个受支持的版本上编译和运行测试,因此从开发和测试的角度来看,这是一笔不小的成本。

Java 17 将于今年晚些时候发布,它将是一个 LTS 版本。为避免在 Java 18 发布后支持 4 Java 版本,我们希望放弃对 Java 8 的支持。但是,还有其他注意事项:

尽管 Java 8 2014 3 月(7 年前)发布,但它仍然是使用最广泛的 Java 版本。Java 11 2018 9 月(近 3 年前)发布。

在我们删除对给定 Java 版本的支持之前需要一个弃用期,并且删除应该发生在主要的 Kafka 版本中。

我们依赖的重要项目可能会先于我们取消对 Java 8 的支持,这可能会在涉及 CVE 所需的更新时带来挑战。一个例子是Jetty 10

在所有应用程序中升级 Java 版本通常比在服务(例如代理、连接等)中升级 Java 版本更难。

我们预计 Apache Kafka 3.0 将在 2021 7 /8 月左右发布,而 4.0 将在此后至少 16 个月发布。鉴于此和上述情况,我们建议弃用 Apache Kafka 3.0 中的 Java 8 支持并放弃 Apache Kafka 4.0 中的支持。用户将有足够的时间和警告从 Java 8 迁移。

继续在客户端模块中支持 Java 8

 2: Kafka 中对 scala 2.12 的支持

 第二部分: kafka Raft 快照

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

        而这样我们只需要管理和配置一项服务即可, kafka群更加具有可扩展性, 并且让其能够支持更多的topicpartition

         Kafka 3.0 发布,kafka Raft模式下, 入了一个主要的功能是快照: 能够为kraft控制器和brokers的元数据分区主题(__cluster_metadata)提供更加有效的存储, 加载和复制这些信息

 

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

Kafka Controller3.0全接管了生成 Kafka 生产者 ID 的责任 ControllerZK KRaft 模式下都这样做。这让我们离开桥接版本更近了这将允许用户从使用 ZK Kafka 部署过渡到使用 KRaft 的新部署

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

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

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

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

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

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

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

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

Kafka Connect 升级

什么是kafka Connect

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

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

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

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

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

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

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

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

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

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

Kafka Stream 升级

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

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

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

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

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

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

2) 扩展了ReadOnlySessionStore和SessionStore接口中的一组新方法  

3) ProcessorContext类中增加两个新的方法 

 在kafka3.0 processorContext增加两个新的方法: currentSystemTimeMs CurrentStreamTimeMs.

这两个新的方法可以让用户分别查询缓存的系统时间和流时间, 起到统一API的作用

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

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

有关详解Kafka 3.0 稳定版新特性的更多相关文章

  1. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  2. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  3. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  4. ruby - 如何进行稳定排序? - 2

    如何稳定地对数组进行排序?我要排序的值可能有很多重复项,我不确定ruby​​使用哪种排序算法。我认为插入排序最适合我。示例:a=[[:a,0],[:b,1],[:c,0],[:d,0]]a.sort_by{|x,y|y}#=>[[:a,0],[:d,0],[:c,0],[:b,1]]寻找[[:a,0],[:c,0],[:d,0],[:b,1]] 最佳答案 把你原本想排序的键和索引放到一个数组中,然后排序。a.sort_by.with_index{|(x,y),i|[y,i]}#=>[[:a,0],[:c,0],[:d,0],[:b,

  5. IDEA 2023.1 正式发布,新特性简介 - 2

     昨晚看到IDEA官推宣布IntelliJIDEA2023.1正式发布了。简单看了一下,发现这次的新版本包含了许多改进,进一步优化了用户体验,提高了便捷性。至于是否升级最新版本完全是个人意愿,如果觉得新版本没有让自己感兴趣的改进,完全就不用升级,影响不大。软件的版本迭代非常正常,正确看待即可,不持续改进就会慢慢被淘汰!根据官方介绍:IntelliJIDEA2023.1针对新的用户界面进行了大量重构,这些改进都是基于收到的宝贵反馈而实现的。官方还实施了性能增强措施,使得Maven导入更快,并且在打开项目时IDE功能更早地可用。由于后台提交检查,新版本提供了简化的提交流程。IntelliJIDEA

  6. 【详解】Docker安装Elasticsearch7.16.1集群 - 2

    开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建

  7. 【Elasticsearch基础】Elasticsearch索引、文档以及映射操作详解 - 2

    文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就

  8. 最强Http缓存策略之强缓存和协商缓存的详解与应用实例 - 2

    HTTP缓存是指浏览器或者代理服务器将已经请求过的资源保存到本地,以便下次请求时能够直接从缓存中获取资源,从而减少网络请求次数,提高网页的加载速度和用户体验。缓存分为强缓存和协商缓存两种模式。一.强缓存强缓存是指浏览器直接从本地缓存中获取资源,而不需要向web服务器发出网络请求。这是因为浏览器在第一次请求资源时,服务器会在响应头中添加相关缓存的响应头,以表明该资源的缓存策略。常见的强缓存响应头如下所述:Cache-ControlCache-Control响应头是用于控制强制缓存和协商缓存的缓存策略。该响应头中的指令如下:max-age:指定该资源在本地缓存的最长有效时间,以秒为单位。例如:Ca

  9. IDEA 2022 创建 Spring Boot 项目详解 - 2

    如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1.  创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1.  创建SpringBoot项目        打开IDEA,选择NewProject创建项目。        填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。        选择springboot版本以及需要的包,此处只选择了springweb。        此处需特别注意,若你使用的是jdk1

  10. 详解Unity中的粒子系统Particle System (二) - 2

    前言上一篇我们简要讲述了粒子系统是什么,如何添加,以及基本模块的介绍,以及对于曲线和颜色编辑器的讲解。从本篇开始,我们将按照模块结构讲解下去,本篇主要讲粒子系统的主模块,该模块主要是控制粒子的初始状态和全局属性的,以下是关于该模块的介绍,请大家指正。目录前言本系列提要一、粒子系统主模块1.阅读前注意事项2.参考图3.参数讲解DurationLoopingPrewarmStartDelayStartLifetimeStartSpeed3DStartSizeStartSize3DStartRotationStartRotationFlipRotationStartColorGravityModif

随机推荐