Apache Kafka®简明介绍

以下是“Apache Kafka®简单解释”的翻译。

2022年7月5日 – ‘èrlí qī yuè .

Apache Kafka® 是一种简单的消息队列系统的简介

学习Apache Kafka并不困难。我们会以简单易懂的方式解释Apache Kafka的基础知识。

以电子商务项目为例简要解释Apache Kafka®。

Apache Kafka®广泛应用于行业,但学习曲线陡峭,理解该技术的构成要素可能会很困难。因此,本文的目的是简要介绍Apache Kafka的基本概念。

Apache Kafka 是一种开源的分布式流处理平台。

Apache Kafka是一个事件流平台,具有分布式、可扩展、高吞吐量、低延迟的特点,并拥有一个非常庞大的生态系统。

简单来说,这是一个处理在多个系统、多个微服务或其他工作模块之间传递消息的平台。它可以是一个简单的前后端应用程序,也可以是一组物联网设备,或其他模块。

以下是 Apache Kafka 平台的中文同义短语:

Apache Kafka平台是一个分布式平台,依赖于多个服务器,并且数据会被复制到多个位置。

在**可扩展的系统中,可以拥有所需数量的服务器。您可以从小规模开始,并根据系统的增长而增加服务器。这些服务器可以处理数万亿条消息,并最终可以将PB级数据永久保存在磁盘上。

Apache Kafka的独特之处在于其周围广泛的生态系统和社区。这包括在各种编程语言中可用的客户端库和用于将Kafka与现有外部系统集成的数据连接器。因此,您无需重新发明轮子即可开始使用Apache Kafka。相反,您可以依靠已经解决类似问题的优秀开发人员的工作。

使用Apache Kafka的地方。

让我们看一个产品的例子,以便了解 Apache Kafka 的需求来自哪里。

假设我们决定启动一个电子商务项目。在开始项目时,可能在MVP(最小可行产品)阶段,我们决定将所有子系统作为一个单体并排放在一起。因此,从一开始,前端和后端服务以及数据存储密切相互连接。

シンプルなモノリスの図 - データベースは、フロントエンド、配送、支払い、注文と呼ばれるサービスに接続されており、それぞれが他のサービスにも接続されている

这可能并不理想,但刚开始时采用这种方法是有效的,只要是针对少数用户和有限的功能,应该会很好地运作。

然而,一旦规模扩大并开始添加更多模块(例如,引入推荐引擎或通知服务),当前的架构和信息流就会迅速变成完全的混乱,支持和扩展也会变得困难。此外,随着开发团队的扩大,一个人将无法跟上该产品的数据流程。

複雑なモノリスの図-データベースはたくさんのサービスに接続され、さらにそのサービスは互いに接続されている。この図を理解するのは不可能だ

因此,我们需要进行激烈的讨论,以找出将单块系统分割成独立的微服务集合,拥有明确、协商一致并文档化的通信接口的方法。

更重要的是,我们的新架构必须能够让产品不依赖于实时事件,而是让用户立即获得基于最新购买的有意义推荐,而不需要等到明天。

而且,这要求很多事情。引入这样的事件处理是一个庞大的操作,并且需要具备强大的容错能力。

幸運なことに、これらはまさにApache Kafkaが解決してくれる問題です。Apache Kafkaは、データフローを円滑化し、リアルタイムデータの処理方法を簡素化し、サブシステムを分離する能力に優れています。

阿帕奇卡夫卡的理念

要理解Apache Kafka如何工作以及如何有效地进行操作,需要解释关于Apache Kafka数据的思维方式。

Apache Kafka的方法简单但聪明。Apache Kafka通过连续到达的事件来描述实体,而不是处理静态对象或以最终事实形式存储在聚合数据库中的数据。

例如,在我们的电子商务产品中,我们有一个销售商品的列表。这些商品的库存状况和其他特征可以以数字的形式显示在数据库中,如下所示。

