【Note】《Kafka: The Definitive Guide》 第5章:深入 Kafka 内部结构,理解分布式日志系统的核心奥秘

《Kafka: The Definitive Guide》 第5章:深入 Kafka 内部结构,理解分布式日志系统的核心奥秘

Apache Kafka 在表面上看似只是一个“分布式消息队列”,但其背后的存储架构、分区机制、复制策略与高性能设计,才是它在千万级 TPS 场景中立足的根本。


一、Kafka 的核心逻辑结构

Kafka 是一个分布式日志服务(distributed commit log),核心概念有以下几类:

Topic

  • Kafka 中的逻辑消息分类单位;
  • 每个 Topic 由一个或多个 Partition(分区) 组成;
  • Topic 是用户使用 Kafka 的“主题入口”。

Partition

  • Kafka 的核心并发/可扩展单元
  • 每个分区是一个有序且不可变的消息队列;
  • 每条消息都有唯一递增的 Offset
  • 同一 Topic 下的 Partition 可横跨多个 Broker。

Segment 文件

  • 分区在磁盘上以日志段(segment)文件存储;
  • 默认大小 1GB,文件名即 segment 起始 offset;
  • Kafka 对日志段定期轮转、压缩、删除,保持长时间存储能力。

二、消息写入的完整流程(Producer → Broker)

Kafka 的写入流程,遵循以下路径:

Producer → Kafka Broker → 分区 → Segment 文件

写入流程详解:

  1. Producer 将消息发送到指定的 Topic;
  2. Kafka Broker 根据分区策略决定目标 Partition;
  3. 消息写入 Partition 对应的 segment 文件(磁盘顺序写);
  4. Kafka 使用 页缓存(page cache)mmap 文件映射,实现高效磁盘 IO;
  5. Producer 可选择 acks 确认级别,决定消息写入是否可靠(0/1/all)。

三、消息读取流程(Consumer ← Broker)

Kafka 的消费流程为:

Consumer ← Kafka Broker ← Segment ← Offset

消费流程详解:

  1. Consumer 使用 offset 拉取数据;
  2. Kafka 从目标 Partition 的 segment 文件读取数据块;
  3. 消息是按 offset 顺序读取(页缓存命中率高);
  4. Kafka 将数据直接从磁盘 mmap 到内存,避免数据拷贝;
  5. Kafka 不需要维护消费者状态,由 Consumer 管理 offset。

四、副本机制:Leader & Follower

Kafka 为保证数据高可用,引入了 副本复制机制

角色说明
Leader 副本接收所有写请求,处理读写逻辑
Follower 副本被动同步 Leader 数据,保持一致性

Kafka 中每个分区有 N 个副本(replication.factor),其中一个是 Leader,其余是 Follower。

ISR(In-Sync Replicas)

  • Kafka 保证高可用依赖于ISR 列表
  • ISR 是 Leader + 所有“同步进度落后不超过阈值”的 Follower;
  • 若 Follower 落后太多或宕机,将被踢出 ISR。

acks=all 时,只有 ISR 中所有副本都写入成功,Producer 才收到成功确认。


五、Kafka 的存储结构细节

Kafka 为实现高效的持久化日志系统,设计了以下结构:

Segment 文件

  • 每个 Partition 对应一个日志目录;
  • Segment 命名格式为 <base_offset>.log
  • Kafka 写入时始终追加到当前 active segment;
  • 达到文件大小或时间阈值后轮转生成新的 segment。

索引文件

每个 segment 文件配套两个索引:

索引类型文件后缀作用
Offset 索引.index查找消息在 log 文件中的位置
时间戳索引.timeindex支持基于时间点的消息查找

这些索引在内存中加载一部分以加快访问。


六、Kafka 的高性能 IO 原因

Kafka 能做到高吞吐和低延迟,背后有以下系统设计:

技术说明
顺序写磁盘避免随机 IO,利用 OS 的预读机制
mmap 映射文件避免内核态/用户态拷贝
零拷贝(sendfile)Consumer 拉取数据时可直接从文件送到 socket
批量发送producer 批量推送提高网络效率
页缓存(Page Cache)热数据常驻内存,避免频繁磁盘读写

七、控制器(Kafka Controller)

Kafka 集群中有一个特殊角色:Controller Broker,负责协调分区元数据。

Controller 作用:

  • 管理分区 Leader 的选举;
  • 监控 Broker 节点状态;
  • 响应 ZooKeeper 状态变化(旧版);
  • 向所有 Broker 广播元数据变更;

