Kafka面试题解答(一)

1.kafka消息发送的流程?

生产者:

在消息发送的过程中涉及到了两个线程:main线程和sender线程。在main线程中创建了一个双端队列RecordAccumulator(默认32m)。main线程将消息发送到RecordAccumulator,sender线程不断地从RecordAccumulator中拉取数据到KafkaBroker。如下图:

batch.size:只有数据积累到batch.size之后,sender才会发送数据,默认为16k。

linger.ms:如果数据迟迟未到16k,sender等待linger.ms设置的时间到了之后会发送数据,单位为ms默认为0ms。

另外kafka生产者可通过设置ack的以下参数来控制发送消息流程:

0: 生产者发送的数据,不需要等数据落盘应答。

1:生产者发送过来的数据,Leader收到数据后应答。

-1:(all):生产者发送过来的数据,Leader 和 ISR 队列里面的所有节点收齐数据后应答。 -1 和 all 是等价的。

消费者:

消费方式主要有推(push)和拉(pull)两种模式:

消费者总体工作流程如下图所示:

一个消费者组中的多个消费者,可以看作一个整体,一个组内的多个消费者是不可能去消费同一个分区的数据的,要不然就消费重复了。

2.ISR、OSR、AR 是什么?

ISR里存放的是存活的broker 比如broker[0,1,2]表示服务器上id为0,1,2的kafka服务存活。OSR里存放的是停止的broker,与broker类似。AR表示的是选举的顺序例如AR[2,0,1]表示kafka集群首选leader为2次为0最后为1。

三者关系:

AR=ISR+OSR

3.Kafka 的设计架构

1)Producer:消息生产者,就是向 Kafka broker 发消息的客户端。

2)Consumer:消息消费者,向 Kafka broker 取消息的客户端。

3)Consumer Group(CG):消费者组,由多个 consumer 组成。消费者组内每个消 费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者

4)Broker:一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。

5)Topic:可以理解为一个队列,生产者和消费者面向的都是一个 topic

6)Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。

7)Replica:副本。一个 topic 的每个分区都有若干个副本,一个 Leader 和若干个 Follower

8)Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 Leader。

9)Follower:每个分区多个副本中的“从”,实时从 Leader 中同步数据,保持和 Leader 数据的同步。Leader 发生故障时,某个 Follower 会成为新的 Leader。

具体架构如下图所示:

4.Kafka 分区的目的

(1)便于合理使用存储资源,每个Partition在一个Broker上存储,可以把海量的数据按照分区切割成一块一块数据存储在多台Broker上。合理控制分区的任务,可以实现负载均衡的效果。

(2)提高并行度,生产者可以以分区为单位发送数据;消费者可以以分区为单位进行消费数据。

5.Kafka 是如何做到消息的有序性

.将kafka分区数和如下图所示的生产者发送消息的sender线程中的队列设为一个。kafka可以保证发送消息时在单个分区内的有序性但是有多个分区时顺序会出现乱序的情况,因此只设置一个分区可以防止分区发送时乱序,而在sender线程kafka生产者发送消息未得到应答后后将该消息调整到最后一个队列发送,因此应当队列调整为一个当发送消息得不到应答时继续发送,直至最大重试次数(默认很大但可以自行调整)。

6.Kafka 在什么情况下会出现消息丢失

当ack的参数设置为0时,在sender队列里发送消息后不需要得到任何应答就进行下一条消息的发送,此时很可能就会出现消息丢失。

当ack参数设置为1时,在Kafka生产者sender队列里发送消息后leader应答后就会清理该条消息,进行下一条消息的发送,但此时follower是否已经同步leader上面的消息未知(leader接受到消息后可能会挂掉),也会造成消息丢失。

当ack参数设置为-1时,在kafka生产者sender队列里发送消息后需要得到leaderLeader和ISR队列里面的所有节点收齐数据后应答。如果一个副本由于网络故障或某些原因无法同步,而 Kafka 中没有足够的副本来满足“所有副本确认”要求,Kafka 就不能在规定时间内完成所有副本的确认,这时生产者会收到一个失败的响应,数据可能会丢失。

最终可靠性不丢失数据方案:

数据完全可靠条件 = ACK级别设置为-1 + 分区副本大于等于2 + ISR里应答的最小副本数量大于等于2

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

从规划到执行:高效项目进度管理流程与技巧

项目进度管理是项目管理的一个重要组成部分,包括规划、组织和管理活动和资源,确保项目按时完成。 该流程首先明确定义实现项目目标所需的所有任务和活动,并将它们细分为更小、更易管理的项目模块,以便于全面规划和执行。项目进度…

【故障分析】屏幕显示系统无法找到根文件系统 (/dev/mapper/rhel-root)

此屏幕显示系统无法找到根文件系统 (/dev/mapper/rhel-root)。这通常是由于逻辑卷管理器(LVM)配置出现问题,或是 /etc/fstab 文件中的问题引起的。 以下是一些排查此问题的步骤: 检查 LVM 分区: 运行命令 ls /dev/mapper/ 查看是否存在 LVM 卷。 如果不存在,可能是 LVM …

位运算_常见位运算总结

目录 1.基础位运算 2.给一个数n,确定它的二进制中第X位是0还是1 3.给一个数n,把它二进制中第X位是改为1 4.给一个数n,把它二进制中第X位是改为0 5.提取一个数n二进制最右侧的一个1 6.去除一个数n二进制最右侧的一个1 7.异或运算 1.基础…

SuperMap GIS基础产品FAQ集锦(20241111)

一、SuperMap iDesktopX 问题1:请问一下,桌面端想要导入TXT和EXCEL格式的坐标文件,有没有相应的模板参考? 11.2.0 【解决办法】用户可以通过 Excel 工具将*.xlsx,.xls,.xml等格式的属性数据转化成 .csv 格式数据,进而实现将纯属…

