文章

Kafka 入门必备核心概念详解

本文将详细介绍 Kafka 的核心概念,这些概念是理解 Kafka 工作原理和实现应用场景的基础。如果你刚刚接触 Kafka,这些概念将帮助你快速入门,了解 Kafka 是如何实现高吞吐量、可扩展性和高可用性的。

1. Kafka 基本架构

Kafka 是一个分布式的流式处理平台,由多个组件构成,理解这些组件之间的关系和作用是入门的关键。

  • Broker:Kafka 集群中的一个服务器实例,称为一个 broker,它负责存储、处理和管理消息。Kafka 集群通常由多个 broker 组成,每个 broker 都存储 topic 的一部分分区数据。

  • Controller:Kafka 集群中的一个 broker 被选为 Controller,负责管理集群中分区的 leader 选举和元数据同步。

  • ZooKeeper / KRaft:早期 Kafka 使用 ZooKeeper 进行集群协调和元数据管理。从 Kafka 2.8 版本开始,逐步引入了 KRaft 模式,使 Kafka 可以在不依赖 ZooKeeper 的情况下管理集群。

2. 主题(Topic)与分区(Partition)

  • Topic 是 Kafka 中用于分类和存储消息的逻辑概念。每个 topic 可以有一个或多个 分区(Partition),Kafka 会将数据存储在这些分区中,分区是 Kafka 的并行和分布式处理的核心。

  • 分区的分布:一个 topic 的分区会分布在集群的不同 broker 上,每个分区是独立存储和消费的基本单元。这样 Kafka 实现了高吞吐量和负载均衡。

3. 分区副本与高可用性

  • 分区副本(Replication):每个分区有一个主副本(Leader)和一个或多个从副本(Follower),Leader 负责处理生产者和消费者的请求,Follower 同步数据,以保证数据冗余和高可用性。

  • Leader 和 Follower 副本:Leader 副本处理读写请求,Follower 副本保持与 Leader 的数据同步,当 Leader 副本所在的 broker 发生故障时,Kafka 会选举一个 Follower 作为新的 Leader,以确保服务的持续性。

4. 生产者(Producer)与消费者(Consumer)

  • 生产者(Producer):将消息写入到 Kafka 的 topic 中,生产者可以决定消息发送到哪个 topic 和分区。

  • 消费者(Consumer):从 topic 的分区中读取消息,消费者可以通过偏移量跟踪自己读到了哪个消息。

  • 消费者组(Consumer Group):多个消费者可以组成一个消费者组,Kafka 将消息均匀分发给组中的不同消费者,每条消息只会被组中的一个消费者消费。不同消费者组之间可以独立消费同一 topic 的消息,这样每条消息可以被多个组消费。

5. 偏移量(Offset)

  • 偏移量(Offset) 是每个分区中消息的唯一编号,用于标识消息在分区中的位置。消费者通过偏移量跟踪消息的消费进度。

  • 提交偏移量:Kafka 提供自动和手动提交偏移量的机制,以便消费者在故障后能够继续从上一次消费的地方开始。自动提交偏移量可能导致消费失败时的数据丢失,而手动提交提供了更高的可靠性。

6. 消息保留策略

  • 基于时间的保留(Retention Time):消息可以保留一段时间后被删除。

  • 基于日志大小的保留(Log Retention Size):当日志达到一定大小后,旧消息会被删除。

  • 日志压缩(Log Compaction):Kafka 只保留每个 key 的最新值,而不是删除所有旧数据,以节省存储空间。

7. 消费模型

  • At Most Once:消息可能会丢失,但不会重复消费。

  • At Least Once:每条消息至少被消费一次,可能会重复消费。

  • Exactly Once:每条消息只会被精确消费一次,需要正确处理事务并与外部系统集成,以确保端到端的精确一次处理。

8. Kafka Streams 与 Kafka Connect

  • Kafka Streams:Kafka 提供的流处理 API,可以直接对 Kafka 中的数据进行转换、过滤、聚合等操作,构建实时的流式处理应用。

  • Kafka Connect:用于将 Kafka 与外部系统(如数据库、文件系统等)连接,实现数据的导入和导出。

