重磅消息!弃用 Java 8、Apache Kafka 3.0 发布!

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:  什么是Kafka?Apache Kafka是分布式发布订阅消息传递系统和强大的队列,可以处理大量数据,并使您能够将消息从一个端点传递到另一个终端。Kafka适用于离线和在线消息消费。Kafka消息被保留在磁盘上,并在集群内复制以防止数据丢失。Kafka建立在ZooKeeper同步服务之上。它与Apache Storm和Spark完美结合,实时流式传输数据分析。作者:zhulin1028著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

优点 以下是Kafka的几个好处 -

  • 可靠性 - Kafka是分布式,分区式,复制型和容错型。
  • 可扩展性 - Kafka消息系统轻松扩展,无需停机时间。
  • 耐用性 - Kafka使用分布式提交日志,这意味着邮件尽可能快地依然存在于磁盘上,因此它是耐用的。
  • 性能 - Kafka对于发布和订阅消息都具有高吞吐量。它保持稳定的性能,即使存储了许多TB的消息。

Kafka非常快,保证零停机和零数据丢失。

用例


Kafka可用于许多用例。其中有些列在下面 -

  • 指标 - Kafka经常用于运行监控数据。这涉及从分布式应用程序聚合统计信息,以产生操作数据的集中式提要。
  • 日志聚合解决方案 - Kafka可以在整个组织中使用,从多个服务收集日志,并以标准格式提供给多个服务器。
  • 流处理 - 流行框架(如Storm和Spark
    Streaming)从主题读取数据,处理它,并将处理后的数据写入可用于用户和应用程序的新主题。Kafka的强大耐用性在流处理方面也非常有用。

Kafka需要

Kafka是处理所有实时数据源的统一平台。Kafka支持低延迟消息传递,并在存在机器故障的情况下保证容错。它具有处理大量不同消费者的能力。Kafka非常快,执行200万次写/秒。Kafka将所有数据保留到磁盘,这实质上意味着所有的写入都将转到操作系统(RAM)的页面缓存。这将数据从页面缓存传输到网络套接字非常有效。

Apache Kafka 3.0 是一个涉及多方面的大版本,该版本引入了各种新功能、突破性的 API 更改以及对 KRaft 的改进—— Apache Kafka 的内置共识机制将取代 Apache ZooKeeper 。

虽然 KRaft 尚未被推荐用于生产(已知差距列表),但我们对 KRaft 元数据和 API 进行了许多改进。Exactly-once 和分区重新分配支持值得强调。我们鼓励您查看 KRaft 的新功能并在开发环境中试用它。

从 Apache Kafka 3.0 开始,生产者默认启用最强的交付保证 ( acks=all, enable.idempotence=true ) 。这意味着用户现在默认获得排序和持久性。

此外,不要错过 Kafka Connect 任务重启增强、KStreams 基于时间戳同步的改进以及 MirrorMaker2 更灵活的配置选项。

2.png

常规变化KIP-750(第一部分):弃用 Kafka 中对 Java 8 的支持

在 3.0 中,Apache Kafka 项目的所有组件都已弃用对 Java 8 的支持。这将使用户有时间在下一个主要版本 ( 4.0 ) 之前进行调整,届时 Java 8 支持将被取消。

KIP-751(第一部分):弃用 Kafka 中对 Scala 2.12 的支持

对 Scala 2.12 的支持在 Apache Kafka 3.0 中也已弃用。与 Java 8 一样,我们给用户时间来适应,因为计划在下一个主要版本 ( 4.0 ) 中删除对 Scala 2.12 的支持。

Kafka 代理、生产者、消费者和管理客户端

KIP-630:Kafka Raft 快照

我们在 3.0 中引入的一个主要功能是 KRaft 控制器和 KRaft 代理能够为名为 __cluster_metadata 的元数据主题分区生成、复制和加载快照。Kafka 集群使用此主题来存储和复制有关集群的元数据信息,如代理配置、主题分区分配、领导等。随着此状态的增长,Kafka Raft Snapshot 提供了一种有效的方式来存储、加载和复制此信息 .

