Kafka深度解析与原理剖析

文章目录

  • 一、Kafka核心架构原理
        • 1. **分布式协调与选举**
        • 2. **ISR、OSR与HW机制**
        • 3. **高性能存储设计**
        • 4. **刷盘机制 (Flush)**
        • 5. **消息压缩算法**
  • 二、高可用与消息可靠性保障
        • 1. **数据高可用策略**
        • 2. **消息丢失场景与规避**
        • 3. **顺序消费保证**
  • 三、Kafka高频面试题精析
        • 1. **HW截断机制是什么?**
        • 2. **Kafka为什么快?**
        • 3. **如何避免重复消费?**
        • 4. **Rebalance触发的条件?**
        • 5. **Kafka如何实现高吞吐?**
  • 四、新一代架构:Kafka KRaft(HMA)
  • 物理实体与逻辑概念
      • **物理实体(Physical Entities)**
      • **逻辑概念(Logical Abstractions)**
      • **混合型概念(物理与逻辑的桥梁)**
      • **虚实关系图解**
      • **关键结论**

一、Kafka核心架构原理

1. 分布式协调与选举
  • Controller选举:Kafka集群中首个在ZooKeeper创建/controller节点的Broker成为Controller(或使用KRaft协议去ZK化)
  • Partition Leader选举:Controller监控ISR变化,优先从ISR列表中选举新Leader(默认unclean.leader.election.enable=false确保数据一致性)
2. ISR、OSR与HW机制
  • ISR (In-Sync Replicas):与Leader保持同步的副本集合(包含Leader自身)
  • OSR (Out-of-Sync Replicas):滞后超过replica.lag.time.max.ms的副本
  • HW (High Watermark):所有ISR副本均已复制的最大偏移量,消费者可见的数据分界点
  • LEO (Log End Offset):当前副本最新消息的偏移量

关键公式HW = min(Leader_LEO, Follower1_LEO, Follower2_LEO, ...)

