概述Apache Kafka

这篇文章是关于什么的?

我会在这里对Apache Kafka进行研究和总结,它是一种分布式消息传递系统的开源软件。具体来说,我会总结以下内容。

    • Apache Kafkaの概要

 

    Kafkaのアーキテクチャ

Apache Kafka是一种流处理平台的概要。

阿帕奇·卡夫卡(以下简称Kafka)是由LinkedIn开发的分布式消息传递系统。最初是为了处理高吞吐量和实时数据而开发的。

kafka.png

为了满足无法通过之前的消息队列、日志收集器、ETL工具等满足的需求,Kafka应运而生。 Kafka具有以下特点:

    • 分散システム

 

    • リアルタイムなデータ処理

任意なタイミングでのデータ取り出しも可能
At Least Oneの到達保証

分散系统

卡夫卡是一个分布式系统,可以预先扩展系统以满足所需的业务需求。另外,通过进行数据复制,可以确保系统的容错性。

实时数据处理

在Kafka中,数据从收集到处理的时间间隔预计在几百毫秒到几秒之间。通过分布式系统实现了高吞吐量。此外,Kafka选择了不提供精确一次的到达保证,而是优先考虑吞吐量的开发方式。

可以在任何时间提取数据

为了使Kafka能够支持批处理等功能,数据会被存储在磁盘上。这样可以相对容易地保存大量的数据。
顺便提一下,在Kafka中,数据会按照旧的顺序被删除。数据保存清单可以设置数据的保存期限(默认为一周)和数据容量(默认无限制)这两个参数。
此外,Kafka还支持压缩等操作,以满足只保留最新数据的需求,例如只保留具有相同键的最新数据。

到达保证至少一次

Kafka支持至少一次或多次到达的保证。稍后会详细描述,系统会进行消息的到达管理。

卡夫卡的要求与其他工具的比较。

Kafka的目标是解决以下类似问题而创建的。

    • リアルタイムでのメッセージのやり取り

 

    • スケールアウト可能な構成

 

    • 永続化可能

 

    最低一回の送信保証

因为以前使用的工具(指的是能满足这些要求的工具)都没有满足所有这些要求,所以开发了Kafka。

Kafkaの対応する要件メッセージキューログコレクターETLツールリアルタイム〇〇×スケールアウト可能×〇〇永続化△(長期保存ができない)××送信保証〇(ツールによっては強力すぎる)△(トランザクション機能がない)〇

卡夫卡的架构

制造商、经纪人、消费者

在卡夫卡中,采用以下类似的系统配置。

pbc.png

生产者、经纪人和消费者都可以分散地组成系统。
此外,Apache ZooKeeper似乎被用于经纪人的节点发现。
下面将总结生产者、经纪人和消费者的说明。

制片人

这是一个将数据的来源消息发送到代理的应用程序。
开发者可以使用提供的Producer API库并通过Kafka创建Producer。
此外,还存在将Producer功能作为插件提供的开源软件。
Producer采用推送模式。

拦截器 jiē qì)

这是一个具有接收和发送数据的服务角色。它作为一个守护进程运行,并接受接收和发送请求。获取的数据将全部持久化到磁盘中。

消费者 zhě)

这是一个用于从Broker获取Message的应用程序。与Producer一样,它使用作为库提供的Consumer API。Consumer以Pull方式运作,可以在Consumer端自行确定获取Message的时机。

数据的单位,消息的发送和接收

在Kafka中,数据的最小单元被称为消息(Message)。消息包含键(Key)和值(Value)。
每种消息类型在Blocker内都会有一个被称为主题(Topic)的存储区域,生产者和消费者会根据主题来进行消息的发送和接收。

topic.png

分割

为了处理与单个主题相关的大量输入和输出,Blocker将数据分割成称为”分区”的单元来处理。这些分区会分散部署在Blocker集群内。在接收来自生产者的消息时,可以使用密钥哈希分区和轮询分区两种方式。

partition.png

当使用Key的哈希时,可以控制从相同的Consumer获取相同的Key,但需要注意数据在分区中的偏斜。

复制

为了预防服务器故障等情况,卡夫卡正在复制数据。

replica.png

复制是以每个分区为单位进行的,并且每个副本由不同的控制块进行管理。其中一个副本被称为Leader,其他副本被称为Follower。数据的读写操作由Leader执行。

关于制片人的信息发送

生产者向目标主题发送消息时,默认情况下,每个消息只会发送一次。但是,如果发送过多的细小消息,可能会导致网络资源耗尽,因此需要进行适当调整。
也可以通过以下两种条件来触发调整。

    • 指定したサイズまでメッセージが蓄積したらメッセージを送信する。

 

    一定時間ごとにメッセージを送信する。

另外,當發送訊息時,可以使用分區功能將訊息發送到指定的分區。

为实现至少一次的目标,阻塞器(Blocker)会发送肯定的回应(Ack),表明已成功接收。如果无法收到回应,生产者(Producer)会对消息进行重新发送处理。

producer.png

关于消费者的消息接收

在Consumer接收消息时,Consumer首先发送一个事务开始请求。
然后,Consumer会发送一次捕获请求到它感兴趣的Topic上的当前偏移量(称为Current Offset),从此位置开始到Broker持有的最新消息的所有消息。

消费者将发送Offset Commit消息。

comsumer.png

当Blocker发送消息后,如果在Consumer端发生故障,当前偏移量将返回到上一次的位置。

consummer2.png

如果主题被复制,消费者可以获取消息直到复制已完成的偏移位置,而不是最新的消息。这样做可以实现至少一次的到达保证。

总结

我总结了Kafka的概述和架构。由于Kafka是一个分布式系统,所以其架构有些复杂。在许多系统中,它可能会被过度配置。然而,它是一种强大的软件,可以满足构建实时数据中心等需求。

可以参考下面的文献。

    Apache Kafka 分散メッセージングシステムの構築と活用
广告
将在 10 秒后关闭
bannerAds