Kafka原理

kafka原理及面试套路 kafka原理及面试套路一、 面试:1、列举kafka的使用场景2、Kafka消息是采用Pull模式,还是Push模式?3、 Kafka 与传统消息系统之间有三个关键区别4. Kafka中是怎么体现消息顺序性的?5、Kafka生产者客户端中使用了几个线程来处理?分别是什么?6、Kafka中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么?7、 “消费组中的消费者个数如果超过topic的... 阅读详情

目录

1、kafka架构图

2、如何读取消息的?

3、kafka复制原理和同步方式的基本概念

4、副本消息复制原理?

5、消费者什么时候能开始读消息?

6、消息可以不丢失或不重复吗?

7、Kafka如何确保消息在producer和consumer之间传输?

 8、生产者和消费者常用参数

生产者

消费者

其它


1、kafka架构图

2、如何读取消息的?

  • partition还可以细分为segment,防止partition中的消息无限扩张,以segment为单位又将partition细分。
  • segment文件由两部分组成,分别为“.index”文件和“.log”文件,分别表示为segment索引文件和数据文件。
  • 命名规则:partition全局的第一个segment从0开始,后续每个segment文件名为上一个segment文件最后一条消息的offset值,数值大小为64位,20位数字字符长度,没有数字用0填充,如下:
00000000000000000000.index
00000000000000000000.log
00000000000000170410.index
00000000000000170410.log
00000000000000239430.index
00000000000000239430.log

例如:segment:00000000000000170410的 “.index”文件和“.log”文件的对应的关系,如下图: 

具体流程:读取消息时以“.index”索引文件中的元数据[3, 348]为例,在“.log”数据文件表示第3个消息,即在全局partition中表示170410+3=170413个消息,该消息的物理偏移地址为348。

例如要读取offset=170418的消息,由于170418>0 并且小于239430,先找到00000000000000170410.index文件,然后根据二分查找法找到第8个文件,再找到对应的物理偏移地址“1325”,通过[8,1325]定位到00000000000000170410.log文件中的1325的位置进行读取。

3、kafka复制原理和同步方式的基本概念

LEO:是LogEndOffset的缩写,表示每个partition的log最后一条Message的位置。

HW:是HighWatermark的缩写,高水位。是指consumer能够看到的此partition的位置。leader和follower各自负责更新自己的HW的状态。(例如:发送消息4和5,当leader接收到4和5,follower都同步数据4后,hw更新到4,此时消费者可以消费4这条数据。)

ISR: (In-Sync Replicas),这个是指副本同步队列。消息复制延迟受最慢的follower限制,重要的是快速检测慢副本,如果follower“落后”太多或者失效,leader将会把它从ISR中删除,放到OSR中

AR:(Assigned Replicas),所有副本(replicas)的统称。

OSR:(Outof-Sync Replicas)列表,延迟超过一定延迟时间后,副本会放入OSR中,新加入的follower也会先存放在OSR中。AR=ISR+OSR。

4、副本消息复制原理?

leader处理partition的所有读写请求,与此同时,follower会被动定期地去复制leader上的数据。

例如:4个broker, 某topic有3个partition,且复制因子即副本个数也为3,如下图:

5、消费者什么时候能开始读消息?

leader会等待该消息被所有ISR中的replicas同步后更新HW,此时消息才能被consumer消费。这样就保证了如果leader所在的broker失效,该消息仍然可以从新选举的leader中获取。

如图:当producer生产消息至broker后,ISR以及HW和LEO的流转过程:

Controller:Kafka集群中的其中一个Broker会被选举为Controller,主要负责Partition管理和副本状态管理,也会执行类似于重分配partition之类的管理任务。如:leader的重新选举

leader来维护:leader有单独的线程定期检测ISR中follower是否脱离ISR, 如果发现ISR变化,则会将新的ISR的信息返回到Zookeeper的相关节点中。

6、消息可以不丢失或不重复吗?

不丢失:request.required.acks=-1时(其它情况leader异常,消息丢失,因为副本(之后会被选择为leader)没有同步到最新的消息),当所有的follower都同步消息成功后发送ack。如果所有副本同步成功消息后,leader异常,不会有消息丢失。如果部分副本没有同步完消息,此时leader异常可能会有消息重复消费的情况,但是不能确保不重复。