从 Kafka 2.x 起,Kafka 开始引入 KRaft 模式(Kafka 自主元数据管理),以摆脱 ZooKeeper 依赖。


八、容错与恢复机制

Kafka 为保证数据一致性与高可用,采用了多种机制:

机制说明
多副本复制保证分区数据不因 Broker 故障丢失
写入持久化写入后持久化到磁盘 segment
ACK 机制支持不同级别的确认策略
ISR 管理保证副本之间同步一致性
分区 Leader 切换Broker 故障自动迁移 leader,快速恢复

总结:Kafka 内部架构核心一览

模块说明
Partition并发和容错的基本单位
Segment高效磁盘结构,实现顺序写与查找
Index提高 offset 与时间点查找效率
Replication保证数据可靠性的核心机制
Controller维护整个集群元数据一致性
Page Cache + mmap实现近似内存级别的读写速度

Kafka 的内部架构体现了“日志即数据库”的理念。它本质是一个高可用、高吞吐、可持久化的分布式日志系统,通过简单却强大的设计理念(Partition + Segment + Replication),满足了数以千计公司在海量数据处理中的实时性与可靠性需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87890.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当“漏洞”成为双刃剑——合法披露与非法交易的生死线在哪里?

首席数据官高鹏律师数字经济团队创作&#xff0c;AI辅助 一、一场“漏洞”的博弈&#xff1a;从“手术刀”到“毒药”的分界 2025年夏&#xff0c;某电商平台因系统漏洞被曝光&#xff0c;引发舆论风暴。白帽子甲在发现漏洞后&#xff0c;第一时间联系平台技术团队&#xff0…

Hadoop 分布式存储与计算框架详解

Hadoop开发实战:https://www.borimooc.com/course/1004.htm hadoop是适合海量数据的分布式存储&#xff0c;和分布式计算的框架 hadoop有三大组件: mapreduce&#xff1a;适合海量数据的分布式计算&#xff0c;分为map阶段、shuffle阶段和reduce阶段hdfs&#xff1a;分布式文…

LeetCode 2099.找到和最大的长度为 K 的子序列:自定义排序

【LetMeFly】2099.找到和最大的长度为 K 的子序列&#xff1a;自定义排序 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-subsequence-of-length-k-with-the-largest-sum/ 给你一个整数数组 nums 和一个整数 k 。你需要找到 nums 中长度为 k 的 子序列 &#x…

循环移位网络设计

总体架构 模块描述 循环移位网络模块&#xff08;模块名&#xff1a;VAL_CS_PROC&#xff09;&#xff0c;对输入数据&#xff08;in_data&#xff09;做循环移位处理&#xff0c;两个cycle即可输出数据。 Fig 1 循环移位模块顶层 设计要求 00】 支持对data_num个有效数据做…

IO进程线程(IPC通讯)

目录 一、IPC通讯机制 1&#xff09;传统的通讯机制&#xff1a; 2&#xff09;systemV 的通讯机制&#xff1a; 3&#xff09;跨主机的通讯机制&#xff1a; 1、无名管道 1&#xff09;无名管道的概念 2&#xff09;无名管道的函数 3&#xff09;无名管道通讯&#xf…

Webpack 5 核心机制详解与打包性能优化实践

&#x1f916; 作者简介&#xff1a;水煮白菜王&#xff0c;一个web开发工程师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 前端专栏 &#xff0c;记录一下平时在博客写作中&#xff0c;总结出的一些开发技巧和知识归纳总结✍。 感谢支持&#x1f495;&#x1f495;&am…

Manus AI与多语言手写识别

技术文章大纲&#xff1a;Manus AI与多语言手写识别 引言 手写识别技术的发展背景与市场需求Manus AI的定位与核心技术优势多语言场景下的挑战与机遇 Manus AI的核心技术架构 基于深度学习的端到端手写识别模型多模态数据融合&#xff08;笔迹压力、书写轨迹等&#xff09;…

Go与Python爬虫对比及模板实现

go语言和Python语言都可选作用来爬虫项目&#xff0c;因为python经过十几年的累积&#xff0c;各种库是应有尽有&#xff0c;学习也相对比较简单&#xff0c;相比GO起步较晚还是有很大优势的&#xff0c;么有对比就没有伤害&#xff0c;所以我利用一个下午&#xff0c;写个Go爬…

Vidwall: 支持将 4K 视频设置为动态桌面壁纸,兼容 MP4 和 MOV 格式