KIP-746:修改 KRaft 元数据记录

自第一版 Kafka Raft 控制器以来的经验和持续开发表明,需要修改一些元数据记录类型,当 Kafka 被配置为在没有 ZooKeeper ( ZK ) 的情况下运行时使用这些记录类型。

KIP-730:KRaft 模式下的生产者 ID 生成

在 3.0 和 KIP-730 中,Kafka 控制器现在完全接管了生成 Kafka 生产者 ID 的责任。控制器在 ZK 和 KRaft 模式下都这样做。这让我们更接近桥接版本,这将允许用户从使用 ZK 的 Kafka 部署过渡到使用 KRaft 的新部署。

KIP-679:Producer 将默认启用最强的交付保证

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

KIP-735:增加默认消费者会话超时

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

KIP-709:扩展 OffsetFetch 请求以接受多个组 ID

请求 Kafka 消费者组的当前偏移量已经有一段时间了。但是获取多个消费者组的偏移量需要对每个组进行单独的请求。在 3.0 和 KIP-709 中,fetch 和 AdminClient API 被扩展为支持在单个请求 / 响应中同时读取多个消费者组的偏移量。

KIP-699:更新 FindCoordinator 以一次解析多个 Coordinator

支持可以以有效方式同时应用于多个消费者组的操作在很大程度上取决于客户端有效发现这些组的协调者的能力。这通过 KIP-699 成为可能,它增加了对通过一个请求发现多个组的协调器的支持。Kafka 客户端已更新为在与支持此请求的新 Kafka 代理交谈时使用此优化。

KIP-724:删除对消息格式 v0 和 v1 的支持

自 2017 年 6 月随 Kafka 0.11.0 推出四年以来,消息格式 v2 一直是默认消息格式。因此,在桥下流过足够多的水(或溪流)后,3.0 的主要版本为我们提供了弃用旧消息格式(即 v0 和 v1)的好机会。这些格式今天很少使用。在 3.0 中,如果用户将代理配置为使用消息格式 v0 或 v1,他们将收到警告。此选项将在 Kafka 4.0 中删除(有关详细信息和弃用 v0 和 v1 消息格式的影响,请参阅 KIP-724)。

KIP-707:KafkaFuture 的未来

当 KafkaFuture 引入该类型以促进 Kafka AdminClient 的实现时,Java 8 之前的版本仍在广泛使用,并且 Kafka 正式支持 Java 7。快进几年后,现在 Kafka 运行在支持 CompletionStage 和 CompletableFuture 类类型的 Java 版本上。使用 KIP-707,KafkaFuture 添加了一种返回 CompletionStage 对象的方法,并以 KafkaFuture 向后兼容的方式增强了可用性。

KIP-466:添加对 List 序列化和反序列化的支持

KIP-466 为泛型列表的序列化和反序列化添加了新的类和方法——这一特性对 Kafka 客户端和 Kafka Streams 都非常有用。

KIP-734:改进 AdminClient.listOffsets 以返回时间戳和具有最大时间戳的记录的偏移量

用户列出 Kafka 主题 / 分区偏移量的功能已得到扩展。使用 KIP-734,用户现在可以要求 AdminClient 返回主题 / 分区中具有最高时间戳的记录的偏移量和时间戳。(这是不是与什么的 AdminClient 收益已经为最新的偏移,这是下一个记录的偏移,在主题 / 分区写入混淆。)这个扩展现有 ListOffsets API 允许用户探测生动活泼的通过询问哪个是最近写入的记录的偏移量以及它的时间戳是什么来分区。

Kafka Connect


KIP-745:连接 API 以重新启动连接器和任务

