Kafka经典面试题

news2024/11/23 23:41:55

1、kafka消息发送的流程?

 
 
 

producer发送过程中启动两个线程 一个main线程 一个sender线程,在main线程中先创建一个双端队列(RecordAccumlator、producerbatch),main将我们需要发送的东西经过拦截器,序列化,分区器,发送到双端队列中(双端队列中的内存默认为32m 可以在配置中修改),sender线程不断的从双端队列中拉取消息,等待达到batch.size的值后(默认16k),发送消息到kafka集群,如果一直达不到batch.size的值,就等待达到linger.ms值的时间后发送数据,返回一个InflightRequests请求(可通过配置文件修改1-5),意思就是发送5条消息,kafka集群收到消息后,会进行acks应答,如果kafka集群中的消息同步成功,返回成功的应答信息,sender中清理掉成功发送的消息,如果发送失败sender就会重试(retries)重新发送

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

 
 

Kafka 将消息以 topic 为单位进行归纳(存储在了zk中,可选择),发布消息的程序称为 Producer,消费消息的程序称为 Consumer。它是以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个 Broker,Producer 通过网络将消息推送到 kafka 集群,消费者从集群中拉取数据,broker 在中间起到一个代理保存消息的中转站,broker中还有可以通过分区提高数据的并行度等,broker还有着leader以及follower的高可用机制,即使有服务器挂掉,其他的依旧可以顶上保证kafka的正常运行

3、Kafka 分区的目的?

1)提高并行度: 以分区为单位进行消息的发送与消费

2)有利于更加合理的储存资源: 当数据在broker中存储的的时候,分区可以将大量的数据切成一块一块的,存储资源更加合理。而且合理的控制分区的数量,还可以实现负载均衡的效果

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

 
 

生产者发送的数据,单分区内可以做到有序,多分区,无法保证,除非把多个分区的数据拉到消费者端,进行排序,但这样做需要等,效率很低,还不如直接设置一个分区。

5、ISR、OSR、AR 是什么?

 
 

isr:isr中只显示活着的follower与leader的broker id

osr:表示 Follower 与 Leader 副本同步时,连接不到的副本id

AR:kafka分区中所有副本的id都会在AR中显示

AR = isr + osr

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

 
 

1)acks的级别设置为 0 的时候,此时producer发送消息后,不需要等待应答就结束了,很容易造成数据丢失

2)acks的级别设置为 1 的时候,此时producer发送消息后,Leader收到消息后应答(不等待follower同步数据),应答完成后,producer就认为消息发送成功,这时follower中并没有同步数据,一但此时leader挂了,通过选举机制产生的新leader中不会收到之前收到的消息,因为producer得到了应答,认为当时的消息已经发送成功了,此时数据就丢失了

3)acks的级别设置为 -1(all) 的时候,虽然此时等待producer发送消息后,leader和follower都同步消息后,才会应答给producer,数据就不容易丢失,可靠性高,但是效率较低 但是,当acks=-1的时候也会有些问题,当leader收到消息后,所有的follower都开始同步消息,但是如果此时某个follower出现问题,同步不到消息,也会造成数据丢失

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

 
 

将acks的级别设置为-1 + 分区数大于等于2 + isr中可应答(活着的)副本数大于等于2,这样做只能保证数据不丢失,但是不确保数据不会重复,所以还需要引入幂等性和事务(保证数据唯一)这样,数据就一定可靠了,即保证数据不丢,又保证数据不重复

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

 
 

利用幂等性 + 事务 幂等性虽然能做到去重,但是只能保证单分区内数据不重复,且服务器不挂掉的情况下,所以我们还需要使用事务来保证数据的唯一 开启参数 enable.idempotence 默认为 true,false 关闭。 幂等性:生产者不论给broker中发送了多少条消息,broker中只会持久化一条

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

 
 

修改生产者重要参数的值

1、batch.size:批次大小,默认16k

2、linger.ms:等待时间,修改为5-100ms

3、compression.type:压缩snappy

4、 RecordAccumulator:缓冲区大小,修改为64m

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

 
 

kafka中的消息都是存储到了zk上的

Kafka 的各 Broker 在启动时都要在Zookeeper上注册,由Zookeeper统一协调管理。如果任何节点失败,可通过Zookeeper从先前提交的偏移量中恢复,因为它会做周期性提交偏移量工作。同一个Topic的消息会被分成多个分区并将其分布在多个Broker上,这些分区信息及与Broker的对应关系也是Zookeeper在维护。

在安装kafka的时候,修改了server.properties配置文件,在zk连接的位置写入了/kafka,加入没有写这个的话,kafka的消息就会存储到zk的根节点下

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

 
 

当Leader挂了的时候,在isr中存活、AR中最靠前follower会通过选举机制成为新的Leader

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

 
 

通过幂等性,幂等性不但可以去重,还有排序的功能 幂等性:生产者不论给broker中发送了多少条消息,broker中只会持久化一条

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

 
 

