【对线面试官】Kafka基础

【Kafka】Kafka 基础知识总结 Kafka其实是一款基于发布与订阅模式的消息系统,如果按常理来设计,大家是不是把消息发送者的消息直接发送给消息消费者?但Kafka并不是这么设计的,Kafka消息的生产者会对消息进行分类,再发送给中间的消息服务系统,而消息消费者通过订阅某分类的消息去接受特定类型的消息。 阅读详情

面试官:今天要不来聊聊消息队列吧?我看你项目不少地方都写到Kafka了

候选者:嗯嗯

面试官:那你简单说明下你使用Kafka的场景吧

候选者:使用消息队列的目的总的来说可以有三种情况:解耦、异步和削峰

候选者:比如举我项目的例子吧,我现在维护一个消息管理平台系统,对外提供接口给各个业务方调用

候选者:他们调用接口之后,实际上『不是同步』下发了消息。

候选者:在接口处理层只是把该条消息放到了消息队列上,随后就直接返回结果给接口调用者了。

候选者:这样的好处就是:

候选者:1. 接口的吞吐量会大幅度提高(因为未做真正实际调用,接口RT会非常低)【异步】

候选者:2. 即便有大批量的消息调用接口都不会让系统受到影响(流量由消息队列承载)【削峰】

候选者:又比如说,我这边还有个项目是广告订单归因工程,主要做的事情就是得到订单数据,给各个业务广告计算对应的佣金。

候选者:订单的数据是从消息队列里取出的

候选者:这样设计的好处就是:

候选者:1. 交易团队的同学只要把订单消息写到消息队列,该订单数据的Topic由各个业务方自行消费使用【解耦】【异步】

候选者:2. 即便下单QPS猛增,对下游业务无太大的感知(因为下游业务只消费消息队列的数据,不会直接影响到机器性能)【削峰】

面试官:嗯,那我想问下,你觉得为什么消息队列能到削峰?

面试官:或者换个问法,为什么Kafka能承载这么大的QPS?

候选者:消息队列「最核心」的功能就是把生产的数据存储起来,然后给各个业务把数据再读取出来。

候选者:跟我们处理请求时不一样:在业务处理时可能会调别人的接口,可能会需要去查数据库…等等等一系列的操作才行

候选者:像Kafka在「存储」和「读取」这个过程中又做了很多的优化

候选者:举几个例子,比如说:

候选者:我们往一个Topic发送消息或者读取消息时,实际内部是多个Partition在处理【并行】

候选者:在存储消息时,Kafka内部是顺序写磁盘的,并且利用了操作系统的缓冲区来提高性能【append+cache】

候选者:在读写数据中也减少CPU拷贝文件的次数【零拷贝】

面试官:嗯,你既然提到减少CPU拷贝文件的次数,可以给我说下这项技术吗?

候选者:嗯,可以的,其实就是零拷贝技术。

候选者:比如我们正常调用read函数时,会发生以下的步骤:

候选者:1. DMA把磁盘的拷贝到读内核缓存区

候选者:2. CPU把读内核缓冲区的数据拷贝到用户空间

候选者:正常调用write函数时,会发生以下的步骤:

候选者: 1. CPU把用户空间的数据拷贝到Socket内核缓存区

候选者: 2. DMA把Socket内核缓冲区的数据拷贝到网卡

候选者:可以发现完成「一次读写」需要2次DMA拷贝,2次CPU拷贝。而DMA拷贝是省不了的,所谓的零拷贝技术就是把CPU的拷贝给省掉

候选者:并且为了避免用户进程直接操作内核,保证内核安全,应用程序在调用系统函数时,会发生上下文切换(上述的过程一共会发生4次)

候选者:目前零拷贝技术主要有:mmap和sendfile,这两种技术会一定程度下减少上下文切换和CPU的拷贝

候选者:比如说:mmap是将读缓冲区的地址和用户空间的地址进行映射,实现读内核缓冲区和应用缓冲区共享

候选者:从而减少了从读缓冲区到用户缓冲区的一次CPU拷贝

候选者:使用mmap的后一次读写就可以简化为:

候选者:一、DMA把硬盘数据拷贝到读内核缓冲区。

候选者:二、CPU把读内核缓存区拷贝至Socket内核缓冲区。

候选者:三、DMA把Socket内核缓冲区拷贝至网卡

候选者:由于读内核缓冲区与用户空间做了映射,所以会省了一次CPU拷贝

候选者:而sendfile+DMA Scatter/Gather则是把读内核缓存区的文件描述符/长度信息发到Socket内核缓冲区,实现CPU零拷贝

候选者:使用sendfile+DMA Scatter/Gather一次读写就可以简化为:

候选者:一、DMA把硬盘数据拷贝至读内核缓冲区。

候选者:二、CPU把读缓冲区的文件描述符和长度信息发到Socket缓冲区。

候选者:三、DMA根据文件描述符和数据长度从读内核缓冲区把数据拷贝至网卡

候选者:回到Kafka上

候选者:从Producer->Broker,Kafka是把网卡的数据持久化硬盘,用的是mmap(从2次CPU拷贝减至1次)

候选者:从Broker->Consumer,Kafka是从硬盘的数据发送至网卡,用的是sendFile(实现CPU零拷贝)

面试官:我稍微打断下,我还有点事忙,我总结下你说的话吧

面试官:你用Kafka的原因是为了异步、削峰、解耦

面试官:Kafka能这么快的原因就是实现了并行、充分利用操作系统cache、顺序写和零拷贝

面试官:没错吧?

候选者:嗯

面试官:ok,下次继续面吧, 我这边有点忙

【对线面试官-移动端】系列 一周两篇持续更新中!

【对线面试官-电脑端】系列 一周两篇持续更新中!

原创不易!!求三连!!

Java面试宝典-对线面试官.pdf 立即下载

相关推荐

DDR内存条选购避坑指南:单Rank vs 双Rank性能实测对比(附2024年颗粒推荐)

本文深入解析了内存条中单Rank与双Rank设计的原理与性能差异。通过实战测试对比,揭示了双Rank内存在高负载场景(如3D渲染、视频剪辑)中凭借Rank Interleaving技术带来的显著性能优势,并提供了2024年针对不同用户需求的DDR4/DDR5内存选购策略与避坑指南。

ik678901的博客 1122

对线面试官

目录注解 注解 代码中的特殊标记 可在编译、类加载或运行时被读取,并执行相应操作 例如: Spring的@Controller、@Param、@Select Lombok的@Slf4j、@Data Java的@Override、@Deprecated、@FunctionalInterface Java原生注解大多用于标记和检查 Java原生还有元注解,用于修饰注解,例如@Retention和@Target @Retention用于设置注解的生命周期(SOURCE、CLASS、RUNTIME) @Target

技术宇宙 640

保姆级教程:用STM32CubeMX HAL库搞定ESP8266连接,附串口printf调试全流程

本文提供了一份详细的STM32CubeMX HAL库教程,指导开发者如何实现ESP8266无线模块的连接与调试。从开发环境搭建、串口配置到AT指令通信解析,涵盖了物联网开发中的关键步骤和常见问题解决方案,帮助开发者快速掌握STM32与ESP8266的集成技术。

weixin_28273593的博客 503

与面试官对线 - 面试流程须知

近期每周都会约一些面试。尝试和面试官对线。原因有几点: 想要看一下现在市场上,面试官们都青睐什么样的人才。看一下自己到底值多少钱。 想要找一下自信,通过和面试官的对线,来获取自信心。百分之八十的面试都是很顺畅的。 想要检讨一下自身的不足。面试其实就像一面镜子,什么水平,短板一下子就会暴露在阳光之下。太自信了以后,容易飘在空中,自以为自己无所不能。其实面试被吊打这是好事,我们可以找到自己的提升点。不能小看这些,如果你都能补充起来,每个点少说也得加2000块钱。 和一些优秀的面试官对线。实际上是可以开.

Angus 1462

Cadence Allegro PCB文件对比实战:3分钟搞定两份设计差异(附颜色标注技巧)

本文详细介绍了如何高效使用Cadence Allegro的Design Compare功能进行PCB文件差异对比。通过实战工作流,可在3分钟内精准定位并理解两份设计在布局、布线、元件等方面的关键差异,并分享了自定义颜色标注技巧,帮助工程师快速聚焦重要修改,提升设计评审与团队协作效率。

weixin_29248653的博客 377

从Peer到脉冲地震波:免费Python工具全流程配置教程(PyCharm+Anaconda)

本文详细介绍了如何使用Python工具链(PyCharm+Anaconda)实现从Peer数据库获取地震波数据到生成脉冲地震波的全流程配置。通过开源工具EQTOOL和PySeismicGen,结合Python环境搭建、数据格式转换和脉冲地震动生成技术,为结构抗震分析提供高效、灵活的解决方案。

weixin_29093169的博客 430

对线面试官 | 字节跳动一面