在 Kafka Connect 中,连接器在运行时表示为一组 Connector 类实例和一个或多个 Task 类实例,并且通过 Connect REST API 可用的连接器上的大多数操作都可以应用于整个组。从一开始,一个值得注意的例外 restart 是 Connector 和 Task 实例的端点。要重新启动整个连接器,用户必须单独调用以重新启动连接器实例和任务实例。在 3.0 中,KIP-745 使用户能够通过一次调用重新启动所有或仅失败的连接器 Connector 和 Task 实例。此功能是附加功能,restartREST API 的先前行为保持不变。

KIP-738:删除 Connect 的内部转换器属性

在之前的主版本 ( Apache Kafka 2.0 ) 中弃用它们之后,internal.key.converter 并 internal.value.converter 在 Connect 工作器的配置中作为配置属性和前缀被删除。展望未来,内部 Connect 主题将专门使用 JsonConverter 来存储没有嵌入模式的记录。任何使用不同转换器的现有 Connect 集群都必须将其内部主题移植到新格式(有关升级路径的详细信息,请参阅 KIP-738)。

KIP-722:默认启用连接器客户端覆盖

从 Apache Kafka 2.3.0 开始,可以配置连接器工作器以允许连接器配置覆盖连接器使用的 Kafka 客户端属性。这是一个广泛使用的功能,现在有机会发布一个主要版本,默认启用覆盖连接器客户端属性的功能(默认 connector.client.config.override.policy 设置为 All)。

KIP-721:在连接 Log4j 配置中启用连接器日志上下文

另一个在 2.3.0 中引入但到目前为止尚未默认启用的功能是连接器日志上下文。这在 3.0 中发生了变化,连接器上下文默认添加 log4j 到 Connect 工作器的日志模式中。从以前的版本升级到 3.0 将 log4j 通过在适当的情况下添加连接器上下文来更改导出的日志行的格式。

Kafka Streams


KIP-695:进一步改进 Kafka Streams 时间戳同步

KIP-695 增强了 Streams 任务如何选择获取记录的语义,并扩展了配置属性的含义和可用值 max.task.idle.ms。此更改需要 Kafka 消费者 API 中的一种新方法,currentLag 如果本地已知且无需联系 Kafka Broker,则能够返回特定分区的消费者滞后。

KIP-715:在流中公开提交的偏移量

3.0 开始,三个新的方法添加到 TaskMetadata 接口:committedOffsets,endOffsets,和 timeCurrentIdlingStarted。这些方法可以允许 Streams 应用程序跟踪其任务的进度和运行状况。

KIP-740:清理公共 API TaskId

KIP-740 代表了 TaskId 该类的重大革新。有几种方法和所有内部字段已被弃用,新的 subtopology ( ) 和 partition ( ) 干将替换旧 topicGroupId 和 partition 字段(参见 KIP-744 的相关变化和修正 KIP-740)。

KIP-744:迁移 TaskMetadata,并 ThreadMetadata 与内部实现的接口

KIP-744 将 KIP-740 提出的更改更进一步,并将实现与许多类的公共 API 分开。为了实现这一点,引入了新的接口 TaskMetadata、ThreadMetadata 和 StreamsMetadata,而弃用了具有相同名称的现有类。

KIP-666:添加 Instant 基于方法到 ReadOnlySessionStore

交互式查询 API 扩展了 ReadOnlySessionStore 和 SessionStore 接口中的一组新方法,这些方法接受 Instant 数据类型的参数。此更改将影响需要实现新方法的任何自定义只读交互式查询会话存储实现。

KIP-622:添加 currentSystemTimeMs 和 currentStreamTimeMs 到 ProcessorContext

该 ProcessorContext 增加在 3.0 两个新的方法,currentSystemTimeMs 和 currentStreamTimeMs。新方法使用户能够分别查询缓存的系统时间和流时间,并且可以在生产和测试代码中以统一的方式使用它们。

KIP-743:删除 0.10.0-2.4Streams 内置指标版本配置的配置值

3.0 中取消了对 Streams 中内置指标的旧指标结构的支持。KIP-743 正在 0.10.0-2.4 从配置属性中删除该值 built.in.metrics.version。这 latest 是目前此属性的唯一有效值(自 2.5 以来一直是默认值)。