如图:如果在leader crash的时候,follower2还没有同步到任何数据,而且follower2被选举为新的leader的话,这样消息就不会重复。如果follower1选举为leader,由于4、5消息重新发送,所以会重复消费4和5这两个消息。

注意:leader挂掉会重新选举,新的leader会发送“指令”让其余的follower截断至自身的HW的位置然后再拉取新的消息。 当ISR中的个副本的LEO不一致时,如果此时leader挂掉,选举新的leader时并不是按照LEO的高低进行选举,而是按照ISR中的顺序选举。

如图:A机器宕机,这时候如果B成为leader,假如没有HW,在A重新恢复之后会做同步(makeFollower)操作,在宕机时log文件之后直接做追加操作,而假如B的LEO已经达到了A的LEO,会产生数据不一致的情况,所以使用HW来避免这种情况。A在做同步操作的时候,先将log文件截断到之前自己的HW的位置,即3,之后再从B中拉取消息进行同步。

7、Kafka如何确保消息在producer和consumer之间传输?

有一下三种可能:

  • At most once: 消息可能会丢,但绝不会重复传输

  • At least once:消息绝不会丢,但可能会重复传输

  • Exactly once:每条消息肯定会被传输一次且仅传输一次

1、如果producer发送数据给broker后,遇到的网络问题而造成通信中断,那producer就无法判断该条消息是否已经提交(commit)。虽然Kafka无法确定网络故障期间发生了什么,但是producer可以retry多次,确保消息已经正确传输到broker中,所以目前Kafka实现的是at least once。

2、consumer消费消息时,从broker中读取消息后,可以选择commit,该操作会在Zookeeper中存下该consumer在该partition下读取的消息的offset。该consumer下一次再读该partition时会从下一条开始读取。

  • 自动提交时:即读取到消息就提交,则是Exactly once。但producer可能由于网络异常会进行retry,此时是At least once。但是,consumer还没处理消息就crash了,下次重新开始工作后就无法读到刚刚已提交而未处理的消息,这就对应于at most once了。
  • 读完消息先处理再commit时:这种模式下,如果处理完了消息在commit之前consumer crash了,下次重新开始工作时还会处理刚刚未commit的消息,实际上该消息已经被处理过了,这就对应于at least once。

 8、生产者和消费者常用参数

生产者

1、request.required.acks (默认-1)

producer接收消息ack的时机,

0:producer不会等待broker发送ack;

1:当leader接收到消息之后发送ack;

-1:当所有的follower都同步消息成功后发送ack;

2、request.timeout.ms (10000)

在向producer发送ack之前,broker允许等待的最大时间。如果超时,broker将会向producer发送一个error ack。意味着上一次消息因为某种原因未能成功(比如follower未能同步成功)

3、message.send.max.retries(3)

当producer接收到error ack,或者没有接收到ack时,允许消息重发的次数。

消费者

partition.rebalance.type (30s gap)

partiton重新分配时挂起的时间,默认30s(2.2.26及以上客户端版本支持。场景:服务重新上线时,partition会进行重新分配,为防止重复消费,partition会被挂起30s,会照成短暂消息积压,如果不关系重复消费,比较关心积压,可设置no gap)

其它

1、unclean.leader.election.enable=false时,leader只能从ISR中选举,当ISR中所有副本都失效之后,需要ISR中最后失效的那个副本能恢复之后才能选举leader

2、min.insync.replicas设置为2,如果ISR中replicas只有一个节点存活,可以提供read服务,不能write

3、leader选举

只有ISR里的成员才能有被选为leader的可能(unclean.leader.election.enable=false) 

在ISR中至少有一个follower时,Kafka可以确保已经commit的数据不丢失。

两种策略,默认是第二种

  • 等待ISR中任意一个replica“活”过来,并且选它作为leader
  • 选择第一个“活”过来的replica(并不一定是在ISR中)作为leader

参考:

 必读:kafka数据可靠性深度解读

常用参数:kafka生产者和消费者常用参数

一直rebalance: session.timeout.ms 和 heartbeat.interval.ms的区别