前提:如果想要加入新的服役节点,需要在/etc/hosts中配置新的broker的节点ip以及hostname

服役:创建一个json文件,里面写入新topic的id以及version:1,通过kafka-reassign-partitions.sh命令执行json文件, --broker-list副本写入需要服役broker的id --generate执行,执行后会产生一堆的json内容,复制到新的json文件中,再通过kafka-reassign-partitions.sh --reassignment-json-file 后面写新的json文件名 --execute 执行此计划

退役:和服役一样,不同点就在于-broker-list副本写入需要服役broker的id不同

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

 
 

当Leader挂了的时候,在isr中存活、AR中最靠前follower会通过选举机制成为新的Leader(即使此前的Leader重启了,它也不会变成leader),这时其他follower中log文件高于HW的部分截取掉,再从新的Leader中同步

当follower挂了的时候,挂掉的follower会被踢出isr,其他的leader和follower继续同步数据,重启后,此follower会从上一次挂掉的节点,直接切掉后面的数据,重新从之前挂掉的节点开始同步数据

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

 
 

初始化后,ar中的顺序和isr中的是一样的

当有节点(比如是1)挂掉的时候,isr这个中这个副本数就会消失,isr中存活且ar中排名靠前的副本,将会成为新的leader,再次启动原来的leader,此时这个leader就会变成follower,顺序错乱

初始化时:

0分区中:ar中是【0,1,2】 isr中也是【0,1,2】 leader:0

1分区中:ar中是【1,2,0】 isr中也是【1,2,0】 leader:1

2分区中:ar中是【2,0,1】 isr中也是【2,0,1】 leader:2

节点(1)挂掉后:

0分区中:ar中是【0,1,2】 isr中也是【0,2】 leader:0

1分区中:ar中是【1,2,0】 isr中也是【2,0】 leader:2

2分区中:ar中是【2,0,1】 isr中也是【2,0】 leader:2

节点(1)再次重启后,顺序错乱

0分区中:ar中是【0,1,2】 isr中也是【0,2,1】 leader:0

1分区中:ar中是【1,2,0】 isr中也是【2,0,1】 leader:2

2分区中:ar中是【2,0,1】 isr中也是【2,0,1】 leader:2

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

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

相关文章

手把手写深度学习(29):将DDP训练代码改成DeepSpeed

手把手写深度学习(0):专栏文章导航 前言:deepspeed已经成为了大模型时代训练模型的常规武器,这篇博客以一个基于DDP的 Stable Diffusion模型训练为例,讲解如何从将DDP训练代码改成DeepSpeed。 目录 构建optimizer 构建scheduler…

信息收集系列(二):ASN分析及域名收集

内容预览 ≧∀≦ゞ 信息收集系列(二):ASN分析及域名收集前言一、ASN 分析1. 获取 ASN 码2. 使用 ASNMap 获取 IP 范围3. 将 IP 范围转化为 IP 列表 二、关联域名收集1. 顶级域(TLD)收集测试方法 2. 根域名收集常用方法…

《数学分析》中不等式及补充

说明:此文章用于本人复习巩固,如果也能帮到大家那就更加有意义了。 注:1)《数学分析》中的不等式及不等式的补充

HTML之图片和超链接的学习记录

图片 在HTML中&#xff0c;我们可以使用img标签来显示一张图片。对于img标签&#xff0c;我们只需要掌握它的三个属性&#xff1a;src、alt和title。 <img src"" alt"" title"" /> src用于指定图片所在的路径&#xff0c;这个路径可以是…

unity显示获取 年月日周几【日期】