KIP-741:将默认 SerDe 更改为 null

删除了默认 SerDe 属性的先前默认值。流过去默认为 ByteArraySerde. 用 3.0 开始,没有缺省,和用户需要任一组其的 SerDes 根据需要在 API 中或通过设置默认 DEFAULT_KEY_SERDE_CLASS_CONFIG 和 DEFAULT_VALUE_SERDE_CLASS_CONFIG 在它们的流配置。先前的默认值几乎总是不适用于实际应用程序,并且造成的混乱多于方便。

KIP-733:更改 Kafka Streams 默认复制因子配置

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

KIP-732:弃用 eos-alpha 并用 eos-v2 替换 eos-beta

在 3.0 中不推荐使用的另一个 Streams 配置值是 exactly_once 作为属性的值 processing.guarantee。该值 exactly_once 对应于 Exactly Once Semantics ( EOS ) 的原始实现,可用于连接到 Kafka 集群版本 0.11.0 或更高版本的任何 Streams 应用程序。此 EOS 的第一实现已经通过流第二实施 EOS 的,这是由值表示取代 exactly_once_beta 在 processing.guarantee 性质。展望未来,该名称 exactly_once_beta 也已弃用并替换为新名称 exactly_once_v2。在下一个主要版本 ( 4.0 ) 中,exactly_once 和 exactly_once_beta 都将被删除,exactly_once_v2 作为 EOS 交付保证的唯一选项。

KIP-725:优化 WindowedSerializer 和 WindowedDeserializer 的配置

配置属性 default.windowed.key.serde.inner 和 default.windowed.value.serde.inner 已弃用,取而代之的是 windowed.inner.class.serde 供消费者客户端使用的单个新属性。建议 Kafka Streams 用户通过将其传递到 SerDe 构造函数来配置他们的窗口化 SerDe,然后在拓扑中使用它的任何地方提供 SerDe。

KIP-633:弃用 Streams 中宽限期的 24 小时默认值

在 Kafka Streams 中,允许窗口操作根据称为宽限期的配置属性处理窗口外的记录。以前,这个配置是可选的,很容易错过,导致默认为 24 小时。这是 Suppression 运营商用户经常感到困惑的原因,因为它会缓冲记录直到宽限期结束,因此会增加 24 小时的延迟。在 3.0 中,Windows 类通过工厂方法得到增强,这些工厂方法要求它们使用自定义宽限期或根本没有宽限期来构造。已弃用默认宽限期为 24 小时的旧工厂方法,以及与 grace ( ) 已设置此配置的新工厂方法不兼容的相应 API。

KIP-623:internal-topics 为流应用程序重置工具添加 " " 选项

通过 kafka-streams-application-reset 添加新的命令行参数,应用程序重置工具的 Streams 使用变得更加灵活:--internal-topics. 新参数接受逗号分隔的主题名称列表,这些名称对应于可以使用此应用程序工具安排删除内部主题。将此新参数与现有参数相结合,--dry-run 允许用户在实际执行删除操作之前确认将删除哪些主题并在必要时指定它们的子集。

MirrorMaker


KIP-720:弃用 MirrorMaker v1

在 3.0 中,不推荐使用 MirrorMaker 的第一个版本。展望未来,新功能的开发和重大改进将集中在 MirrorMaker 2 ( MM2 ) 上。

KIP-716:允许使用 MirrorMaker2 配置偏移同步主题的位置

在 3.0 中,用户现在可以配置 MirrorMaker2 创建和存储用于转换消费者组偏移量的内部主题的位置。这将允许 MirrorMaker2 的用户将源 Kafka 集群维护为严格只读的集群,并使用不同的 Kafka 集群来存储偏移记录(即目标 Kafka 集群,甚至是源和目标集群之外的第三个集群)。

Apache Kafka 3.0 是 Apache Kafka 项目向前迈出的重要一步。

文章参考:弃用 Java 8,Apache Kafka 3.0 发布!-ZAKER新闻 (myzaker.com)


