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.mzph.cn/web/59357.shtml

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

相关文章

如何使用 XML Schema

如何使用 XML Schema XML Schema,也称为XSD(XML Schema Definition),是一种用于定义XML文档结构和内容的语言。它提供了一种强大的方式来描述XML文档中允许的元素、属性和数据类型。使用XML Schema,可以确保XML文档符合预定义的结构,这对于数据交换、数据验证和应用程序…

基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要:番茄成熟度检测在农业生产及质量控制中起着至关重要的作用,不仅能帮助农民及时采摘成熟的番茄,还为自动化农业监测提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的番茄成熟度检测模型,该模型使用了…

Oracle 数据库创建导入

注意:本教程中的有些命令您可能并不熟悉,但没关系,只需按照说明一步一步创建示例数据库即可。在之后的教程中,会详细介绍每个命令。 1.创建新用户并授予权限 1.1.打开 首先,启动 SQL plus 程序的命令行:…

[数组二分查找] 0081. 搜索旋转排序数组||

文章目录 1. 题目链接2. 题目大意3. 示例4. 解题思路5. 参考代码 1. 题目链接 81. 搜索旋转排序数组 II - 力扣(LeetCode) 2. 题目大意 描述:一个按照升序排列的整数数组 nums,在位置的某个下标 k 处进行了旋转操作。 &#xff…

为centos7分配ip

前提: 安装好centos7 编辑文件 进入编辑模式[dmdbalocalhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-ens33 修改 BOOTPROTOstatic DNBOOTyes IPADDR192.168.152.11 NETMASK255.255.255.0 GATEWAY192.168.152.2 DNS18.8.8.8 点击esc .输入“:wq” 保存退…

【Unity/QFramework】QFramework学习笔记

文章目录 基础流程示例程序【PointGame】ArchitectureStoragePlayerPrefsStorage : IStorage ModelGameModel : AbstractModel, IGameModel ControllerGame : MonoBehaviour, IControllerEnemy : MonoBehaviour, IControllerMissArea : MonoBehaviour, IController CommandStar…

内网安全-代理技术-socket协议

小迪安全网络架构图: 背景:当前获取window7 出网主机的shell。 1.使用msf上线,查看路由 run autoroute -p 添加路由: run post/multi/manage/autoroute 使用socks模块开启节点,作为流量跳板 msf6 exploit(multi/ha…

GaussDB部署架构

GaussDB部署架构 云数据库GaussDB管理平台(TPOPS)基于B/S架构开发,由Web、管控Service、管控Agent三部分组成,软件结构如图1所示。 图1 各节点部署架构 Web:作为用户接入子系统,用于将用户在Web下发的操作…

如何使用.bat实现电脑自动重启?

1、在电脑桌面新建一个记事本文档,将如下内容写进去: echo off shutdown /r /t 02、然后,保存一下,再把桌面此文件重命名为电脑重启.bat 3、双击此程序,可以立刻重启电脑。 PS:① 此程序会不保存任何当前…

YOLOv11融合CVPR[2024]自适应扩张卷积FADC模块及相关改进思路|YOLO改进最简教程

YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《Frequency-Adaptive Dilated Convolution for Semantic Segmentation》 一、 模块介绍 论文链接:https://arxiv.org/abs/2403.05369 代码…

简单叙述 Spring Boot 启动过程

文章目录 1. 准备阶段:应用启动的入口2. 创建 SpringApplication 对象:开始启动工作3. 配置环境(Environment):识别开发环境与生产环境4. 启动监听器和初始化器:感知启动的关键事件5. 创建 ApplicationCont…

[算法初阶]埃氏筛法与欧拉筛

素数的定义&#xff1a; 首先我们明白&#xff1a;素数的定义是只能整除1和本身&#xff08;1不是素数&#xff09;。 我们判断一个数n是不是素数时&#xff0c;可以采用试除法&#xff0c;即从i2开始&#xff0c;一直让n去%i&#xff0c;直到i*i<n c语言: #include<…

Python 数据文件读写教程

Python 数据文件读写教程 在数据科学和软件开发中&#xff0c;文件的读写操作是至关重要的。Python 作为一门功能强大的编程语言&#xff0c;提供了多种方式来处理文件&#xff0c;包括文本文件、CSV 文件、JSON 文件等。在本教程中&#xff0c;我们将深入探讨 Python 中的数据…

CSS多列布局:打破传统布局的束缚

你是否曾为如何让页面中的文字内容更加美观、易读而烦恼&#xff1f;传统的单列布局虽然简单&#xff0c;但有时并不能满足我们对页面布局的多样化需求。别担心&#xff0c;CSS 多列布局能轻松帮你解决这个问题&#xff01; 一、什么是 CSS 多列布局&#xff1f; 多列布局&am…

在uniapp当中隐藏掉默认tabbar并且使用自己的tabbar

1. 修改配置 "tabBar": {"custom": true,"selectedColor": "#ffdead","list": [{"pagePath": "pages/index/index","text": "首页"}] },//在引入自定义Tabbar组件的时候在载入的时…

新手小白学习docker第九弹-----高级篇start-Dockerfile

docker目录 1 Dockerfile是什么2 Dockerfile能干嘛3 如何书写Dockerfile3.1 Dockerfile构建过程解析3.2 小总结3.3 Dockerfile的基本知识3.5 保留字FROMMAINTAINERRUN 有两种方式EXPOSEWORKDIRENVUSERVOLUMEADDCMDENTRYPOINT 4 后记 1 Dockerfile是什么 Dockerfile顾名思义就是…

模拟实现优先级队列

目录 定义 特点 构造函数 常用方法 关于扩容的问题 关于建堆的问题 向上调整和向下调整的比较 &#xff08;向上调整&#xff09;代码 &#xff08;向下调整&#xff09;代码 关于入队列和出队列问题 模拟实现优先级队列代码 关于堆排序的问题 堆排序代码 关于对…

Autosar CP DDS规范导读

Autosar CP DDS 主要用途 数据通信 中间件协议&#xff1a;作为一种中间件协议&#xff0c;DDS实现了应用程序之间的高效数据通信&#xff0c;能够在不同的软件组件和ECU之间传输数据&#xff0c;确保数据的实时性和可靠性。跨平台通信&#xff1a;支持在AUTOSAR CP平台上的不同…

数字IC实践项目(10)—基于System Verilog的DDR4 Model/Tb 及基础Verification IP的设计与验证(付费项目)

数字IC实践项目&#xff08;10&#xff09;—基于System Verilog的DDR4 Model/Tb 及基础Verification IP的设计与验证&#xff08;付费项目&#xff09; 前言项目框图1&#xff09;DDR4 Verification IP2&#xff09;DDR4 JEDEC Model & Tb 项目文件1&#xff09;DDR4 Veri…

Jmeter中的监听器(三)

9--断言结果 功能特点 显示断言结果&#xff1a;列出所有断言的结果&#xff0c;包括通过和失败的断言。详细信息&#xff1a;显示每个断言的详细信息&#xff0c;如断言类型、实际结果和期望结果。错误信息&#xff1a;显示断言失败时的错误信息&#xff0c;帮助调试。颜色编…