Kafka面试题

1、kafka消息发送的流程?

在消息发送时涉及到了两个线程,main 线程 和 sender 线程 ,在main线程里面创建了一个双端队列(RecordAccumulator) ,当双端队列里面的信息满足 一定的条件后, sender线程会拉取双端队列里面的信息,sender线程会不断的拉取信息发送给Kafka集群。

在sender线程里面有 batch.size 文件 和 linger.ms文件,

  batch.size文件:当双端队列里面的消息达到16K时,会进行拉取

  linger.ms文件:当双端队列里面的消息停留一定的时间后进行拉取。默认是 0ms。

  一般来说,linger.ms 的时间设置为 5ms~100ms之间的效率最高

在sender线程拉取的消息默认缓冲是5个,可以通过 buffer.memory 文件进行修改,当leader 应答之后,会把缓冲的消息给删除掉

2、Kafka 的设计架构你知道吗?

kafka里面一个topic 可以分为多个分区(partition),并为了提高可用性,给每一个partition 添加了若干个副本,其中 主副本为 leader ,副副本为 follower ,当leader不可用的时候,follower 会成为新的 leader,然后为了配合分区的设计,有了消费者组,由多个消费者组成。

3、Kafka 分区的目的?

1、为了合理利用存储资源。每个 partition 在一个 Broker 上面存储,可以把海量的数据按照分区切割出来存储在多台Broker 上。可以实现 负载均衡 的效果

2、提高并行度,生产者可以根据分区的个数发送数据;消费者也可以以分区为单位进行消费数据

4、你知道 Kafka 是如何做到消息的有序性?

单分区可以保证数据的有序性,多分区无法保证数据的有序性,除非是把数据拉取到消费者端进行排序,但那样效率太低了,还不如单分区。

单分区如何保证数据的有序性

1)开启幂等性

sender 里面的消息缓冲(max.in.flight.requests.per.connection)可以设置为 <= 5

2)为开启幂等性

sender 里面的 max.in.flight.requests.per.connection 设置为 1

5、ISR、OSR、AR 是什么?

AR = ISR + OSR

AR:AR里面包括所有的副本,不管是存活的还是死掉的都

ISR:里面只包括与leader 保存同步的存活的副本

OSR:里面只含有挂掉的 副本

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

当 acks 设置为 0 时:

当生产者发送过来数据之后,不需要等数据落盘应答,那么当发送了两条数据之后,leader直接挂掉了,但是数据还没有来得及持久化,那么数据就丢失了

当 acks 设置为 1 时:

当生产者发送过来数据,leader 收到数据 并且应答完毕了,但是还没有来得及向 follow 同步数据,这时生产者就以为数据以及保存好了,但是这时候 leader 突然挂掉 , follow 成为了新的 leader ,但是 follower 里面并没有之前的数据,那么就数据丢失了

当 acks 设置为 -1 时:

1)ISR 同步副本集合收缩

  当 一个分区里面只剩下一个 leader 之后(其他副本因为各种原因挂掉了),那么在刚应答完毕之后,实际上的数据都会只保存在这一个 leader 里面,生产者就会以为保存好了,但是 leader突然挂掉了,新的 leader里面 就没有数据刚保存的这个数据了

  2)数据未完全同步到所有副本时的故障

  在 ack = -1 时,生产者会等待所有 ISR 成员的应答。但在应答成功之前,如果刚刚收到数据的副本发生崩溃,且数据尚未持久化到磁盘,数据也会丢失。

7、怎么尽可能保证 Kafka 的可靠性

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

8、Kafka中如何做到数据唯一,即数据去重?

kafka数据为什么会出现数据重复:

  生产者发出一条消息,Broker 落盘以后因为网络等种种原因,发送端得到一个发送失败的响应或者网络中断,然后生产者收到一个可恢复的 Exception 重试消息导致消息重复。

如何做到数据去重:

开启幂等性和事务

9、生产者如何提高吞吐量?

batch.size : 可以修改批次大小,默认是 16K

linger.ms : 等待时间可以修改为 5~100 ms

compression.type : 压缩 snappy

RecordAccumulator : 缓冲区大小修改为 64M

10、zk在kafka集群中有何作用

1、管理集群

Kafka通过zk 来进行分布式协调和管理。Kafka需要zk集群实现元数据的管理和控制

2、元数据管理

集群中所有的 broker 信息、topic 和 partition 的状态信息都会存储在 zk 节点上。

3、复制进行leader 选举

broker 在启动时会去 zk 创建 controller ,第一个创建成功的就会被指定为控制器

11、简述kafka集群中的Leader选举机制

当一个 topic 启动后,会在 broker 里面创建多个分区,创建的分区会在 zk 里面进行注册,每个分区里面有一个 controller,每个分区的 controller 会去抢先在 zk 里面注册,哪个分区先注册完,这个分区就是 leader

12、kafka是如何处理数据乱序问题的。

