Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

  • Spring

  • SpringCloud

  • MySQL

  • Redis

  • 分布式

  • Zookeeper

  • Dubbo

  • Kafka

    • Kafka的架构
    • docker搭建Kafka集群
    • spring关于kafka的最全配置
    • kafka分主副节点吗
    • kafka的 topic, key , 分区的关系,以及数量对应关系,以及默认值
    • spring项目是事先创建topic还是代码里创建
    • 一个topic一般创建几个分区,几个副本数,只有三个broker的话又是怎么分布的
    • 一共有3个broker,一个topic有10个分区,副本数最大为3?分区又是怎么分布在3个broker上的?用的什么算法
    • 副本数和分区数什么区别
    • 我还是不明白副本数,请画出具体的分布图,3个broker,某个topic10个分区
    • Leader+​​Follower = 副本数?
    • ​​ISR(In-Sync Replicas)是什么,最多有多少个,这个数量怎么得来的
    • 在 Spring Kafka 中发送消息
    • 向kafka中发送重复的数据会怎么样
    • send消息时,key有什么用?
  • 数据结构

  • 算法

  • OJ

  • 从道家哲学看计算机?
  • 后端
  • Kafka
plantre
2025-05-08

Kafka的架构

Kafka的架构解析
Kafka是一种高吞吐量、低延迟的分布式流处理平台,其架构设计围绕数据的高效传输、持久化与分布式处理展开。以下是其核心架构组件的详细说明:


1. 核心组件与角色
• Producer(生产者)

• 功能:将消息发布到指定主题(Topic),支持自定义分区策略(如轮询、哈希分区)。

• 关键特性:

◦ 幂等性:通过`Producer ID`和`Sequence Number`避免重复消息。  

◦ 批量发送:合并消息成批次提交,减少网络开销。  

• Broker(代理节点)

• 功能:存储消息并处理读写请求,集群中每个Broker负责多个分区的数据存储。

• 关键机制:

◦ Leader-Follower副本:每个分区有一个Leader(处理读写)和多个Follower(同步数据)。  

◦ ISR(同步副本集合):仅ISR中的副本可参与Leader选举,确保数据一致性。  

• Consumer(消费者)

• 功能:以消费者组(Consumer Group)形式订阅Topic,每个分区仅由组内一个Consumer消费。

• 关键特性:

◦ Offset管理:消费者消费进度(Offset)默认由Kafka内部Topic(`__consumer_offsets`)存储。  

◦ 动态分区分配:支持消费者故障时自动重平衡(Rebalance)。  

• Zookeeper与Kafka Controller

• 旧版依赖:Zookeeper管理元数据(Topic配置、Broker列表)和Leader选举。

• 新版改进:Kafka 2.8+引入KRaft模式,通过内置Raft协议取代Zookeeper,提升性能与独立性。


2. 数据模型与存储
• Topic(主题):

• 逻辑上的消息分类,支持多生产者/消费者订阅。

• Partition(分区):

• 物理存储单元:每个Topic分为多个分区,消息按顺序追加(不可修改),通过Offset唯一标识。

• 扩展性:分区可跨Broker分布,支持水平扩展至PB级数据。

• 日志保留策略:

• 按时间(如7天)或大小(如1TB)删除旧数据,保证存储可控。


3. 高可用性与容错机制
• 副本机制:

• 每个分区配置多副本(如3副本),Follower异步/同步复制Leader数据。

• 故障恢复:

• Leader故障时,从ISR中选举新Leader,避免数据丢失。

• 数据持久化:

• 依赖顺序写磁盘与操作系统页缓存,兼顾高性能与持久化。


4. 性能优化设计
• 零拷贝技术:

• 使用sendfile系统调用减少数据在内核态与用户态的拷贝次数。

• 批量处理:

• Producer批量发送消息,Consumer批量拉取数据,降低I/O开销。

• 分区并行性:

• 多分区并行读写,结合多消费者组实现高吞吐量处理。


5. 消费者模型与负载均衡
• 消费者组(Consumer Group):

• 队列模式:同一组内消费者均摊分区消息(如订单处理集群)。

• 发布-订阅模式:不同组独立消费全量消息(如日志分发场景)。

• Offset控制:

• 支持手动提交(commitSync)或自动提交,灵活应对不同业务场景。


总结
Kafka通过分布式分区存储、副本容错与高效I/O设计,实现了高吞吐量与低延迟的结合。其架构核心在于:

  1. 组件解耦:生产者、消费者与Broker独立扩展。
  2. 数据分片:通过分区支持水平扩展与并行处理。
  3. 去中心化演进:从依赖Zookeeper转向内置KRaft模式,降低运维复杂度。

实际应用中,需根据数据规模、延迟要求选择分区数与副本策略,并通过监控Consumer Lag(消费延迟)优化系统性能。

编辑 (opens new window)
上次更新: 2025/06/13, 00:51:28
​​Dubbo和SpringCloud适用场景
docker搭建Kafka集群

← ​​Dubbo和SpringCloud适用场景 docker搭建Kafka集群→

最近更新
01
集成loki
07-04
02
TCP的ESTABLISHED是什么意思
06-24
03
安装1panel
06-24
更多文章>
Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式