unity显示获取 年月日周几【日期】 public void ShowDate(Text txt){//txt.text DateTime now DateTime.Now; // 获取当前时间int year now.Year; // 获取年份int month now.Month; // 获取月份&#xff08;1-12&#xff09;int day now.Day; // 获取天数&#xff08;1-31&…

【区块链】深入理解智能合约 ABI

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 深入理解智能合约 ABI&#xff08;应用程序二进制接口&#xff09;一、ABI 基础…

鸿蒙ZRouter动态路由框架—生命周期管理能力

文章目录 基本使用(单个页面生命周期&#xff09;页面的全局生命周期监听工作流程图源码 ZRouter从1.1.0版本开始支持生命周期函数管理能力&#xff0c;主要有以下特点&#xff1a; 不影响你原有的生命周期业务逻辑&#xff0c;对NavDestination页面保持着零侵入性&#xff0c;…

代码随想录算法训练营第十九天|理论基础、77. 组合、216.组合总和III、17.电话号码的字母组合

理论基础 文章链接&#xff1a;代码随想录 视频讲解&#xff1a;带你学透回溯算法&#xff08;理论篇&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩_bilibili关于回溯算法&#xff0c;我公众号里已经讲完了&#xff0c;并且将回溯算法专题整理成一本PDF&#xff0c;该PDF共…

uniapp的基本使用(easycom规范和条件编译)和uview组件的安装和使用

文章目录 1、uniapp1.uview组件安装2.uview-plus组件安装 2、条件编译3、easycom规范1.组件路径符合规范2.自定义easycom配置的示例 总结 1、uniapp UniApp的UI组件库&#xff0c;如TMUI、uViewUI、FirstUI、TuniaoUI、ThorUI等&#xff0c;这些组件库适用于Vue3和TypeScript&…

深入探索GDB调试技巧及其底层实现原理

本文分为两个大模块&#xff0c;第一部分记录下本人常用到的GDB的调试方法和技巧&#xff0c;第二部分则尝试分析GDB调试的底层原理。 一、GDB调试 要让程序能被调试&#xff0c;首先得编译成debug版本&#xff0c;当然release版本的也能通过导入符号表来实现调试&#xff0c…

Kubernetes的基本概念

Kubernetes是谷歌以Borg为前身,基于谷歌15年生产环境经验的基础上开源的一个项目,Kubernetes致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台。 一、资源对象概述 Kubernetes中的基本概念和术语大多是围绕资源对象(Resource Object)来说的,而资…

JavaWeb后端开发案例——苍穹外卖day01

day1遇到问题&#xff1a; 1.前端界面打不开&#xff0c;把nginx.conf文件中localhost:80改成81即可 2.前后端联调时&#xff0c;前端登录没反应&#xff0c;application.yml中默认用的8080端口被占用&#xff0c;就改用了8081端口&#xff0c;修改的时候需要改两个地方&…

(一)<江科大STM32>——软件环境搭建+新建工程步骤

一、软件环境搭建 &#xff08;1&#xff09;安装 Keil5 MDK 文件路径&#xff1a;江科大stm32入门教程资料/Keil5 MDK/MDK524a.EXE&#xff0c;安装即可&#xff0c;路径不能有中文。 &#xff08;2&#xff09;安装器件支持包 文件路径&#xff1a;江科大stm32入门教程资料…

软件开发的各类模型

目录 软件的生命周期 常见开发模型 瀑布模型 螺旋模型 增量模型、迭代模型 敏捷模型 Scrum模型 常见测试模型 V模型 W模型&#xff08;双V模型&#xff09; 软件的生命周期 软件的生命周期包括需求分析&#xff0c;计划&#xff0c;设计&#xff0c;编码&#xff0c;…

ElasticSearch学习笔记一:简单使用

一、前言 该系列的文章用于记录本人从0学习ES的过程&#xff0c;首先会对基本的使用进行讲解。本文默认已经安装了ES单机版本&#xff08;当然后续也会有对应的笔记&#xff09;&#xff0c;且对ES已经有了相对的了解&#xff0c;闲话少叙&#xff0c;书开正文。 二、ES简介 …

C++笔记---异常

1. 异常的概念 1.1 异常和错误 异常通常是指在程序运行中动态出现的非正常情况&#xff0c;这些情况往往是可以预见并可以在不停止程序的情况下动态地进行处理的。 错误通常是指那些会导致程序终止的&#xff0c;无法动态处理的非正常情况。例如&#xff0c;越界访问、栈溢出…

python opencv3

三、图像预处理2 1、图像滤波 为图像滤波通过滤波器得到另一个图像。也就是加深图像之间的间隙&#xff0c;增强视觉效果&#xff1b;也可以模糊化间隙&#xff0c;造成图像的噪点被抹平。 2、卷积核 在深度学习中&#xff0c;卷积核越大&#xff0c;看到的信息越多&#xff0…

ENSP作业——小型园区网

题目 根据上图&#xff0c;可得需求为&#xff1a; 1.配置交换机上的VLAN及IP地址。 2.设置SW1为VLAN 2/3的主根桥&#xff0c;设置SW2为VLAN 20/30的主根桥&#xff0c;且两台交换机互为主备。 3.可以使用super vlan。&#xff08;本次实验中未使用&#xff09; 4.上层通过静…

解决 Vue3、Vite 和 TypeScript 开发环境下跨域的问题,实现前后端数据传递

引言 本文介绍如何在开发环境下解决 Vite 前端&#xff08;端口 3000&#xff09;和后端&#xff08;端口 80&#xff09;之间的跨域问题&#xff1a; 在开发环境中&#xff0c;前端使用的 Vite 端口与后端端口不一致&#xff0c;会产生跨域错误提示&#xff1a; Access to X…

Windows系统中Oracle VM VirtualBox的安装

一.背景 公司安排了师带徒&#xff0c;环境搭建问题一直是初级程序员头疼的事情&#xff0c;我记录一下这些基础的内容&#xff0c;方便初学者。大部分开发者的机器还是windows系统&#xff0c;所以写了怎么安装。 二.版本信息及 操作系统&#xff1a;windows11 家庭版…