テーブル。列のタイトルは、Name、Available、Sold、Searchedです。1行目はノートパソコン、50、20、30。2行目は電球、15、3、5。3行目はパズル、6、2、7。

在中国语境下的表达为:

通过这一步骤,我们获得了宝贵的信息和最终的汇总结果。然而,为了涵盖未来的洞察计算,我们需要仔细规划保存哪些信息是足够的。由于未来发生的事情不可预测,因此预测哪些数据可以长期保存并安全地舍弃是非常困难的。

Apache Kafka建议不保存聚合对象的特性,而是将数据视为事件流动。

イベントはタイムラインに沿って発生する。イベント1は顧客55がノートパソコンを注文、イベント2は顧客12が電球を検索、イベント3は顧客55にノートパソコンを発送、イベント4は顧客12が電球を5個注文

这个流程展示了产品购买的完整生命周期。与查看汇总的最终数据不同,它观察到状态的变化。

根据需要,我们可以选择重播事件。我们可以选择从开头开始,也可以选择跳转到某个时间点。

但是,可以多次重新播放事件,计算所需指标,并回答关于产品和帆的各种问题。

这种类型的架构实际上被称为事件驱动架构,在下一节中,我们将看到Apache Kafka如何适应这种架构。

Apache Kafka是如何协调事件的方法?

Apache Kafka集群负责调度数据的迁移和处理接收消息。Apache Kafka采用推拉模型。换句话说,一边有将消息创建并推送到集群的进程,它们被称为生产者。另一边有消费者,它们从集群中拉取、读取和处理消息。

プロデューサーAとプロデューサーBはKafkaクラスタにメッセージを送る。クラスタ内にはメッセージのタイムラインがある。データベースと電話アプリの2つのコンシューマーが、クラスターからメッセージを読む

生产者和消费者是你编写和控制的应用程序。生产者和消费者可以拥有所需的数量。

如果我们看一下电子商务的例子,制作人可以成为前端应用程序、Web应用程序和移动应用程序的一部分。他们可以观察用户的行为,将信息打包并发送到事件集群。消费者可以连接到后端模块(在这个例子中是通知、配送和推荐服务)来处理子系统。

重要的是,生产者和消费者可以使用不同的语言、不同的平台进行描述,并且彼此完全不知道对方的存在。

可以停止某个制作人的活动,同时添加其他制作人的活动。然而,消费者并不在意或者甚至察觉不到这些信息是由其他实体创造的。

即使消费者出现故障,生产者仍然能够顺利进行操作,生成新的消息并发送到Apache Kafka,这些消息将被保存在持久化存储中。当消费者恢复后,最后读取的消息信息会被持久化到平台上,因此消费者无需从头重新开始。

因此,不期望在生产者和消费者之间进行同步工作。这就有助于系统解耦。

好的,我们已经知道消息是从哪里来的,以及谁会在之后读取它们,但在Kafka集群内部是如何组织的呢?

主题和信息

在Apache Kafka中,一系列的消息被称为主题。主题是一个抽象的术语,稍后将进行解释,但基本上是指事物被存储在磁盘上的方式,而不是物理上的存储方法,它是为了简化思考而设想的。

与数据库中的表类似,我们可以拥有无限数量的主题来描述不同类型的事件。回到之前的例子,我们可以拥有一个主题来描述产品购买的生命周期信息,另一个主题来描述用户注册事件,还可以有一个主题来描述系统的健康状态事件。

3つのトピックが表示されています。トピック 1 には、ユーザ登録イベントが含まれます。トピック 2 には製品関連イベントが含まれます。トピック3にはアプリケーションのイベントが含まれています

只要应用程序在运行,数据将持续流入相关主题。新用户将不断注册,新商品将被购买。

每个消息都有顺序。每个记录的位置由序列号来识别,这被称为偏移量。