介绍一款支持折线法、保护角法和滚球法的避雷针插件

基于目前的研究和开发成果,我们实现了一款CAD插件,来实现避雷区域的绘制功能,我来详细介绍一下操作步骤,如果有需要可以私聊我。 界面 单击菜单栏 HL防雷计算>折线法,可加载上图工具栏。 按钮含义: 按钮…

FreeRTOS task 源码解析

目录 一、基本结构和变量1、TCB_t2、状态链表2.1 pxCurrentTCB2.2 pxReadyTasksLists2.3 pxDelayedTaskList2.4 xSuspendedTaskList 3、任务调度器相关3.1 xSchedulerRunning3.2 uxSchedulerSuspended3.3 xPendedTicks3.4 xPendingReadyList 4、任务删除相关4.1 xTasksWaitingT…

面试击穿mysql

Mysql三大范式: 第一范式(1NF): 不符合第一范式的典型情况是在一个字段中存放多种不同类型的详细信息。例如,在商品表中,若将商品名称、价格和类型都存储在同一个字段中,会带来诸多弊端。首先,在…

日常bug记录,easyexcel导入报错convert data ... to class java.math.BigDecimal error

排查发现实体类中有BigDecimal属性,然而数据中这个属性为null,进行转换时报错 解决方法:自定义转换器类 在实体类上加上自定义转换器

【Python】Pygame实战:实现基础跑酷游戏机(附源码)

创建一个完整的“天天酷跑”游戏是一个相当复杂的任务,因为它涉及到多个游戏机制、图形资源、音效、用户交互等。不过,我可以为你提供一个非常简化的Python示例,使用Pygame库来模拟跑酷游戏的一些基本元素。这个示例将包括一个玩家角色、简单…

认识QT以及QT的环境搭建

认识QT 什么是QT? Qt 是⼀个 跨平台的 C 图形⽤⼾界⾯应⽤程序框架 。 认识客户端 现在我们所说的客户端开发其实大致分为三种: 1.网页前端开发。 2.桌面应用开发(电脑的应用层序) 3.移动应用开发。 而我们的QT的主战场就是在…

[ARM-2D 专题]6.脏矩形定义的宏使用技巧和分析

ARM-2d之所以能够高效的进行屏幕绘制,脏矩形的使用起到了巨大作用,功不可没。 简单介绍一下何谓脏矩形: 详细可以参考:如何用脏矩形优化显示帧率 在一帧画面的绘制的时候,我们只绘制画面中变化的部分,可以…

【网页设计】CSS 高级技巧

目标 能够使用精灵图能够使用字体图标能够写出 CSS 三角能够写出常见的 CSS 用户界面样式能够说出常见的布局技巧 1. 精灵图 为什么需要精灵图?精灵图的使用精灵图课堂案例 1.1 为什么需要精灵图? 一个网页中往往会应用很多小的背景图像作为修饰&…

数据结构——二叉树和BST

树与二叉树 基本概念 树是一种非线性结构,其严格的数学定义是:如果一组数据中除了第一个节点(第一个节点称为根节点,没有直接前驱节点)之外,其余任意节点有且仅有一个直接前驱,有零个或多个直接…

openGauss常见问题与故障处理(一)

大家好,欢迎大家收看本文。 对于初学者入门的学习,一些理论不容易理解或记住,所以本节课程【创新】采用了【正、反对比联想记忆】的方法, 引入模拟场景中的肖荏盖的小故事。(模拟场景为虚构演绎,仅供教学&…

计算机辅助几何设计:曲线曲面基础知识

参数化表示 空间曲线曲面常用参数化表示,即: x x ( u ) , y y ( u ) , z z ( u ) xx(u),yy(u),zz(u) xx(u),yy(u),zz(u)。用位置矢量形式表示就是 p p ( u ) pp(u) pp(u),其中参数u可能有意义,也可能没有意义,例如…

TF-Grasp论文学习笔记

当 Transformer 遇到机器人抓取时:利用上下文进行有效的抓取检测 摘要 在这篇论文中,我们提出了一个基于transformer结构的用于机器人抓取的网络,我们将其命名为TF-Grasp。TF-Grasp网络架构有两个重要的设计,这使其可以对于视觉抓…

剪绳子(math)-acwing

题目: AcWing 25. 剪绳子 - AcWing 代码 主要是处理末尾端几个2,其余都是3,这样相乘能最大,因为4可以分为2*2,3不能分,然后5也没有3*2大,6也没有3*3大。 总之2*2没有3*3大,所以6不…

Scrapy爬取heima论坛所有页面内容并保存到数据库中

前期准备: Scrapy入门_win10安装scrapy-CSDN博客 新建 Scrapy项目 scrapy startproject mySpider03 # 项目名为mySpider03 进入到spiders目录 cd mySpider03/mySpider03/spiders 创建爬虫 scrapy genspider heima bbs.itheima.com # 爬虫名为heima &#…

基于SpringBoot的垃圾分类回收系统+LW示例参考

1.项目介绍 系统角色:管理员、普通用户、回收员功能模块:管理员(用户管理、回收员管理、垃圾类型管理、商品分类管理、环保商城管理、上门回收管理、订单分配管理、订单管理、系统管理等)、回收员(订单分配、订单管理…

华为入围Linux 内核CVE 检视“五人团”,openEuler要再进阶?

背景:内核社区接管 Linux 社区漏洞发布 往年 Linux 内核漏洞发布存在来源不固定、覆盖不全面,有时发布无修复补丁的 CVE 从而形成 0-day 漏洞等问题,给 Linux 内核安全带来了不确定性,为了更规范化运作,2024 年 2 月 1…