作者:zhulin1028

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章
|
25天前
|
消息中间件 安全 Kafka
Apache Kafka安全加固指南:保护你的消息传递系统
【10月更文挑战第24天】在现代企业环境中,数据的安全性和隐私保护至关重要。Apache Kafka作为一款广泛使用的分布式流处理平台,其安全性直接影响着业务的稳定性和用户数据的安全。作为一名资深的Kafka使用者,我深知加强Kafka安全性的重要性。本文将从个人角度出发,分享我在实践中积累的经验,帮助读者了解如何有效地保护Kafka消息传递系统的安全性。
52 7
|
25天前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
69 5
|
25天前
|
消息中间件 存储 监控
构建高可用性Apache Kafka集群:从理论到实践
【10月更文挑战第24天】随着大数据时代的到来,数据传输与处理的需求日益增长。Apache Kafka作为一个高性能的消息队列服务,因其出色的吞吐量、可扩展性和容错能力而受到广泛欢迎。然而,在构建大规模生产环境下的Kafka集群时,保证其高可用性是至关重要的。本文将从个人实践经验出发,详细介绍如何构建一个高可用性的Kafka集群,包括集群规划、节点配置以及故障恢复机制等方面。
61 4
|
25天前
|
消息中间件 监控 大数据
优化Apache Kafka性能:最佳实践与调优策略
【10月更文挑战第24天】作为一名已经对Apache Kafka有所了解并有实际使用经验的开发者,我深知在大数据处理和实时数据流传输中,Kafka的重要性不言而喻。然而,在面对日益增长的数据量和业务需求时,如何保证系统的高性能和稳定性成为了摆在我们面前的一个挑战。本文将从我的个人视角出发,分享一些关于如何通过合理的配置和调优来提高Kafka性能的经验和建议。
62 4
|
17天前
|
消息中间件 缓存 Java
java nio,netty,kafka 中经常提到“零拷贝”到底是什么?
零拷贝技术 Zero-Copy 是指计算机执行操作时,可以直接从源(如文件或网络套接字)将数据传输到目标缓冲区, 而不需要 CPU 先将数据从某处内存复制到另一个特定区域,从而减少上下文切换以及 CPU 的拷贝时间。
java nio,netty,kafka 中经常提到“零拷贝”到底是什么?
|
25天前
|
消息中间件 存储 负载均衡
Apache Kafka核心概念解析:生产者、消费者与Broker
【10月更文挑战第24天】在数字化转型的大潮中,数据的实时处理能力成为了企业竞争力的重要组成部分。Apache Kafka 作为一款高性能的消息队列系统,在这一领域占据了重要地位。通过使用 Kafka,企业可以构建出高效的数据管道,实现数据的快速传输和处理。今天,我将从个人的角度出发,深入解析 Kafka 的三大核心组件——生产者、消费者与 Broker,希望能够帮助大家建立起对 Kafka 内部机制的基本理解。
55 2
|
23天前
|
消息中间件 Ubuntu Java
Ubuntu系统上安装Apache Kafka
Ubuntu系统上安装Apache Kafka
|
24天前
|
消息中间件 监控 Kafka
Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面
随着大数据技术的发展,Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面,方便管理和监控 Kafka 集群。本文详细介绍了 Kafka Manager 的部署步骤和基本使用方法,包括配置文件的修改、启动命令、API 示例代码等,帮助你快速上手并有效管理 Kafka 集群。
41 0
|
1月前
|
消息中间件 存储 运维
为什么说Kafka还不是完美的实时数据通道
【10月更文挑战第19天】Kafka 虽然作为数据通道被广泛应用,但在实时性、数据一致性、性能及管理方面存在局限。数据延迟受消息堆积和分区再平衡影响;数据一致性难以达到恰好一次;性能瓶颈在于网络和磁盘I/O;管理复杂性涉及集群配置与版本升级。
|
1月前
|
消息中间件 Java Kafka
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
49 1

推荐镜像

更多
下一篇
无影云桌面