9. Broker 与集群(Cluster)

  • Broker 是 Kafka 集群中的一个物理或逻辑节点,它负责存储和管理分区的数据并处理生产者和消费者的请求。

  • Cluster(集群) 由多个 broker 组成,多个 broker 共同存储和处理 Kafka 中的所有数据。Kafka 的高可用性和扩展性依赖于集群中的多个 broker 协作。

10. Kafka 的高可用性与扩展性

  • 高可用性:通过分区和副本,Kafka 保证了当某些 broker 宕机时,集群仍能继续服务。

  • 扩展性:通过增加 broker 和分区,可以横向扩展 Kafka 集群的吞吐量和存储容量。

11. Kafka Broker 的角色

  • Broker 存储的是分区(Partition),这些分区可以属于不同的 topic。Kafka 的扩展单元是 broker,通过增加 broker 可以提高集群的处理能力和存储能力。

  • Controller 角色:集群中的一个 broker 被选为 Controller,负责管理分区的 leader 选举和元数据同步。

12. Kafka 容易混淆的概念

Kafka 中有一些概念容易让初学者混淆,以下是一些常见的误区和解释:

1. Topic vs. Partition

  • Topic 是逻辑概念,用于分类和存储消息。Partition 是物理概念,是对 topic 的分片,每个 topic 可以有多个分区。

  • 分区是物理存储的基本单元,每个分区内的消息是有序的。消息的顺序性仅在分区内部保证,而不是在整个 topic 范围内保证。

2. Consumer vs. Consumer Group

  • Consumer Group 是多个消费者的集合,每个消费者组中的消息消费是相互独立的。

  • 同一个消费者组内,每条消息只会被其中一个消费者消费。不同消费者组之间可以独立地消费同一个 topic 的消息。因此,同一个 topic 的消息可以被不同的消费者组重复消费。

3. Offset 的管理

  • Offset 是分区中每条消息的唯一标识,Kafka 提供了自动和手动提交 offset 的方式。

  • 自动提交 offset 容易导致消息丢失,特别是在消费者发生故障时,因此在关键业务中通常推荐手动提交 offset,以确保消息的可靠处理。

4. Leader 与 Follower 副本

  • Leader 副本 负责处理生产者和消费者的请求,Follower 副本 负责同步数据。

  • 当 Leader 副本所在的 broker 出现问题时,Kafka 会从 Follower 中选举一个新的 Leader,这样可以确保集群的高可用性。

  • 许多人误以为分区的 Leader/Follower 角色会负载均衡处理请求,但实际上 Leader 负责所有读写请求,而 Follower 只做同步。

5. Retention vs. Log Compaction

  • Retention 是基于时间或大小来删除旧的消息,而 Log Compaction 是保留每个 key 的最新值。

  • Retention 会在消息超过保留时间或日志大小时删除,而 Log Compaction 是基于 key 的最新状态来进行保留,适用于需要保留数据最新状态的场景。

6. Broker vs. Cluster

  • Broker 是 Kafka 的物理节点,负责存储和管理分区的数据,处理生产者和消费者的请求。

  • Cluster 是由多个 broker 组成的 Kafka 集群,多个 broker 协同工作,以实现分布式存储和处理。

7. Acks(Acknowledgement)

  • acks=0, 1, all 决定了生产者在发送消息时需要的确认级别。

    • acks=0:生产者不会等待 Kafka 的确认,有可能会丢失数据。

    • acks=1:生产者等待 Leader 副本确认消息写入。

    • acks=all:生产者等待所有副本都确认写入,但这并不等于 100% 安全,因为如果 Follower 副本未及时同步,仍然可能丢失数据。

总结

Kafka 的核心概念包括 Broker、Topic、Partition、Replication、Producer、Consumer、Consumer Group、Offset、Retention Policy、Kafka Streams 和 Kafka Connect 等。理解这些概念可以帮助你更好地掌握 Kafka 的使用,了解它是如何实现高吞吐量、可扩展性和高可用性的。Kafka 的架构设计使它非常适合大规模的分布式数据流处理,具备良好的可扩展性和容错性。

如果你对 Kafka 有更多的兴趣,建议深入了解 Kafka Streams 和 Kafka Connect 的使用,以及如何通过配置实现精确一次处理的消费模式。

License:  CC BY 4.0