Kafka原理篇:图解kafka架构原理 今天我们来深入讲解 Kafka 的架构和实现原理。[码哥]将从架构和细节入手,以生动的图深入讲解 Kafka 的实现原理。 我想很多同学之前可能已经看过很多 Kafka 原理相关的文章,但往往看时"牛逼"声连连,激情满满,总觉得自己又学习到了各种“吊炸天”的技术。但很多同学往往是不觉明厉,把文章结合面试题背一背还能应付一下半吊子面试官。可以遇到老司机面试官,或是进入实战,却对很多概念和实现摸棱两可。 所以,决定图解 Kakfa,却让很多半懂不懂的同学可以加深对 Kafka 实现原理的理解。 同时建议读者同学 阅读详情

相关推荐

Kafka Consumer底层原理分析【Kafka系列】

虽然目前Kafka0.10版本已经重写了其API,但底层原理是类似的,所以我们可以先了解kafka0.8.x里面的提供的Consumer的实现原理与交互流程 Kafka提供了两套API给Consumer The SimpleConsumer API The high-level Consumer API 本文介绍了这两种API的用法与底层原理

可可的专栏 6740

Kafka的ACK参数-1,0,1分别代表什么含义,如何保证宕机的时候数据不丢失的

这个acks参数在kafka的使用中,是非常核心以及关键的一个参数,决定了很多东西。 Kafkaproducer有三种ack机制 初始化producer时在config中进行配置; ack等于0:意味着producer不等待broker同步完成的确认,继续发送下一条(批)信息 提供了最低的延迟。但是最弱的持久性,当服务器发生故障时,就很可能发生数据丢失。例如leader已经死亡,prod...

m0_37501154的博客 1万+

【Kafka基础】Kafka工作原理解析

Apache Kafka作为当今最流行的分布式消息系统,以其高吞吐、低延迟和高可靠性的特点,成为大数据领域不可或缺的基础设施。本文将深入剖析Kafka的核心架构和工作原理,帮助开发者全面理解这一强大的消息引擎。生产者是消息的源头,负责将业务数据发布到Kafka集群。

IT成长日记的博客 1273

kafka acks为-1时重复数据问题

原因: 1、生产者发送数据到leader。 2、leader写完数据,ISR中的follower也拉取完数据了,但是在返回ack之前,leader宕机了。 3、此时生产者的没拿到ack(这个请求失败了),就会认为kafka没有拿到数据,就会重发数据。 kafka就又会重新保存这份重发数据,导致数据重复。 解决,新版的kafka加了个幂等性,用参数enable.idempote...

祁东握力的博客 2555

避坑指南:Qwen2.5-VL图片预处理中常见的5个尺寸错误

本文深入解析了Qwen2.5-VL模型在图片预处理环节中开发者最常遇到的五个尺寸错误,包括动态分辨率对齐、宽高比超标、像素数限制等问题。文章结合源码解读,详细剖析了`process_vision_info`函数和`resize`逻辑,并提供了具体的排查流程图与参数设置建议,旨在帮助开发者构建健壮的预处理流水线,有效规避显存溢出与推理失败的风险。

weixin_29290379的博客 176

半导体EAP系统入门指南:从零开始理解设备自动化程序(附实战案例)

本文深入浅出地介绍了半导体制造中EAP(设备自动化程序)系统的核心作用与工作原理。EAP作为连接MES与生产设备的桥梁,负责指令翻译、数据采集与实时控制,是实现晶圆厂全自动化的关键。文章通过对比手动与自动模式,阐述了EAP在提升效率、保障良率方面的价值,并提供了一个实战案例,帮助读者从零构建对半导体CIM体系中这一关键组件的理解。

weixin_29200741的博客 736

SparkStreaming有哪几种方式消费Kafka中的数据,它们之间的区别是什么?

一、基于Receiver的方式 这种方式使用Receiver来获取数据。Receiver是使用Kafka的高层次Consumer API来实现的。receiver从Kafka中获取的数据都是存储在Spark Executor的内存中的(如果突然数据暴增,大量batch堆积,很容易出现内存溢出的问题),然后Spark Streaming启动的job会去处理那些数据。 然而,在默认的配置下,这种方...

qq_43193797的博客 2132

kafka面试题以及答案

