你可以先记一句总纲:
Kafka 本质上是一个分布式、分区、可复制的消息日志系统;它靠分区做并行和扩展,靠副本机制做高可用。
一、先把 Kafka 想成一个"大型快递分拣中心"
你可以这样理解:
-
Producer:发快递的人
-
Consumer:收快递 / 处理快递的人
-
Broker:快递仓库服务器
-
Topic:快递分类区,比如"订单消息""支付消息"
-
Partition:一个分类区再拆成多个货架
-
Offset:消息在货架上的编号
二、Kafka 架构到底是什么
比如现在有一个 order 主题,专门放订单消息。
但是订单太多了,不能全堆在一个地方,所以 Kafka 会把这个 Topic 拆成多个 Partition(分区):
-
order-0
-
order-1
-
order-2
你就把它理解成:
一个大仓库里的多个货架。
这样做的好处是:
1)能放更多消息
一个货架放不下,就分多个货架放。
2)能更快处理
多个消费者可以同时处理不同分区的消息,提高并发。
所以 Kafka 的核心设计就是:
Topic 用来分类,Partition 用来分摊存储和并发。
三、Kafka 是怎么工作的
流程特别简单,你记 3 步就行:
第一步:生产者发消息
比如订单系统发来一条消息:
"订单 1001 已创建"
Producer 把它发到 order 这个 Topic。
第二步:Kafka 把消息写进某个分区
Kafka 会把这条消息放到某个 Partition 里,比如 order-1。
而且 Kafka 不是到处乱插,它是:
顺序追加写入
就像往笔记本后面一行一行记。
所以每条消息都会有一个位置编号,这就是 offset。
比如:
-
offset 0
-
offset 1
-
offset 2
第三步:消费者按顺序读取
Consumer 会去这个分区里按 offset 顺序读取消息,再处理业务。
所以 Kafka 的工作原理其实就一句话:
生产者把消息写进分区,消费者再从分区按顺序读出来。
第三步:消费者按顺序读取
Consumer 会去这个分区里按 offset 顺序读取消息,再处理业务。
所以 Kafka 的工作原理其实就一句话:
生产者把消息写进分区,消费者再从分区按顺序读出来。
五、Kafka 怎么保证高可用
这个你就记住:
靠副本机制。
比如 order-1 这个分区,不只存在一台机器上,还会复制多份:
-
一份在 Broker A
-
一份在 Broker B
-
一份在 Broker C
这些副本里会选一个 Leader ,其他的是 Follower。
Leader 和 Follower 是什么
Leader
真正对外干活的那个:
-
生产者写消息找它
-
消费者读消息也找它
Follower
平时不直接对外提供读写,
主要负责:
跟着 Leader 同步数据
如果 Leader 挂了怎么办
比如 Broker A 挂了,Leader 没了。
这时候 Kafka 会从 Follower 里选一个新的 Leader,
比如 Broker B 顶上来继续工作。
所以用户基本不会感知到太大影响。
这就是 Kafka 的高可用核心:
一个分区有多个副本,Leader 挂了,Follower 可以顶上。
六、为什么这样就不容易丢数据
因为消息不是只存在一台机器上,而是会同步到多个副本。
Kafka 通过分区副本机制保证高可用,通过 Leader/Follower 切换避免单点故障。
七、最通俗总结
你就把 Kafka 想成这样:
-
Topic 是仓库分类区
-
Partition 是货架
-
Producer 往货架上放货
-
Consumer 从货架上拿货
-
副本就是同样的货架再备份几份
-
Leader 是当前负责对外服务的主货架
-
主货架坏了,备份货架立刻顶上
八、面试回答版
Kafka 可以理解成一个分布式消息仓库 。Producer 负责发消息,Broker 负责存消息,Topic 是消息分类,一个 Topic 会被拆成多个 Partition,也就是多个分区。这样做的好处是既能把消息分散存储,又能让多个消费者并行处理,提高吞吐量。Kafka 的工作原理就是:生产者把消息写到某个 Partition 中,Kafka 按顺序追加保存,每条消息都有一个 offset;消费者再按 offset 顺序拉取消费。
Kafka 的高可用主要靠副本机制 。每个 Partition 会有多个副本 ,其中一个是 Leader,对外负责读写 ,其他是 Follower,负责同步 Leader 的数据。如果 Leader 所在机器挂了,Kafka 会从 Follower 中重新选一个新的 Leader 继续服务,所以它可以避免单点故障。