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

相关推荐
AI人工智能+电脑小能手13 小时前
【大白话说Java面试题】【Java基础篇】第20题:HashMap在计算index的时候,为什么要对数组长度做减1操作
java·开发语言·数据结构·后端·面试·哈希算法·hash-index
嵌入式×边缘AI:打怪升级日志13 小时前
嵌入式Linux开发(了解交叉编译工具链的组成)
java·linux·运维
FreeGo~13 小时前
Linux 系统编程 进程篇 (五)
java·linux·服务器
sunneo13 小时前
专栏B-产品心理学深度-06-说服架构
人工智能·架构·产品运营·产品经理·ai编程·ai-native
phltxy13 小时前
Spring Cloud入门到实战:微服务架构一站式学习
spring cloud·微服务·架构
XiYang-DING14 小时前
【Java EE】定时器
java·python·java-ee
Fuly102414 小时前
java面试知识点复习
java·开发语言·面试
ting945200014 小时前
纳米 AI 全面解析:定义原理、技术架构、落地场景、行业变革与未来发展趋势
人工智能·架构
YJlio14 小时前
Windows Internals 读书笔记 10.3.3:Task Scheduler 架构详解
人工智能·windows·笔记·python·学习·chatgpt·架构
AI木马人14 小时前
4.人工智能实战:大模型服务如何避免被突发流量打崩?从“接口直连GPU”到“队列调度架构”的完整工程重构
人工智能·重构·架构