kafka面试题以及答案 1、kafka的消费者是pull(拉)还是push(推)模式,这种模式有什么好处? Kafka 遵循了一种大部分消息系统共同的传统的设计:producer 将消息推送到 broker,consumer 从broker 拉取消息。 优点:pull模式消费者自主决定是否批量从broker拉取数据,而push模式在无法知道消费者消费能力情况下,不易控制推送速度,太快可能造成消费者奔溃,太慢又可能造成浪费。 缺点:如果 broker 没有可供消费的消息,将导致 consumer 不断

2301_76522810的博客 1342

ArcGIS实验教程——实验二:ArcGIS地理配准完整操作步骤

本文介绍ArcGIS 10.2中地理配准的完整操作流程,涵盖加载扫描地图、启用地理配准工具条、添加控制点(含经纬度输入与坐标系统选择)、均匀分布控制点以提升精度,并最终通过“更新地理配准”完成栅格数据的空间定位。强调控制点数量、分布及坐标系匹配的重要性,附带实验数据下载链接与获取方式,适用于初学者掌握扫描矢量化前的关键几何校正技能。

智慧空间实验室 9万+

YOLOv11改进 | Neck篇 | 轻量化跨尺度跨通道融合颈部CCFM助力YOLOv11有效涨点

到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的平均质量分98分,后期我会根据各种最新的前沿顶会进行论文复现,也会对一些老的改进机制进行补充,目前本专栏免费阅读(暂时,大家尽早关注不迷路~)如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~YOLOv11有效涨点专栏——本专栏持续复习各种顶会内容——科研必备​ycb。

Snu77的博客 8082

kafka

消息以主题(Topic)来分类,主题数据由多个Partition分区共同存储,根据分区策略写入不同的分区,分区以文件追加形式顺序写入,单个Parition内是保证消息有序。 主题以消费组形式消费,一个主题可以被多个消费组消费,并且只会被组内某一个消费者消费,本质上是一个topic下的一个Partition只会被一个消费者消费,即分区是和消费组里的某个消费者绑定的! 所以,当组内消费者数量大于分区数时,多出来那个就不会收到任何消息,消费者数量的增减、分区数的增减都会触发重新绑定(Reblance) 同步策略

u013806787的专栏 222

汽车标定技术(五)--基于模型开发如何生成完整的A2L文件(1)

A2L文件的生成分为两章讲解:本文主要是讲模型开发,讲解如何把标定量、观测量放到链接文件中的指定位置。下一篇讲解如何使用matlab生成完整的A2L文件

认真搞搞汽车MCU 4618

kafka工作原理介绍

两张图读懂kafka应用:Kafka 中的术语 broker:中间的kafka cluster,存储消息,是由多个server组成的集群。 topic:kafka给消息提供的分类方式。broker用来存储不同topic的消息数据。 producer:往broker中某个topic里面生产数据。 consumer:从broker中某个topic获取数据。Kafka 中的术语设计:1、Broker  ...

Saint 9万+

FastAPI 极简教程(偏实战,一篇搞定)

本文是一篇FastAPI实战教程,通过最少的概念讲解快速掌握FastAPI的核心功能。文章首先介绍FastAPI是基于Starlette和Pydantic的高性能Python API框架,具有自动生成文档、类型驱动校验、异步支持和依赖注入等优势。教程从安装环境开始,演示了如何创建最小项目并编写第一个"Hello World"接口。接着详细讲解了路由参数处理(Path/Query/Body)、Pydantic数据模型校验、响应模型控制、状态码设置等核心功能。在高级功能方面,重点介绍了错误处

AI天才研究院 814

AIGC算法工程师 面试八股文

1、简述DDPM的算法原理 2、什么是重参数化技巧?Diffusion Models和VAE中的重参数化技巧是如何使用的? VAE中的重参数化技巧 Diffusion Models中的重参数化技巧 3、什么是马尔可夫过程?DDPM中的马尔可夫链是如何定义的? 马尔可夫过程 DDPM马尔可夫链 4、为什么DDPM前向过程中前期加噪少,后期加噪多? 5、VAE和Diffusion Models中的变分推断是什么? 6、Negative Prompt实现的原理是什么?

沉迷单车的追风少年 1万+

Kafka 原理

Kafka 原理、生产者原理、broker原理、消费者原、Rebalance

杨宇昌的博客 1534

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【kafka】Kafka基本原理详解

