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

相关推荐
摇滚侠7 分钟前
SpringMVC 入门到实战 配置类替换 XML 配置文件 86-91
xml·java·后端·spring·maven·intellij-idea
栗子~~9 分钟前
金融场景下BigDecimal 运算规范 + 常用场景使用 + 数据库字段设计详解
java·数据库·金融
我登哥MVP13 分钟前
SpringCloud Alibaba 核心组件解析:服务注册与发现(Nacos)
java·spring boot·后端·spring·spring cloud·java-ee·maven
兰令水18 分钟前
leecodecode【单调栈】【2026.6.12打卡-java版本】
java·开发语言·算法
G_whang19 分钟前
AgentMemory — 持久记忆系统:安装、架构与深度使用指南
ai·架构
云烟成雨TD23 分钟前
Agent Scope Java 2.x 系列【8】工具调用
java·人工智能·agent
meilindehuzi_a29 分钟前
构建基于 RESTful 架构的 TodoList 全栈应用:从前后端理论到 TypeScript/Bun 实战
架构·typescript·restful
开开心心就好30 分钟前
解决截图被拦截黑屏问题的免费小工具
安全·智能手机·flink·kafka·pdf·音视频·1024程序员节
AI人工智能+电脑小能手31 分钟前
【大白话说Java面试题 第112题】【并发篇】第12题:AQS 中节点的入队时机有哪些?
java·开发语言·面试
摇滚侠32 分钟前
SpringMVC 入门到实战 处理静态资源的过程 64
java·后端·spring·maven·intellij-idea