Kafka 架构和工作原理?Kafka 如何保证高可用?

你可以先记一句总纲:

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 继续服务,所以它可以避免单点故障。

相关推荐
LabVIEW开发6 小时前
LabVIEW QMH 队列消息处理架构
架构·labview·labview知识·labview功能·labview程序
二哈赛车手6 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
栗子~~6 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
YDS8296 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
rising start7 小时前
二、全面理解MySQL架构
mysql·架构
麦客奥德彪7 小时前
Android Skills
架构·ai编程
candyTong7 小时前
Claude Code 的 Edit 工具是怎么工作的
javascript·后端·架构
未若君雅裁8 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
AI人工智能+电脑小能手8 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
阿维的博客日记9 小时前
Nacos 为什么能让配置动态生效?(涉及 @RefreshScope 注解)
java·spring