3. 高性能存储设计
  • Segment分片存储
    • 每个Partition拆分为多个Segment(默认1GB)
    • 文件命名基于基准偏移量(如00000000000036876912.log
    • 包含.log(数据)、.index(稀疏索引)、.timeindex(时间索引)
  • 内存映射优化:通过FileChannel.map()实现零拷贝读取
4. 刷盘机制 (Flush)
  • Page Cache优先:消息先写入OS页缓存,由操作系统异步刷盘
  • 同步刷盘策略
    • flush.messages:累计n条消息强制刷盘
    • flush.ms:间隔n毫秒强制刷盘
  • 权衡建议:通常采用异步刷盘(log.flush.interval.messages=10000)平衡性能与可靠性
5. 消息压缩算法
算法压缩比CPU消耗适用场景
gzip最高带宽敏感场景
snappy中等CPU敏感场景(默认)
lz4中等最低低延迟场景
zstd中等Kafka 2.1+ 平衡选择

生产者端设置compression.type启用压缩,Broker保持压缩状态存储。


二、高可用与消息可靠性保障

1. 数据高可用策略
  • Replica同步流程
    1. Producer发送消息至Leader
    2. Leader持久化消息并更新LEO
    3. Followers从Leader拉取消息(PULL模式)
    4. Follower持久化后返回ACK
    5. Leader更新HW并通知Followers
  • ACK确认机制
    • acks=0:不等待确认(可能丢失数据)
    • acks=1:Leader落盘即确认(默认)
    • acks=all:所有ISR副本落盘确认(最强保障)
2. 消息丢失场景与规避
场景解决方案
Producer端丢失设置acks=all + retries=N
Broker端丢失min.insync.replicas=2
Consumer端丢失关闭自动提交,处理完手动提交
3. 顺序消费保证
  • 关键条件:单分区内消息天然有序
  • 消费端策略
    • 使用单线程消费分区
    • 对Key做哈希路由,相同Key的消息发往同一分区
    • 避免分区重平衡导致乱序(max.poll.interval.ms调优)

三、Kafka高频面试题精析

1. HW截断机制是什么?

当Leader切换时,新Leader会将其HW设置为当前LEO,Follower比较自身HW与Leader的HW,将本地日志截断到HW位置,确保数据一致。

2. Kafka为什么快?
  • 零拷贝技术(sendfile系统调用)
  • 顺序磁盘I/O(Segment追加写入)
  • 页缓存(Page Cache)加速读写
  • 批量处理(Producer/Broker/Consumer)
3. 如何避免重复消费?
  • 幂等Producer:启用enable.idempotence=true,自动去重
  • 事务消息:跨会话精确一次语义(EOS)
  • 消费端:保证处理逻辑幂等性(如数据库唯一键)
4. Rebalance触发的条件?
  • 消费者组新增/退出实例
  • 订阅Topic分区数变化
  • 消费者超过session.timeout.ms未发送心跳
5. Kafka如何实现高吞吐?

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

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

相关文章

【教学类】20250605立体纸盘(3边形-22边形,角度5、10……40,45)

背景需求 在《自助餐》活动中, 【教学类-53-01】20240918自助餐餐盘-CSDN博客文章浏览阅读984次,点赞29次,收藏11次。【教学类-53-01】20240918自助餐餐盘https://blog.csdn.net/reasonsummer/article/details/142340542?spm1011.2415.300…

GC1809:高性能24bit/192kHz音频接收芯片解析

1. 芯片概述 GC1809 是数字音频接收芯片,支持IEC60958、S/PDIF、AES3等协议,集成8选1输入切换、低抖动时钟恢复和24bit DAC,适用于家庭影院、汽车音响等高保真场景。 核心特性 高精度:24bit分辨率,动态范围105dB&…

Next.js 中间件鉴权绕过漏洞 CVE-2025-29927

前言:CVE-2025-29927 是一个影响 Next.js 的严重漏洞&#xff0c;源于开发者信任了客户端请求中携带的 X-Middleware-Rewrite 头部字段。攻击者可以手动构造该头部&#xff0c;实现绕过中间件逻辑&#xff0c;访问本应受保护的资源或 API。 影响版本&#xff1a;Next.js < …

第1章 数据分析简介

第1章 数据分析简介 1.1 数据分析 当今世界对信息技术依赖日深,每天产生和存储海量数据,来源于自动检测系统、传感器、科学仪器,以及银行取钱、买东西、写博客、发微博等日常行为。 数据与信息在形式上不同:数据是无形式可言的字节流,难理解其本质;信息是对数据集处理后…

边缘计算网关赋能沸石转轮运行故障智能诊断的配置实例

一、项目背景 在环保行业&#xff0c;随着国家对大气污染治理要求的不断提高&#xff0c;VOCs废气处理成为了众多企业的重要任务。沸石转轮作为一种高效的VOCs治理设备&#xff0c;被广泛应用于石油化工、汽车制造、印刷包装等主流行业。这些行业生产规模大、废气排放量多&…

20250602在Ubuntu20.04.6下修改压缩包的日期和时间

rootrootrootroot-X99-Turbo:~$ ll -rwxrwxrwx 1 rootroot rootroot 36247187308 5月 23 10:23 Android13.0地面站.tgz* rootrootrootroot-X99-Turbo:~$ touch 1Android13.0地面站.tgz rootrootrootroot-X99-Turbo:~$ ll -rwxrwxrwx 1 rootroot rootroot 36247187308 6月…

windows无法安装到这个磁盘,选中的磁盘采用gpt分区仪式

解决办法&#xff1a; 我才用的是一个网友分享的微软官方解决办法&#xff0c;成功了&#xff0c;但是不知道会不会i有什么影响。将所有分区删掉&#xff0c;这时磁盘变成为分配的空间。我个人是两块固态&#xff0c;一块m.2&#xff0c;一块sata&#xff1b;所以我直接将500g…

使用Composer创建公共类库

概述 如果多个项目中存在使用相同类库、模块的情况&#xff0c;此时可以考虑将类库或者模块单独抽取出来&#xff0c;形成独立类库&#xff0c;通过composer 来进行依赖管理&#xff0c;这样可以更方便维护&#xff0c;大大提升开发效率。 优势 可以对特定模块进行统一维护和…

Ubuntu中TFTP服务器安装使用

TFTP服务器 在 Ubuntu 下使用 TFTP&#xff08;Trivial File Transfer Protocol&#xff09; 服务&#xff0c;通常用于简单的文件传输&#xff08;如网络设备固件更新、嵌入式开发等&#xff09;。 1 TFTP服务器安装 sudo apt-get install tftp-hpa sudo apt-get install…

前端面试总结

1.请做下自我介绍 技术栈 工作经历 2.挑一个项目详细讲一下 介绍了一个项目的业务&#xff0c;重点讲了一个动态表单的实现&#xff0c;从业务、扩展性、可维护性、性能提升 3.场景题&#xff1a;问答怎么做&#xff0c;表单之间关联&#xff0c;回答不同问题跳转到不同的下一个…

Python训练打卡Day38

Dataset和Dataloader类 知识点回顾&#xff1a; Dataset类的__getitem__和__len__方法&#xff08;本质是python的特殊方法&#xff09;Dataloader类minist手写数据集的了解 在遇到大规模数据集时&#xff0c;显存常常无法一次性存储所有数据&#xff0c;所以需要使用分批训练的…

web3-区块链基础:从区块添加机制到哈希加密与默克尔树结构

区块链基础&#xff1a;从区块添加机制到哈希加密与默克尔树结构 什么是区块链 抽象的回答: 区块链提供了一种让多个参与方在没有一个唯一可信方的情况下达成合作 若有可信第三方 > 不需要区块链 [金融系统中常常没有可信的参与方] 像股票市场&#xff0c;或者一个国家的…

MySQL 索引:为使用 B+树作为索引数据结构,而非 B树、哈希表或二叉树?

在数据库的世界里&#xff0c;性能是永恒的追求。而索引&#xff0c;作为提升查询速度的利器&#xff0c;其底层数据结构的选择至关重要。如果你深入了解过 MySQL&#xff08;尤其是其主流存储引擎 InnoDB&#xff09;&#xff0c;你会发现它不约而同地选择了 B树 作为索引的主…

Kafka broker 写消息的过程

Producer → Kafka Broker → Replication → Consumer|Partition chosen (by key or round-robin)|Message appended to end of log (commit log)上面的流程是kafka 写操作的大体流程。 kafka 不会特意保留message 在内存中&#xff0c;而是直接写入了disk。 那么消费的时候&…

leetcode hot100(两数之和、字母异位词分组、最长连续序列)

两数之和 题目链接 参考链接&#xff1a; 题目描述&#xff1a; 暴力法 双重循环查找目标值 class Solution {public int[] twoSum(int[] nums, int target) {int[] res new int[2];for(int i 0 ; i < nums.length ; i){boolean isFind false;for(int j i 1 ; j …

SkyWalking架构深度解析:分布式系统监控的利器

一、SkyWalking概述 SkyWalking是一款开源的APM(应用性能监控)系统&#xff0c;专门为微服务、云原生和容器化架构设计。它由Apache软件基金会孵化并毕业&#xff0c;已成为分布式系统监控领域的明星项目。 核心特性 ‌分布式追踪‌&#xff1a;跨服务调用链路的完整追踪‌服务…

Matlab程序设计基础

matlab程序设计基础 程序设计函数文件1.函数文件的基本结构2.创建并使用函数文件的示例3.带多个输出的函数示例4.包含子函数的函数文件 流程控制1. if 条件语句2. switch 多分支选择语句3. try-catch 异常处理语句ME与lasterr 4. while 循环语句5. for 循环语句break和continue…

Client-Side Path Traversal 漏洞学习笔记

近年来,随着Web前端技术的飞速发展,越来越多的数据请求和处理逻辑被转移到客户端(浏览器)执行。这大大提升了用户体验,但也带来了新的安全威胁。其中,Client-Side Path Traversal(客户端路径穿越,CSPT)作为一种新兴的漏洞类型,逐渐受到安全研究者和攻击者的关注。本文…

基于Socketserver+ThreadPoolExecutor+Thread构造的TCP网络实时通信程序

目录 介绍&#xff1a; 源代码&#xff1a; Socketserver-服务端代码 Socketserver客户端代码&#xff1a; 介绍&#xff1a; socketserver是一种传统的传输层网络编程接口&#xff0c;相比WebSocket这种应用层的协议来说&#xff0c;socketserver比较底层&#xff0c;soc…

【无标题】平面图四色问题P类归属的严格论证——基于拓扑收缩与动态调色算法框架

平面图四色问题P类归属的严格论证——基于拓扑收缩与动态调色算法框架 --- #### **核心定理** 任意平面图 \(G (V, E)\) 的四色着色问题可在多项式时间 \(O(|V|^2)\) 内求解&#xff0c;且算法正确性由以下三重保证&#xff1a; 1. **拓扑不变性**&#xff08;Kuratowsk…