Partition在服务器上的表现形式就是一个一个的文件夹,每个partition的文件夹下面会有多组segment文件,每组segment文件又包含.index文件、.log文件、.timeindex文件(早期版本中没有)三个文件, log文件就实际是存储message的地方,而index和timeindex文件为索引文件,用于检索消息。所以在实际的应用中,。Kafka采用的是发布订阅模式,消费者主动的去kafka集群拉取消息,与producer相同的是,消费者在拉取消息的时候也是找!

翰林小院 1344

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Kafka原理以及SpringBoot整合Kafka

1.Kafka原理 1. brokers有多个broker组成,broker是指Kafka服务器(192.168.223.140就是其中的一个broker),上面三台Kafka服务器组成了Kafka集群 2. broker.id代表集群中broker的唯一性,不能重复 3. partions主题分区数。kafka通过分区策略,将不同的分区分配在一个集群中的broker上,一般会分散在不同的bro...

qq_39380737的博客 1732

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

kafka原理总结

mmap是操作系统提供的一个方法,可以将内核空间的缓冲区映射到用户空间(在用户区开辟一个空间与内核缓冲区直接映射)sendfile是操作系统提供的一个方法.程序调用sendfile会将内核缓冲区直接写入网卡,不需要过用户内存。推:Broker 主动推送,broker逻辑更复杂,且可能击垮消费者(需要维护状态、连接、限流)需要经历四次内存拷贝,可以通过mmap跟sendfile去做到零拷贝。读写分离是指,读取节点跟写入节点不是同一个(读的是读从节点)零拷贝是指零CPU拷贝,不需要CPU去操作。

weixin_41774732的博客 994

kafka原理以及源码相关总结

kafka相关总结Kafka相关一.特点1.应用解耦2.异步处理2.1 串行方式大约30ms。2.2 并行方式大约20ms。3.数据限流4.消息通信二.结构0. 元数据(集群节点信息,分区信息,主题和分区关系等)1.生产者1.1相关重要配置1.1.1 acks确认机制:1.1.2 buffer-memory缓冲区大小1.1.3 batch-size发送批次大小1.1.4 linger.ms设置延迟多久要发送,类似于TCP的nagal算法1.1.5 retries重试次数和retries.backoff.ms

王伟王胖胖的博客 740

kafka原理

一. 为什么使用消息系统 解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。看这么个场景。A 系统发送数据到 BCD 三个系统,通过接口调用发送,如果 E 系统也要这个数据呢?那如果 C 系统现在不需要了呢?A 系统负责人几乎崩溃。A 系统要时时刻刻考虑 BCDE 四个系统如果挂了该咋办?要不要重发,要不要把消息存起来? 异步通信: 允许用户把一个消息放入队列,但并不立...

qinqinde123的博客 5477

深入了解Kafka底层原理

一、Kafka基础 1.kafka的基本运行原理?kafka的架构部署? (1)Kafka通过多副本机制实现故障自动转移; 2.kafka的文件存储机制? 3.kafka如何确保消息的精确传输?如何确保消息的准确存储?如何确保消息的正确消费? 4.kafka的常用名词? (1)LEO(LogEndOffset):表示每个partititon中最后一条message的位置; (2)HW...

Michaeles的博客 2355

Kafka原理篇:图解kakfa架构原理

这是[码哥]Kafka 系列文章的第二篇,码哥将从原理、实践和源码角度为大家深入剖析并实践 Kafka。此系列包括[原理篇]、[实践篇]和[源码篇]。这篇是[原理篇]的第二篇,主要讲解 K...

weixin_44742132的博客 225

kafka原理详解

kafka原理

xiegongmiao的博客 1227

kafka原理_Kafka的原理介绍及实践

kafka是近年来关注度飞速上升并得到越来越广泛应用的一个产品,本文将介绍一下它的实现原理以及在我们邮箱服务中的应用。 1.1 Kafka – 官方定义知乎画报1.1 Kafka – 官方定义根据官网的介绍,Kafka是一个提供统一的、高吞吐、低延迟的,用来处理实时数据的流式平台,它具备以下三特性:1、流式记录的发布和订阅:类似于消息系统。2、存储:在一个分布式、容错的集群中安全持久化地存储流式数...

weixin_39640687的博客 263
上一篇: epoll
下一篇: TCP/IP
九号铅笔芯
博客等级 码龄9年 9粉丝 48原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值