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

相关推荐
CET中电技术2 小时前
中压(公共连接点10kV及以上)分布式光伏项目,四可如何改造?
分布式
indexsunny2 小时前
互联网大厂Java面试实战:从Spring Boot到微服务与Kafka的深度探讨
java·spring boot·junit·kafka·mybatis·hibernate·microservices
2501_933329552 小时前
万字拆解Infoseek舆情监测系统:基于大模型+多模态的分布式舆情中台架构实践
人工智能·分布式·架构·媒体
only-qi2 小时前
分布式系统四问:幂等、时钟、隔离、权衡
架构·分布式事务·幂等性·时钟回拨·性能与一致性权衡
一叶飘零_sweeeet2 小时前
击穿分布式时钟底层:从时钟偏移到线性一致性,工业级时序设计全实战
分布式·分布式时钟
某林2122 小时前
主流 3D SLAM 算法核心架构深度解析:VINS、ORB-SLAM3 与 FAST-LIO
算法·3d·架构
星辰_mya2 小时前
三级缓存破局:Spring 如何优雅解决循环依赖?
java·spring·缓存·面试
BUG胡汉三2 小时前
Java内网代理访问HTTPS接口SSL证书不匹配
java·https·ssl
洛邙2 小时前
互联网大厂Java求职面试实录:Spring Boot与微服务实战解析
java·spring boot·缓存·微服务·面试·分布式事务·电商