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

相关推荐
东北赵四16 小时前
关于Java泛型的知识点及其相关面试题
java·windows·python
姓蔡小朋友16 小时前
Java线程并发
java·开发语言·python
EnCi Zheng16 小时前
AI Agent(AI智能体) 记忆管理系统设计 — 从向量库边界到生产级 Memory(记忆) 架构
人工智能·架构
纵有疾風起16 小时前
从OSI到TCP/IP——分层架构的思想根源与模型之争
tcp/ip·计算机网络·架构·osi·408·体系结构·分层
执笔画流年呀16 小时前
⾃动化测试常⽤函数
java·dubbo
疯狂打码的少年16 小时前
【面向对象】UML概述(基本构造块:事物/关系/图)
java
byte_conn16 小时前
高压级联储能通信架构:CAN隔离与光纤中继的选型实战
网络·架构·制造·信息与通信
一水17 小时前
TTFT优化:一个方案的5次推倒重来
java·ai·状态模式
AC赳赳老秦17 小时前
CSDN 技术社区数据采集:OpenClaw 抓取公开技术热帖,生成领域技术热点周报
java·大数据·前端·数据库·python·php·openclaw