支持将 4K 视频设置为动态桌面壁纸&#xff0c;兼容 MP4 和 MOV 格式。只需将视频拖入应用界面&#xff0c;点击即可立即应用为桌面背景。 为桌面增添生动趣味的动态壁纸效果&#xff01;录制视频时设置动态背景&#xff0c;也能让画面更吸引人。 &#x1f4e5; https://apps.…

【LeetCode 热题 100】234. 回文链表——快慢指针+反转链表

Problem: 234. 回文链表 题目&#xff1a;给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 文章目录 整体思路完整代码时空复杂度时间复杂度&#xff1a;O(N)空间复杂度&#…

【源力觉醒 创作者计划】开源、易用、强中文:文心一言4.5或是 普通人/非AI程序员 的第一款中文AI?

前言 你有没有发现&#xff0c;AI 正在悄悄渗透进我们的生活&#xff1a;写文案、画插图、做PPT、答作业&#xff0c;它几乎无所不能&#x1f60d; &#xff01;但很多人可能会问&#xff1a; AI&#xff0c;我能用吗&#xff1f;用得起吗&#xff1f;适合我吗&#xff1f;特别…

【保姆级喂饭教程】Git图形化客户端Sourcetree安装及使用教程

目录 前言一、SourceTree简介二、安装教程三、使用教程1. 添加仓库 四、评价总结后记参考文献 前言 在查找Git Flow实现工具的时候&#xff0c;看到了SourceTree&#xff0c;支持Git Flow、GitHub Flow等多种Git工作流&#xff0c;安装简单学习一下。 一、SourceTree简介 Git的…

【kafka】kafka3.3.2常用命令

查看kafka服务版本 [rootlocalhost eicar]# kafka-server-start.sh --version [2025-06-23 11:10:54,106] INFO Registered kafka:typekafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$) 3.3.2 (Commit:b66af662e61082cb) [rootlocalhost eicar]#查看消…

LastActivityView -查看电脑上的所有操作记录

LastActivityView 是一款由 NirSoft 开发的免费工具&#xff0c;适用于 Windows 操作系统。它能够通过分析系统日志、Prefetch 文件、图标缓存数据库、注册表以及蓝屏 Dump 文件等多种来源&#xff0c;综合展示电脑从安装系统至今的所有操作记录。 LastActivityView 的功能 L…

English Practice - Day 3

Hi ChatGPT, I am back. can we start today’s english practice? Welcome back, Kelly! &#x1f60a; Yes — let’s begin today’s English practice! You’re doing great by showing up consistently. &#x1f4aa; Q&#xff1a; What’s the weather like today w…

quickbi看板内嵌入powerbi页面(含单点登录解决方法)

quickbi看板内嵌入powerbi页面&#xff08;含单点登录解决方法&#xff09; 实现步骤 要实现在quickbi看板中嵌入powerbi页面&#xff0c;分4步来实现。 1. 新建quickbi看板&#xff0c; 2. 添加内嵌页面 3. 获取Powerbi链接 4. 将powerbi链接粘贴到内嵌页面中 第一步&am…

CentOS-6如何配置网络设置IP? 笔记250706

CentOS-6如何配置网络设置IP? 笔记250706 1️⃣ 参考 1 CentOS 6 网络配置完全指南 在 CentOS 6 中配置网络设置主要涉及修改 /etc/sysconfig/network-scripts/ 目录下的配置文件。以下是详细配置步骤&#xff1a; 一、配置静态 IP 地址 1. 编辑网卡配置文件 vi /etc/sys…

WPF学习笔记(24)命令与ICommand接口

命令与ICommand接口一、命令1. ICommandSource2. 示例3. CommandBinding二、ICommand1.ICommand接口2. ICommand用法3. CanExecute总结一、命令 官方文档&#xff1a;https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/advanced/commanding-overview 1. ICommandSource 官…

TCP长连接保持在线状态

TCP长连接是指在一次TCP连接建立后&#xff0c;保持连接状态较长时间&#xff0c;用于多次数据传输&#xff0c;而不是每次通信后立即断开。这种机制对于需要频繁通信的应用非常重要。 保持TCP长连接在线的方法 1. 心跳机制(Heartbeat) 实现原理&#xff1a;定期发送小数据包…

华为OD机试 2025B卷 - 报文响应时间 (C++ Python JAVA JS C语言)

2025B卷目录点击查看: 华为OD机试2025B卷真题题库目录|机考题库 + 算法考点详解 2025B卷 100分题型 题目描述 IGMP 协议中,有一个字段称作最大响应时间 (Max Response Time) ,HOST收到查询报文,解折出 MaxResponsetime 字段后,需要在 (0,MaxResponseTime] 时间 (s) 内选…