(2)开启幂等性

max.in.flight.requests.per.connection需要设置小于等于5。

(1)未开启幂等性

max.in.flight.requests.per.connection需要设置为1。

13、kafka中节点如何服役和退役

服役节点:

先打开Kafka集群,再单独打开第四台虚拟机的 Kafka,

首先要创建一个要均衡的主题,

vi topics-to-move.json

生成一个负载均衡的计划,

bin/kafka-reassign-partitions.sh --bootstrap-server bigdata01:9092 --topics-to-move-json-file topics-to-move.json --broker-list "0,1,2,3" --generate

然后把未来计划拷贝到集群,

vi increase-replication-factor.json

最后执行副本计划

  bin/kafka-reassign-partitions.sh --bootstrap-server bigdata01:9092 --reassignment-json-file increase-replication-factor.json --execute

退役节点:

(1)创建一个要均衡的主题

  vim topics-to-move.json

(2)创建执行计划

  bin/kafka-reassign-partitions.sh --bootstrap-server bigdata01:9092 --topics-to-move-json-file topics-to-move.json --broker-list "0,1,2" --generate

(3)创建副本存储计划(所有副本存储在 broker0、broker1、broker2 中)

   vi increase-replication-factor.json

(4)执行副本存储计划

  bin/kafka-reassign-partitions.sh --bootstrap-server hadoop11:9092 --reassignment-json-file increase-replication-factor.json --execute

(5)验证副本存储计划。

   bin/kafka-reassign-partitions.sh --bootstrap-server hadoop11:9092 --reassignment-json-file increase-replication-factor.json --verify

14、Kafka中Leader挂了,Follower挂了,然后再启动,数据如何同步?

重新启动的副本会首先与新的leader对比数据日志,找出自己缺少的部分。只同步缺少的数据部分,这样可以减少数据传输量,加快同步速度。补齐之后会重新写入 ISR 里面

15、kafka中初始化的时候Leader选举有一定的规律,如何打破这个规律呢?

(1)创建一个新的 topic,名称为 three。

bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --create --partitions 4 --replication-factor 2 --topic three

(2)查看分区副本存储情况。

bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --describe --topic three

(3)创建副本存储计划(所有副本都指定存储在 broker0、broker1 中)。

vi increase-replication-factor.json

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

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

相关文章

RabbitMQ延迟队列(重要)

RabbitMQ延迟队列 1、延迟队列1.1、延迟队列使用场景1.2、延迟队列实现原理 2、使用rabbitmq-delayed-message-exchange 延迟插件2.1、下载2.2、安装2.2.1、解压2.2.2、启用插件2.2.3、查询安装情况 2.4、示例2.4.1、RabbitConfig配置类&#xff08;关键代码&#xff09;2.4.2、…

机器学习—神经网络如何高效实现

深度学习研究人员能够扩展神经网络的原因之一&#xff0c;在过去的十年里建立了非常大的神经网络&#xff0c;是因为神经网络可以向量化&#xff0c;它们可以使用矩阵乘法非常有效的实现&#xff0c;事实证明&#xff0c;并行计算硬件&#xff0c;包括gpus&#xff0c;但也有一…

【数据集】【YOLO】【目标检测】水面船只识别数据集 9798 张,YOLO船只识别算法实战训练教程!

一、数据集介绍 【数据集】水面船只识别数据集 9798 张&#xff0c;目标检测&#xff0c;包含YOLO/VOC格式标注。 数据集中包含1种分类&#xff1a;{0: ship}&#xff0c;代表水面船只。 数据集来自国内外图片网站和视频截图&#xff1b; 可用于无人机船只检测、监控灯塔船…

斜坡函数功能块(支持正常停机和紧急停机切换)

1、CODESYS斜坡函数功能块 CODESYS斜坡函数功能块(ST源代码)_用plc难能写一个斜坡加减速度吗-CSDN博客文章浏览阅读1k次。本文介绍了如何在CODESYS平台上创建斜坡函数功能块(FC),用于PID闭环控制中的给定值平滑处理。通过ST源代码实现,详细步骤包括仿真测试、变量修改、FC…

渗透测试--web基础之windows(二):常用命令详解及病毒编写

声明&#xff1a;学习素材来自b站up【泷羽Sec】&#xff0c;侵删&#xff0c;若阅读过程中有相关方面的不足&#xff0c;还请指正&#xff0c;本文只做相关技术分享,切莫从事违法等相关行为&#xff0c;本人一律不承担一切后果 目录 一、常见端口对应的服务 二、 常见的cmd命…

【含文档】基于ssm+jsp的客户管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 管理员登录进入…

腾讯混元宣布大语言模型和3D模型正式开源

腾讯混元大模型正在加快开源步伐。 11月5日&#xff0c;腾讯混元宣布最新的MoE模型“混元Large“以及混元3D生成大模型“ Hunyuan3D-1.0”正式开源&#xff0c;支持企业及开发者精调、部署等不同场景的使用需求&#xff0c;可在HuggingFace、Github等技术社区直接下载&#xff…

