Kafka 的基本架构组件

120 阅读5分钟

Kafka 的基本架构组件主要包括以下几个部分:Broker、Producer、Consumer、Topic、Partition、ZooKeeper(在 Kafka 2.8.0 之前)或 KRaft(Kafka Raft),以及 Kafka Connect 和 Kafka Streams。下面是每个组件的详细解释:

1. Broker

Kafka Broker 是 Kafka 集群中的服务器,负责接收、存储和转发消息。每个 Kafka 集群可以包含多个 Broker,Broker 之间通过分区和副本机制实现数据的高可用性和负载均衡。

2. Producer

Producer 是消息的生产者,负责向 Kafka 主题(Topic)发送消息。Producer 可以配置为同步或异步发送消息,并可以选择分区策略来决定消息发送到哪个分区。

3. Consumer

Consumer 是消息的消费者,负责从 Kafka 主题中读取消息。Consumer 可以单独工作,也可以组成一个 Consumer Group 来实现负载均衡和高可用性。每个 Consumer Group 中的每个 Consumer 负责消费不同分区的数据。

4. Topic

Topic 是 Kafka 中消息的逻辑分类单元。消息被发布到特定的 Topic 中,Consumer 从特定的 Topic 中读取消息。一个 Topic 可以有多个分区(Partition)。

5. Partition

Partition 是 Kafka 中消息的物理分区。每个 Topic 可以分成多个 Partition,每个 Partition 是一个有序的、不可变的消息序列。Partition 提供了并行处理的能力,提高了 Kafka 的吞吐量和可扩展性。

6. ZooKeeper 或 KRaft

  • ZooKeeper:在 Kafka 2.8.0 之前,ZooKeeper 被用来管理 Kafka 集群的元数据和分布式协调,包括 Broker 的注册、Topic 的配置、分区的领导者选举等。
  • KRaft(Kafka Raft):从 Kafka 2.8.0 开始,Kafka 引入了 KRaft 模式,逐步替代 ZooKeeper。KRaft 是 Kafka 自己的分布式协调和元数据管理机制,基于 Raft 共识算法,简化了部署和管理。

7. Kafka Connect

Kafka Connect 是 Kafka 的数据集成框架,用于连接 Kafka 与外部系统(如数据库、文件系统、其他消息系统等)。Kafka Connect 提供了 Source Connector 和 Sink Connector,分别用于从外部系统读取数据到 Kafka 和将 Kafka 数据写入外部系统。

8. Kafka Streams

Kafka Streams 是 Kafka 的流处理库,允许开发者构建实时数据处理应用。Kafka Streams 提供了高级的流处理 API,用于过滤、转换、聚合和连接数据流。

9. Controller

Controller 是 Kafka 集群中的一个特殊角色,通常由一个 Broker 担任。Controller 负责管理集群的元数据、分区的领导者选举、分区的再平衡等关键任务。Controller 的稳定性和性能对整个集群的运行至关重要。

通过这些组件,Kafka 实现了高吞吐量、低延迟、高可用性和水平扩展的分布式消息系统,能够满足大规模实时数据处理的需求。

Kafka 中的主题(Topic)和分区(Partition)。它们之间有什么关系?

在 Kafka 中,主题(Topic)和分区(Partition)是两个核心概念,它们共同决定了数据的组织和存储方式。理解它们之间的关系对掌握 Kafka 的工作机制至关重要。

主题(Topic)

定义:主题是 Kafka 中消息的逻辑分类单元。每个主题都有一个名称,生产者将消息发布到特定的主题,消费者从特定的主题中读取消息。

特点

  • 逻辑分隔:主题用于将不同类型的消息分隔开来。例如,可以有一个主题用于交易数据,另一个主题用于日志数据。
  • 多生产者和多消费者:一个主题可以有多个生产者发布消息,也可以有多个消费者订阅和消费消息。
  • 持久化:主题中的消息是持久化存储的,直到达到配置的保留策略(如时间或大小限制)。

分区(Partition)

定义:分区是主题的物理分隔单元。每个主题可以分成多个分区,每个分区是一个有序的、不可变的消息序列。

特点

  • 并行处理:分区提供了并行处理的能力。不同的分区可以由不同的消费者处理,提高了系统的吞吐量和性能。
  • 有序性:在一个分区内,消息是有序的。消费者读取时会按消息的写入顺序读取。
  • 分布式存储:分区分布在不同的 Kafka Broker 上,实现负载均衡和高可用性。

主题和分区的关系

  1. 逻辑与物理分隔

    • 主题是逻辑概念,用于将消息分类。
    • 分区是物理概念,用于将消息存储在不同的 Broker 上。
  2. 并行处理和扩展性

    • 一个主题可以有多个分区,每个分区可以由不同的消费者处理,从而实现并行处理。
    • 增加分区数可以提高主题的吞吐量和扩展性。
  3. 数据分布和高可用性

    • 分区分布在不同的 Broker 上,确保数据的负载均衡。
    • 每个分区可以有多个副本(Replica),副本分布在不同的 Broker 上,通过 ISR 机制实现高可用性。

示例

假设有一个主题 orders,它有 3 个分区(Partition 0、Partition 1 和 Partition 2)。

Topic: orders
+-----------------+
| Partition 0     |
|-----------------|
| Message 1       |
| Message 2       |
| ...             |
+-----------------+

+-----------------+
| Partition 1     |
|-----------------|
| Message 3       |
| Message 4       |
| ...             |
+-----------------+

+-----------------+
| Partition 2     |
|-----------------|
| Message 5       |
| Message 6       |
| ...             |
+-----------------+
  • 生产者:生产者将消息发送到 orders 主题,Kafka 根据分区策略(如轮询、键哈希等)将消息分配到不同的分区。
  • 消费者:消费者组中的每个消费者可以分别从不同的分区读取消息。例如,一个消费者读取 Partition 0,另一个消费者读取 Partition 1。

通过这种组织方式,Kafka 实现了高吞吐量、低延迟和高可用性的消息处理系统。