Kafka原理最全详解(图文全面总结)

Kafka是大型架构的必备技能,下面我重点来详解Kafka原理@mikechen

Kafka原理

Kafka 是一个高吞吐、分布式、可持久化的消息系统。

Kafka核心,由以下几个组件组成:

Kafka原理最全详解(图文全面总结)-mikechen

Producer(生产者)

生产者负责将数据写入 Kafka 的指定 Topic,关键特性包括:

发送机制:生产者通过网络向 Kafka Broker 发送消息,支持异步和同步发送方式。

分区策略:默认通过轮询或 hash(key) 来选择 Partition;也可自定义分区器。

批量发送(batching):为了提升吞吐量,Kafka 支持将多条消息打包成批进行发送。

幂等性与事务性:开启幂等性后,Kafka 能防止重复写入;事务性Producer可以保证跨分区的原子性写入。

 

 Consumer(消费者)

消费者负责从 Kafka 中拉取消息进行消费,关键特性包括:

Kafka原理最全详解(图文全面总结)-mikechen

拉模式消费:Kafka 采用拉取(pull)模式,由消费者主动请求数据。

消费者组(Consumer Group):多个消费者可组成一个组,组内的消费者分摊分区,达到水平扩展。

Offset 管理:消费者负责管理自己消费的位置(offset),可选择自动或手动提交。

再均衡机制(Rebalance):当消费者变化(上下线)时,Kafka 会触发重新分配分区,保证分区只被一台消费者消费。

 

Broker(服务节点)

Broker 是 Kafka 集群中的一个服务实例,通常运行在一台或多台服务器上。

Kafka 集群:由一个、或多个 Broker 组成,其职责包括:

Broker 负责接收 Producer 发送的消息,并将这些消息持久化到本地磁盘。

管理 Partition, 每个 Broker 可以管理一个、或多个 Topic 的 Partition。

Kafka 通过副本机制来提高数据的可靠性,每个 Partition 可以有多个副本,分布在不同的 Broker 上。

还负责Leader 选举,每个 Partition 有一个 Leader Broker 负责读写操作,其他副本为 Follower,只做同步。

 

Topic & Partition(主题与分区)

Kafka 以 Topic 为基本的数据分类单位:

Kafka原理最全详解(图文全面总结)-mikechen

Topic:逻辑上类似于一个日志主题,生产者往 Topic 写入数据,消费者从中读取。

Partition:为了实现并发和分布式处理,每个 Topic 可以被划分为多个 Partition,分布在不同 Broker 上。

Offset:每个 Partition 内部的消息都有一个唯一编号,称为 Offset,用于追踪消费进度。

 

Zookeeper / KRaft(元数据管理)

在早期的 Kafka 版本中,ZooKeeper 是 Kafka 集群的关键外部依赖,负责管理 Kafka 的元数据信息。

ZooKeeper 的性能瓶颈,可能会影响 Kafka 集群的扩展性,所以现在逐步过渡到 KRaft 模式(Kafka 自身实现的元数据服务)。

KRaft 模式(Kafka Raft),Kafka 自主实现 Raft 协议,不依赖 Zookeeper;

Kafka 工作流程

Kafka 的核心工作流程可以概括为“生产 – 存储 – 消费”三阶段:

Kafka原理最全详解(图文全面总结)-mikechen

1.生产阶段

Producer 将消息发送到 Kafka 的某个 Topic;

Kafka 根据分区规则决定数据写入哪个 Partition;

数据首先写入内存缓冲区,然后刷入磁盘中的日志文件。

2.存储阶段

Kafka 将数据以 Segment 文件形式存储在磁盘上;

利用顺序写+Page Cache 机制实现高吞吐;

数据可以根据时间/大小进行自动清理或压缩。

3.消费阶段

Consumer 拉取 Topic 中的 Partition 数据;

按 offset 顺序读取;

消费完成后提交 offset(位点);

消费者组可实现分区并行消费,提高处理能力。

评论交流
    说说你的看法
欢迎您,新朋友,感谢参与互动!