Kafka是大型架构的必备中间件,下面我重点来详解Kafka底层原理@mikechen
Kafka
Kafka是由LinkedIn开源的分布式流处理平台,现由Apache基金会维护。
Kafka,是一个高吞吐量、低延迟、可扩展的分布式消息队列。
Kafka 主要用于以下场景:
日志收集系统:如 ELK、数据平台日志采集;
实时数据管道:如用户行为数据、金融交易流水;
流式计算输入源:与 Flink、Storm …等配合使用
异步解耦:实现系统间的松耦合,提高系统稳定性与可维护性。
Kafka底层原理
Kafka架构,由多个 Kafka Broker 组成,每个 Broker 负责管理一部分数据的读写请求。
Kafka 集群同时包含以下组件:
Broker
Kafka 服务器,负责接收生产者的消息、保存消息、供消费者拉取。
核心职责包括:
- 存储 Topic 下各个 Partition 的消息数据;
- 处理 Producer 的写入请求、和 Consumer 的读取请求;
- 管理分区副本及其状态(Leader/Follower);
- 对接 Zookeeper(或 KRaft)获取和更新元数据。
Producer
客户端应用,向 Kafka Topic 发送消息。
核心功能:
创建消息: 将业务数据封装成 Kafka 消息,消息通常包含 Key、Value 和可选的 Headers。
分区策略: 决定消息应该发送到 Topic 的哪个 Partition。
常见的分区策略包括轮询(Round Robin)、基于 Key 的哈希(Key-based Hashing)以及自定义分区策略。
异步发送与批量发送:Producer 可以选择同步、或异步发送消息。
为了提高吞吐量,Producer 通常会将多个消息,批量发送到 Broker。
Consumer
Consumer 是 Kafka 的消息消费者,负责订阅一个或多个 Topic,并从这些 Topic 的 Partition 中读取和处理消息。
Consumer 通常属于一个 Consumer Group,同一个 Group 中的 Consumer 实例协同消费订阅的 Partition。
Topic和Partition
Topic是Kafka中消息的逻辑分类,每条消息发布到某个Topic。
Partition是Topic的物理分片,Topic由多个Partition组成,Partition内消息有序。
Partition设计使Kafka能并行处理消息,提升吞吐量。
消息生产时,Producer根据消息Key或自定义策略决定写入哪个Partition。
Partition数量决定了Topic的并发度和扩展能力。
Zookeeper/KRaft
Zookeeper 或 KRaft(Kafka Raft)是 Kafka 用于管理集群元数据的组件。
在传统的 Kafka 架构中,Zookeeper 负责存储集群的配置信息、Topic 和 Partition 的元数据、。
以及,Broker 的注册信息、以及进行控制器(Controller)的选举等关键任务。
新版 Kafka 架构中,采用 KRaft 替代 Zookeeper)。
工作流程
以上组件,工作流程如下:
步骤 1: Producer -> Broker (发送消息)
步骤 2: Broker (存储消息)
步骤 3: Broker -> Zookeeper/KRaft (注册/更新元数据)
步骤 4: Consumer -> Zookeeper/KRaft -> Broker (获取元数据/拉取消息)
步骤 5: Broker -> Consumer (发送消息)
步骤 6: Consumer -> Broker (提交 Offset)