《常用深度学习神经网络及其原理与应用场景》

一、总体介绍 一、引言 随着科技的不断发展&#xff0c;深度学习已经成为人工智能领域中最具影响力的技术之一。深度学习神经网络通过模拟人类大脑的神经元结构和工作方式&#xff0c;能够自动学习数据中的特征和模式&#xff0c;从而实现各种复杂的任务&#xff0c;如图像识…

操作系统三级调度相关习题

填空题 微机是以(总线)为组带构成的计算机系统在批处理兼分时系统中&#xff0c;往往把由分时系统控制的作业称为(前台)作业&#xff0c;把由批处理系统处理的作业称为(后台)作业在分时系统中&#xff0c;若时间片长度一定&#xff0c;则(用户数越多)&#xff0c;系统响应时间…

STL 迭代器iteratior 详解

C的标准模板库&#xff08;STL&#xff09;中&#xff0c;迭代器是一种重要的工具&#xff0c;用于访问容器中的元素。 迭代器是一个变量&#xff0c;相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素&#xff0c;通过迭代器就可以读写它指向的元素。从…

移门缓冲支架有什么作用?

移门缓冲支架是一种安装在滑动门上的装置&#xff0c;主要用于吸收门关闭时的冲击力&#xff0c;防止门突然停止时的震动&#xff0c;从而保护门体、轨道和墙体。移门缓冲支架不仅提升了门的使用体验&#xff0c;还增加了安全&#xff0c;延长了门的使用寿命。关于移门缓冲支架…

MATLAB大数计算工具箱及其用法

1. MATLAB大数工具箱Variable Precision Integer Arithmetic介绍 Variable Precision Integer Arithmetic是John DErrico 开发的大数运算工具箱&#xff0c;可以用完全任意大小的整数进行算术运算。支持vpi定义的数组和向量。 2.MATLAB代码 完整代码见: https://download.cs…

AI大模型如何重塑软件开发流程?

《AI大模型对软件开发流程的重塑&#xff1a;变革、优势、挑战与展望》 一、传统软件开发流程与模式&#xff08;一&#xff09;传统软件开发流程&#xff08;二&#xff09;传统软件开发模式面临的问题&#xff08;一&#xff09;AI在软件开发中的应用场景&#xff08;二&…

基于Python通过DOI下载文献(至简仅需2行代码)

文章目录 一、安装库二、导入库三、准备doi3.1 excel法3.1.1 检索数据3.1.2 导出excel 3.2 txt法3.3 列表or字符串法3.3.1 字符串3.3.2 列表 四、下载4.1 脚本4.2 下载成功4.3 已存在4.4 至于失败的 五、结果5.1 目标文件夹5.2 失败记录 一、安装库 pip install OAFuncs 二、导…

Git仓库

Git初始 概念 一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 作用 记录代码内容&#xff0c;&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容 如何学&#xff1a; 个人本机使用&#xff1a;Git基础命令和概念 多…

excel常用技能

1.基础技能 1.1 下拉框设置 a. 选中需要设置的列或单元格&#xff0c;数据 ---》 数据验证 b.验证条件 ---> 序列&#xff08;多个值逗号隔开&#xff09; 2.函数 2.1 统计函数-count a.count(区域&#xff0c;区域&#xff0c;......) 统计数量&#xff0c;只针…

沙龙活动精彩回顾:攸信携手博格咨询,探索数智管理的奥秘

10月30日&#xff0c;一场聚焦数智管理的沙龙活动在热烈的氛围中圆满落幕。本次活动由攸信携手博格咨询共同举办&#xff0c;有幸邀请到了资深讲师书麟老师、攸信项目经理黄小容以及市场部经理高建成&#xff0c;他们共同为参会者带来了一场关于数智管理的知识盛宴。 01深入剖析…

17个工作必备的Python自动化代码

Python是一种流行的编程语言&#xff0c;以其简单性和可读性而闻名。因其能够提供大量的库和模块&#xff0c;它成为了自动化各种任务的绝佳选择。让我们进入自动化的世界&#xff0c;探索17个可以简化工作并节省时间精力的Python脚本。 1.自动化文件管理 1.1 对目录中的文件…

【IEEE/EI会议】第八届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2025)

会议通知 会议时间&#xff1a;2025年4月25-27日 会议地点&#xff1a;中国南京 会议官网&#xff1a;www.aemcse.org 会议简介 第八届先进电子材料、计算机与软件工程国际学术会议&#xff08;AEMCSE 2025&#xff09;由南京信息工程大学主办&#xff0c;将于2025年4月25日…

AndroidStudio-文本显示

一、设置文本的内容 1.方式&#xff1a; &#xff08;1&#xff09;在XML文件中通过属性&#xff1a;android:text设置文本 例如&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.andr…