小伙伴们,大家新年好,今天给大家分享字节跳动抖音电商的面经,希望对小伙伴们有所帮助~ 面试官:你好,我是字节跳动的面试官xxx,请问是大彬吗? 大彬:面试官,您好,我是大彬 面试官:现在方便面试吗? 大彬:嗯嗯,可以的 面试官:那我们现在开始面试吧 面试官:看你简历上写了熟悉集合相关内容,你了解HashMap吗?讲一下HashMap的put方法? 独白:果然一上来就是HashMap… 大彬:HashMap 实现了Map接口,用于保存键值对映射。其底层是使用数组+链表+红黑树(JDK1.8增加了红黑树部分)实

Tyson0314的博客 1110

具身智能:原理、算法与系统 第3章 具身智能的感知-认知-行为框架

具身智能的PCB框架源于对生物智能系统的观察:动物通过感官接收环境信息(感知),基于内部模型进行预测和决策(认知),并通过身体执行动作改变环境(行为),而这一改变又通过感知反馈形成闭环。这一框架在两篇核心文献中得到了深入阐述:提出了系统的数学形式化和工程实现,则从认知科学角度强调了归纳偏置和双过程理论的重要性。

VectorShift的博客 154

2024年最全《对线面试官》 高频 Linux 面试题 Part1_linux高频面试题

lscpu 命令。

m0_60144796的博客 377

AI自瞄原理剖析(一)屏幕内容循环截取及代码实现

尽管Yolo框架在推理时其实是可以输入不同大小的图片的,但这些作者大多不会去处理图像尺寸的改变,所以目前大部分开源源码主要是以输入320或者640尺寸的图像为主。只要截图的效率足够快,能够满足一秒采集60张图片,也就是稳定的截图速度达到60帧以上,那么就可以实现内存级别的AI锁死自瞄效果。这里强调了截图速度对于最终实现特定自瞄效果的重要性,只有达到这样的速度标准,才能让整个自瞄相关的功能在内存层面有效地运作起来。在实现自瞄功能的情境下,只需要以游戏准星为中心向外的正方形区域图像就够了,没必要进行全屏截取。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1095

面向精准医疗的多模态影像融合:实现前列腺MRI与大病理切片的三维配准与空间重建研究

亲爱的同学,当你能完整实现“前列腺MRI与大病理组织学图像的3D配准及体素重建”,你会发现医学影像交叉领域的毕设课题充满挑战与乐趣。我们将从临床需求出发,拆解3D配准与体素重建的核心技术,带你从原理到代码实现完整流程,让你的毕设不仅能顺利完成,更能体现临床应用价值。,让MRI和病理图像在同一空间对齐,能实现“术前影像-术后病理”的精准关联,为前列腺癌的精准诊疗、预后评估提供关键依据——这一课题既有技术挑战性,又有临床意义,是毕设的优质选择。(如NCC、Dice、配准时间),用数据证明方法的优越性。

m0_71589036的博客 4717

面试官:系统需求多变时如何设计?

面试官:我想问个问题哈,项目里比较常见的问题 面试官:我现在有个系统会根据请求的入参,做出不同动作。但是,这块不同的动作很有可能是会发生需求变动的,这块系统你会怎么样设计? 面试官:实际的例子:现在有多个第三方渠道,系统需要对各种渠道进行订单归因。但是归因的逻辑很有可能会发生变化,不同的渠道归因的逻辑也不太一样,此时系统里的逻辑相对比较复杂。 面试官:如果让你优化,你会怎么设计? 候选者:我理解你的意思了 候选者:归根到底,就是处理的逻辑相对复杂,if else的判断太多了 候选者:虽然新的需求来了,都可以

V539413949的博客 1095

2026华为OD机考双机位C卷++ 双机位B卷 + 双机位A卷 + 2025C/B/A卷+ 往年真题 - 题库目录分值说明 + 考点说明+在线OJ

2025华为OD机考双机位C卷++ 双机位B卷 + 双机位A卷 + 2025C/B/A卷+ 往年真题 - 题库目录分值说明 + 考点说明+在线OJ

算法大师! 5万+

【对线面试官】Kafka基础入门

《对线面试官》系列目前已经连载33篇啦,这是一个讲人话面试系列 【对线面试官】Java注解 【对线面试官】Java泛型 【对线面试官】 Java NIO 【对线面试官】Java反射 && 动态代理 【对线面试官】多线程基础 【对线面试官】 CAS 【对线面试官】synchronized 【对线面试官】AQS&&ReentrantLock 【对线面试官】线程池 【对线面试官】ThreadLocal 【对线面试官】CountDownLatch和Cyc...

damimi00的博客 272

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java面试官与十年经验Java候选人MySQL与Kafka技术栈面试全记录

通过本次面试,我们看到了候选人对MySQL和Kafka的深入理解和实践经验。他能够清晰地表达自己的思路,并给出具有针对性的解决方案,展现了出色的专业素养和解决问题的能力。

