消息队列 第3章 Kafka工作原理 消息队列 第3章 Kafka工作原理

2天前

Kafka 是一个分布式系统,由通过高性能 TCP 网络协议进行通信的服务器端和客户端组成。它可以部署在企业内部和云环境中的裸机硬件、虚拟机和容器上。并通过消息进行通讯。


服务器:Kafka 以一个或多个服务器集群的形式运行,可以跨越多个数据中心或云区域。其中一些服务器构成存储层,称为 "经纪人"。其他服务器运行 Kafka Connect,以事件流的形式持续导入和导出数据,从而将 Kafka 与关系数据库等现有系统以及其他 Kafka 集群集成。为了让您实现关键任务用例,Kafka 集群具有高度可扩展性和容错性:如果其中任何一台服务器出现故障,其他服务器将接替它们的工作,以确保持续运行而不会丢失任何数据。


客户端:它们允许我们编写分布式应用程序和微服务,并行、大规模地读取、写入和处理事件流,即使在网络问题或机器故障的情况下也能容错。Kafka 随附了一些这样的客户端,并由 Kafka 社区提供的几十种客户端对其进行了扩充:有 Java 和 Scala 客户端(包括更高级的 Kafka Streams 库)、Go、Python、PHP、C/C++ 和许多其他编程语言的客户端以及 REST API


事件:当我们向 Kafka 读取或写入数据时,是以事件的形式执行此操作。从概念上讲,事件具有键、值、时间戳和可选的元数据标头。一个消息示例如下:

  • Event key: "Alice"

  • Event value: "Made a payment of $200 to Bob"

  • Event timestamp: "Jun. 25, 2020 at 2:06 p.m.


生产者和消费者:生产者是将事件发布(写入)到 Kafka 的客户端应用程序,而消费者是订阅(读取和处理)这些事件的客户端应用程序。在 Kafka 中,生产者和消费者彼此完全解耦且互不可知,这是实现 Kafka 闻名的高可扩展性的关键设计元素。例如,生产者永远不需要等待消费者。 Kafka 提供了各种保证,例如一次性处理事件的能力。


主题(topic):事件被组织并持久存储在主题中。可以这样理解,主题类似于文件系统中的文件夹,事件是该文件夹中的文件。示例主题名称可以是“付款”。 Kafka 中的主题始终是多生产者和多订阅者:一个主题可以有零个、一个或多个向其写入事件的生产者,以及零个、一个或多个订阅这些事件的消费者。主题中的事件可以根据需要随时读取——与传统消息传递系统不同,事件在使用后不会被删除。相反,您可以通过每个主题的配置设置来定义 Kafka 应保留事件的时间,之后旧事件将被丢弃。 Kafka 的性能在数据大小方面实际上是恒定的,因此长时间存储数据是完全可以的。


主题分区:一个主题分布在位于不同 Kafka 代理上的多个 buckets 中。这种数据的分布式放置对于可扩展性非常重要,因为它允许客户端应用程序同时从多个代理读取数据或向


多个代理写入数据。一个主题可以有多个分区,当新事件发布到主题时,它实际上会附加到主题的分区之一。具有相同事件键(例如,客户或车辆 ID)的事件被写入同一分区,并且 Kafka 保证给定主题分区的任何消费者将始终按照与写入的顺序完全相同的顺序读取该分区的事件(先进先出)。


主题分区:此示例主题有四个分区 P1–P4。两个不同的生产者客户端通过网络将事件写入主题的分区,相互独立地向主题发布新事件。具有相同键(在图中用颜色表示)的事件将写入同一分区。请注意,如果合适,两个生产者都可以写入同一分区。https://file.lulublog.cn/images/3/2025/05/URiVnnotggzXmGqReQQ4eRE9qdXR4O.png

阅读 38