另外,消息是不变的,不可以后来改变记录。这是完全符合逻辑的。举个例子,假设有人在我们的商店购买商品,并记录下这个动作的事件。后来是不可以回溯并改变那个事实的。如果客户决定要退货,那会成为一个新的事件。通过发送关于新事件的主题,可以改变对象的状态。

在Apache Kafka中,与许多其他队列系统不同,消费的消息不会从队列中删除或丢弃。相反,如果需要,多个消费者可以多次读取它们。实际上,这是一个非常普遍的情况,来自主题的信息会被多个消费应用程序用于不同的需求,并以不同的角度处理数据。

经纪人与隔墙

已经提到了Kafka集群由多台服务器组成。这些服务器被称为“broker”,并且主题(topic)被保存在上面。主题可能包含数百万甚至数万亿个事件。因此,我们需要考虑如何将这些长记录序列保存在服务器上。

你还记得之前我说过“主题”是一个抽象的词吗?主题本身并不是在一个服务器上整体保存的具体有形物。

将一个主题作为一个数据保存在一台机器上,可能既不合理也不可行。很可能有一天,主题的大小将超出服务器的内存。这就是为什么水平扩展比垂直扩展更为重要。

为此,将主题分割成跨越多台设备的多个块。这些块被称为分区。

每个分区在技术上都是消息日志。

プロデューサーは商品関連のイベントを送信しており、それらは3つの異なるパーティションに分割される。テレビとヘッドホンのイベントはパーティション1、映画とゲームアイテムのイベントはパーティション2、電話と無線LANステーションはパーティション3にある

分区是独立的实体。每个分区都独立,并保存各自值的偏移编号。换句话说,偏移仅在一个分区内有意义,跨分区时,偏移之间没有关联。

在过去,当生产者说他们要在主题中发帖时,意思是他们将向分区集合中写入内容。而消费者则从分区集合中读取。

在舞台上,消费者和生产者都知道如何处理多个分区。

复制

迄今为止,我们讨论了关于主题的话题,主题被分割成分区,并涉及经纪人的方法。现在让我们更深入地探讨一下复制。

为了保持高可用性并防止数据损失,Apache Kafka会在代理之间进行数据复制。复制是以分区级别进行的。特别地,每个代理会保存多个分区。这样,如果其中一个代理出现问题,可以从另一个位置获取该分区的数据。

A、B、Cの3つのブローカーがあり、それぞれ2つのパーティションを持っている。パーティションの内容は異なるが、ブローカーBとブローカーCは1つのパーティションをレプリケートしている - レプリケートされたパーティションのイベントは両方のブローカーで同じである

Apache Kafka 连接器

迄今为止,我们已经介绍了很多关于Apache Kafka的概念和构建模块。现在,我想介绍一个稍微高级一些的概念,可以简化应用程序与Apache Kafka的连接。

Apache Kafka被用作为传输机制。一个常见的场景是,如果数据已经在源技术中可用,或者需要推送到目标-技术上,那么Apache Kafka Connect非常有用。它是一种用于编写用于集成外部数据源(如PostgreSQL®、OpenSearch®和其他数据库或工具)的连接器的工具。这些内置连接器可以在多个项目中使用,实际上有很多是由社区以开源方式支持的。此外,如果没有现成的连接器,也可以自行创建。

下一步

如果对Apache Kafka的工作原理有所了解,那么您可能会对此有更深入的了解。如果您想了解更多详情,请阅读下面关于Kafka详细主题的文章:

Apache Kafkaクラスタにデータを供給するためのデータジェネレータの作成方法、

kcat – コマンドラインからApache Kafkaを操作するための非常に便利なユーティリティの使い方、

Kafkaクラスタに来るデータの構造を調整するためのKarapaceスキーマレジストリの適用方法、

Apache Kafka®を使用してデータベース技術を移行する方法.

此外,关于更详细的信息和资源,请参阅之前的帖子「什么是Apache Kafka®」。

广告
将在 10 秒后关闭
bannerAds