南客先生的博客 294

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

线上面试网络闪断时:P7技术面杀器用CAP定理硬刚面试官质疑

在一场关键的线上面试中,网络突然闪断,面试官追问分布式系统的设计问题。面对质疑,P7资深技术候选人现场推导CAP定理的证明,用理论硬刚面试官,成功化解危机,最终征服考官。

Ared 831

上海某大公司:你是了解Redis对吧?

《对线面试官》系列目前已经连载26篇啦!有深度风趣的系列! 【对线面试官】Java注解 【对线面试官】Java泛型 【对线面试官】 Java NIO 【对线面试官】Java反射 && 动态代理 【对线面试官】多线程基础 【对线面试官】 CAS 【对线面试官】synchronized 【对线面试官】AQS&&ReentrantLock 【对线面试官】线程池 【对线面试官】ThreadLocal 【对线面试官】CountDownLatch和CyclicBarrier 【对线面试.

null_10086的博客 110

师兄面试遇到面试官的 Kafka 暴击三连问,快面哭了!

其实在今天的很多大厂面试里,都会要求能够熟练运用Apache Kafka等至少一种消息队列,Apache Kafka也是我们面试里的常客。在大多数人的印象中,写磁盘都是比较慢的,可是,为什么Apache Kafka在各大MQ性能的评测中,还能够击败众多对手,取得不错的成绩呢?通过师兄遇到的关于 Kafka 问题的暴击三连问 ,让我们一起走进师兄受伤的心

云祁QI 1万+

面试官:Kafka是什么,它有什么特性与使用场景?

面试官:Kafka是什么,它有什么特性与使用场景?

真正的大师永远怀着一颗学徒的心 7389

面试官问我如何保证Kafka不丢失消息?我哭了!

kafka如何保证不丢消息 ps:这篇文章自我感觉说的很大白话了!希望你们看过了之后能有收获。 不了解 Kafka 的朋友建议先看一看我的下面这几篇文章,第一篇一定要看,其他的可以按需学习。 入门篇!大白话带你认识 Kafka! 5分钟带你体验一把 Kafka Kafka系列第三篇!10 分钟学会如何在 Spring Boot 程序中使用 Kafka 作为消息队列? 生产者丢失消息的情况 生产...

JavaGuide 9581

面试官:聊聊kafka线上使用会有哪些问题?

如果发送端配置了重试机制,kafka不会等之前那条消息完全发送成功才去发送下一条消息,这样可能会出现,发送了1,2,3条消息,第 一条超时了,后面两条发送成功,再重试发送第1条消息,这时消息在broker端的顺序就是2,3,1了 所以,是否一定要配置重试要根据业务情况而定。大数据统计报表场景,对性能要求很高,对数据丢失不敏感的情况可以用这种。如果消费这边配置的是自动提交,万一消费到数据还没处理完,就自动提交offset了,但是此时你consumer直接宕机了,未处理完的数据 丢失了,下次也消费不到了。

程序员子龙 243

阿里大牛总结:学会这些Kafka知识,吊打面试官就是分分钟的事

文末送个福利~ 最近一直在搞企业复工大数据监测的事情,说实话,听起来这事挺高级,挺有现代感,背后涉及到的东西很多,而且这东西也不为赚钱,就是为了出一份力,同时,还会有和XX(就是那个)的合作。 如果什么东西都是为了赚钱的话,那这个世界上就不会有阿里云了。我看阿里对于此次复工有一个暖春行动,感兴趣的朋友可以去看看。当然,等我们的计划上线,也希望各位捧个场,话不多说,来看今天的文章:kafka...

Leo的博客 4193

【面试官与水货程序员丘比特的爆笑对线】Spring Boot + Kafka 实现电商秒杀系统

面试官(推了推眼镜,一脸严肃):“丘比特同学,欢迎来到我们公司的技术面试。今天我们聊聊一个实际的业务场景——电商秒杀系统。假设我们要为一个大型电商平台设计一个秒杀功能,你认为核心挑战是什么?丘比特(挠头,一脸懵):“呃...秒杀?就是抢东西吧?我上次抢限量版球鞋,网速慢了0.1秒就没抢到,气死我了!所以...挑战是网速?面试官(扶额):“...不完全是。网速是用户侧的问题。我们作为后端工程师,要考虑的是如何在瞬间涌入海量请求时,保证系统的稳定、数据的一致性,以及防止超卖。丘比特(突然灵光一现):“哦!

qq_18741139的博客 1414
上一篇: CountDownLatch和CyclicBarrier区别
下一篇: Kafka丢数据、重复消费、顺序消费的问题
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值