• 详解Kafka 3.0 稳定版新特性


      第一部分: 基础升级

    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 或更高版本。

  • 相关阅读:
    快鲸scrm系统:助力母婴门店实现私域长效增长
    client-side-rendering: 客户端渲染CSR优化案例
    3D打印机的使用教程( 超详细 )
    【日常】图床中图片水印设置方法小结
    软著申请注意事项
    重写 equals 方法,实现比较两个对象值是否相等
    Java Web 7 JavaScript 7.5 BOM
    springboot使用SSE
    [交互]实战问题2-413 Request Entity Too Large
    Python每日一练(牛客新题库)——第24天:内置函数
  • 原文地址:https://blog.csdn.net/JACK_SUJAVA/article/details/127730791