大数据开发面试题【Kafka篇】

news2024/11/15 19:53:04

83、介绍下Kafka,Kafka的作用?Kafka的组件?适用场景?

kafka是一个高吞吐量、可扩展的分布式消息传递系统,在处理实时流式数据,并能够保证持久性和容错性
可用于数据管道、流分析和数据继承和关键任务应用(发布/订阅模式)
发布/订阅模式:
可以有多个topic主题、消费者消费数据之后,不删除数据、每个消费者相互独立,都可以消费数据

84、Kafka作为消息队列,它可解决什么样的问题?

异步:允许用户把一个消息放入队列,但并不立即处理他们,需要的时候再去处理
消峰:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况
解耦:允许独立扩展或者修改两边的处理过程,只要确保他们遵守同样的接口约束

85、说下Kafka架构

生产者:消息的生产者,就是向kafka broker发消息的客户端
消费者:获取消息的客户端
消费组:有多个消费者组成,消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内的消费者消费;消费者组之间互补影响;所以消费者组逻辑上是一个订阅者
broker:一台kafka服务器就是一个broker,一个broker可以容纳多个topic
topic:一个队列,生产者和消费者面向的都是一个topic
partition:一个非常大的toipc可以分布到多个broker,一个topic可以分为多个partition
replica:
leader:
follower:

86、Kafka的工作原理和它与传统消息队列服务的不同之处?与RabbitMQ相比?

特点:
发布订阅模型;分区和复制;高吞吐量;实时数据流支持:传统消息队列只支持鵆并按需查看历史数据,而kafka还支持传输实时流数据
与传统消息队列相比:kafka优化了磁盘使用、利用操作系统缓存进行高速读写、并提高高效的分区和复制机制
RabbitMQ:在大规模实时性要求教导的场景下,使用kafka合适;在简单的消息传递与排队需求中,选择常见的消息队列较为合适、
补充:两种消息队列模式
点对点模式:点对点通常是基于拉取或者轮询的消息传送模型,发送到队列的消息被一个且只有一个消费者进行消费,生产者把消息放入消息队列后,由消费者主动拉取消息进行消费;优点是消费者拉取消息的频率可以由自己控制
发布订阅模式:生产者把消息放入消息队列以后,队列会把消息推送给该类的消费者

87、kafka的工作流程

创建一个kafka的生产者将源数据推送到kafka的topic中,然后使用消费者从topic订阅消息,并传递给处理引擎或者存储系统
在生产者流程中有两个关键参数(batch.size和linger.ms):只有数据累计达到batch.size后,sender才会发送数据,默认为16k;如果数据迟迟未达到batch.size,sender设置的linger.ms设置的时间达到以后就会发送数据,默认为0ms,表示没有延迟。
88、kakfa分区容错性
副本机制:kafka允许一个topic创建多个副本,并将这些副本分布在不同的broker上
数据复制:kafka使用异步复制机制来保证数据的可靠性,当消息被写入到leader副本时候,kafka会将其异步复制到follower副本中
ISR机制:用来保证副本之间的一致性,如果某个副本无法及时复制消息或者落后于其他副本太多,他将被从SIR集合中移除,直到追赶上其他副本的进度为止
故障转移:当某个broker宕机或者分区的领导副本不可用时候,kafka会自动进行故障转移,它会从ISR集合中选择一个新副本作为领导副本

89、kafka的分区策略

在这里插入图片描述

如上是kafka的构造方法:
1、如果指定了partition的情况下,直接将指明的值作为partition值
2、如果没有指明partition值但有key的情况之下,将key的hash值与topic的partition数进行取余得到partition的值,并将对应的value写入到对应的分区中
3、既没有partition值又没有key值的情况下,kafka采用粘性分区器(sticky partition),会随机选择一个分区,并尽可能一直使用或者分区,直到该分区的batch已满或者已完成,kafka再随机一个分区进行使用。

90、Kafka如何尽可能保证数据可靠性?

1、保证分区消息的顺序———分区有序
2、只有当消息被写入分区的所有同步副本时候,它才被认为是已经提交的(ACK应答)
ACK是指:ackowledgement,用于控制生产者发送消息时候的可靠性和性能,
ACK=0:生产者对象将数据通过网络客户端将数据发送到网络数据流中的时候,kafka就对当前的数据请求进行了响应,确认应答,只是能保证数据已经通过网络发送给kafka,并不能保证kafka一定能接收到,无法保证数据的可靠性,但通信效率高
ACK=1:生产者等待leader副本成功写入消息到日志文件后就认为发送成功,适用于对可靠性较高的场景,这种应答方式,数据已经存储到分区的leader副本中,数据相对安全,但数据并没有及时备份到follower副本,一旦broker崩溃,数据也会丢失
ACK=all或者-1(默认):生产者等待ISR中所有副本成功写入消息后,就认为发送成功,适用于对数据不可丢失的高可靠性要求场景(一般是金融级别的才会使用这种配置)
3、只要还有一个副本是活跃的,那么已经提交的消息就不会丢失
4、消费者只能读取已经提交的消息
5、kafka的复制机制和分区的多副本架构是kafka可靠性保证的核心(topic被分为多个分区,分区是基本的数据块,分区存储在单个磁盘上,kafka可以保证分区里的事件是有序的,分区可以有多个副本)

91、kafka的同步与异步发送

同步模式:逐条发送,用户线程选择同步,效果是逐条发送,因为请求队列InFlightRequest中永远最多有一条数据,第一条响应到达以后,才会请求第二条
异步模式:如果设置成异步模式。可以运行生产者以batch的形式push数据,这样会极大的提高broker的性能,会增加丢失数据的风险
如果kafka通过主线程代码将一条数据放入到缓冲区中后,无需等待数据的后续发送过程,就直接发送下一条数据的场合,就是异步发送
如果Kafka通过主线程代码将一条数据放入到缓冲区后,需等待数据的后续发送操作的应答状态,才能发送一下条数据的场合,我们就称之为同步发送。所以这里的所谓同步,就是生产数据的线程需要等待发送线程的应答(响应)结果。

92、kafka数据丢失和数据重复原因和解决办法

数据丢失原因:不等待broker的ack,broker接收到磁盘就已经返回了,当broker故障时候会丢失数据
数据重复原因:当ack设置为1的时候,假如因为网络原因,kafka没有将应答消息发送给生产者,一旦超时时间阈值,就认为kafka数据丢失,此时生产者会尝试对超时的请求数据进行重试,此时kafka中存在的数据是重复的

补充:数据幂等性

生产者同样的一条数据,无论向kafka发送多少次,kafka只会存储一条数据,
幂等性只能保证单分区消息有序不重复,多分区不能保证幂等性
数据传输语义:
https://infinity-culture.feishu.cn/sync/OWY5dMNgjsOajnbyFSxcrIq7nBd

93、生产者消费者模式与发布订阅模式有何异同?

生产者消费者模式,指的是由生产者将数据源源不断推送到消息中心,有不同的消费者从消息中心取出数据做自己的处理,在同一类别下,所有消费者拿到的都是同样的数据
发布订阅模式:本质上也是一种消费者模式,由订阅者首先向消息中心指定自己对哪些数据感兴趣,发布者推送的数据经过消息中心后,每个订阅者拿到的仅仅是自己感兴趣的数据
生产者消费者是所有消费者抢占消息,订阅发布是所有订阅者共享信息;
主动权不同,生产消费者主动权在消费者,订阅发布主动权在发布者,

94、kafka如何保证全局有序

kafka通过分区和分区内的顺序保证全局有序,将数据分为多个topic,每个topic可以有多个分区,每个分区都有唯一的标识,并且在集群中的多个节点上进行复制以提高高可用性
每个分区内,kafka使用offset来标识消息的顺序,生产者将消息切入待定的分区时,kafka会为每个消息分配一个递增的偏移量,消费者通过指定分区和偏移量来读取消息,保证消费者按照指定顺序处理消息
如果某一个topic只有一个分区,那么该主题的消息顺序是全局有序的
如果一个topic有多个分区,kafka可以根据消息的key来选择将消息写入哪个分区,具有相同键的消息将被写入同一个分区,并且同一个分区内的消息顺序是有序的

95、Kafka为什么同一个消费者组的消费者不能消费相同的分区?

kafka中同一个消费者组的消费者组不能消费相同的分区是因为kafka中采用分区分配策略,确保每个分区被消费者组的的一个消费者消费,主要是为了确保消息的顺序性和负载均衡,使得每个消费者都能够处理大致相同的数量的消息

96、Kafka读取消息是推还是拉的模式?有什么好?

kafka的消息读取模式是pull拉模式,消费者主动拉取kafka服务器的消息
好处:
1、消费者可以根据自身的处理能力和需求决定拉取消息的速率
2、节约资源:可以避免服务器主动推送大量消息给消费者,减少网络带宽的和服务资源的消耗
3、容错性:在拉取过程中出现错误,可以重新拉取相同的消息进行重试
4、消息积压控制:消费者可以根据自身的处理能力调整拉取消息的速率
如果是push模式,多个分区的数据同时推送给消费者进行处理,明显一个消费者的消费能力是有限的,消费者无法快速处理数据,就会导致数据的积压,导致网络、存储的压力,影响效率

补充:消费者组模式

如果topic的分区的数据过多,消费时间很长,至此对kafka1的压力就很大;
在kafka中,每个消费者都对应一个消费者组,如果kafka想要消费消息,那么需要指定消费那个topic的消息以及自己的消费组id(groupId)

在消费者组中,多个实例共同订阅若干个topic,实现共同消费,同一个组下的每个实例都配置有相同的ID,被分配不同的订阅分区,当某个实例挂掉的时候,其他实例会自动地承担起它负责消费的分区

97、kafka高吞吐的原理

1、顺序读写磁盘,kafka消息是不断追加到文件中的,使得kafka可以充分利用磁盘的互相内需读写性能,不需要次哦按磁头的寻道时间,快速读写
2、kafka中的topic被分为了多个partition,每个partition又分为多个segment,一个队列的消息实际上是保存在多个片段文件中通过分段的反射光hi,每次文件操作都是对一个小文件进行操作,增加了并行处理的能力
3、kafka的瓶颈不是cpu或者磁盘,而是网络带宽

98、说下Kafka中的Partition?

kafka的partirion过程是将topic划分为多个独立的数据片段的过程,每个parririon是一个有序的不可变的消息队列,消息按照生产者的发送顺序一次追加到partition中,每个partition在物理上对应一个独立的日志文件,被分成多个segment
Partition的作用在于:
实现消息的水平扩展:Kafka可以在多个Broker上并行处理不同Partition的消息,提高了整个系统的吞吐量。
实现数据的持久化:每个Partition都会被复制到多个Broker上,确保数据的可靠性和冗余。
实现消息的顺序性:在同一个Partition中,消息的顺序是有序的,保证了消息的有序性处理。
每个Partition都有一个唯一的标识符(Partition ID),并且可以配置多个副本(Replica),其中一个为Leader副本,其它副本为Follower副本。Leader副本负责处理来自Producer和Consumer的请求,Follower副本用于备份和故障转移。
在生产者发送消息时,可以选择指定消息要发送到的Partition,如果没有指定,Kafka会根据某种策略(如Hash值)将消息平均分配到各个Partition中。而在消费者消费消息时,可以订阅一个或多个Partition,每个消费者只会消费其中一个Partition上的消息。

99、如何使用kafka实现实时数据流处理?

需要创建一个kafka的producer将元数据推送到kafka potic中,再使用kafka的consumer从topic中订阅消息,并将其传递给流处理引擎spark或者flink,对接受到的消息进行实时计算和转换,将结果写回固定的外部存储

100、flink的checkpoint和kafka的offset关联是什么

flink的checkpoint用于记录flink的应用程序的状态,而kafka offset用于记录消费者的topic的位置,两者相互结合,以确保在故障恢复后不会重复处理kafka中的消息
补充:kafka中的数据模型
顾名思义就是kafka的架构;

补充:kafka为什么可以实现高效传输数据

1、利用Partition实现并行处理
一个topic包好多个partition,不同的partition位于不同的节点上,从而可以实现磁盘间的并行处理,充分发挥多磁盘的优势。
2、顺序写磁盘(提供预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快)
影响磁盘的关键因素是磁盘的完成一个IO请求所花费的时间,它由寻道时间、旋转时间和数据传输时间三部分构成。kafka中都通过追加的方式尽可能的将随机IO转换为顺序IO,以此来降低寻址和旋转延时
3、充分利用页缓存Page Cache
引入cache层是为了提高linux操作系统对磁盘访问的性能,cache层在内存中缓存了磁盘上的部分数据,免除了对底层磁盘的操作,提高了性能(liunx的实现中,文件cache层分为两个层面,一个page cache,另一个是buffer cache,每个page chche有多个buffer chche,Page Cache 主要用来作为文件系统上的文件数据的缓存来用,尤其是针对当进程对文件有 read/write 操作的时候。Buffer Cache 则主要是设计用来在系统对块设备进行读写的时候,对块进行数据缓存的系统来使用。)
broker收到数据后,写磁盘时只是将数据写入page chche中,并不能保证数据一定会完全写入磁盘,可能会造成页缓存中的数据为写入磁盘从而造成数据丢失
4、零拷贝(减少拷贝次数)
零拷贝是一种为了解决数据从内核缓存到用户缓存的CPU拷贝产生的性能消耗的技术。
kafka中存在大量的网络数据持久化到磁盘和磁盘文件需要通过网络发送的过程,影响kafka的整体吞吐量
DMA:直接存储器,是一个无需CPU参与,让外设和系统内存之间进行双向数据传输的硬件机制,可以使系统CPU从实际的IO数据传输过程中脱离出来,提高系统的吞吐率
当数据从磁盘经过DMA到内核缓存后,为了减少CPU的拷贝性能损耗,操作系统会将该内核缓存与用户层,减少以此CPU拷贝的过程,
网络数据持久化到磁盘中:
在这里插入图片描述

补充:kafka中的offset

在kafka中,每个topic分区下的每一条消息都被赋予了一个唯一的ID数值,用于标识它在分区中的位置,这个ID数值,就被称为唯一,也叫做偏移量,一旦消费被写入分区日志中,它的位移将不能被修改

补充:削峰、异步、解耦

削峰:就是缓冲瞬时的突发流量,使其平滑,对于上游发送能力很强的系统,若没有消息中间件的保护,脆弱的下游系统可能会被直接压垮导致雪崩
异步:不用同步等待下游将数据处理完,将喜喜发送到消息队列中即可返回,不阻碍主流程
解耦:

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

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

相关文章

雷达基数据绘制成雷达图

x波段雷达基数据绘制成雷达图 1.雷达基数据格式Z_RADR_I_ZR001_20240521020002_O_DOR_YLD2-D_CAP_FMT.bin.bz2 2.基数据读取 python f StandardData(i) # 新版本标准数据radarTime f.scantime # 获取雷达时次date_str radarTime.strftime(%Y-%m-%d %H:%M:%S)date_str d…

盘点10大灵动惊艳小演员❗谁是你的心头好?

盘点国内影视那些惊艳观众的小演员们无疑为影视作品注入了新的活力。以下是10个备受赞誉的小演员: 1.韩昊霖:凭借在《我和我的祖国》和《庆余年》中的出色表现 韩昊霖的演技赢得了观众和业界的广泛认可 他能够准确地把握角色的情感和细节,展…

STM32_USART

1、USART简介 USART,即Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步/异步收发器。USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自…

claude3国内API接口对接

众所周知,由于地理位置原因,Claude3不对国内开放,而国内的镜像网站使用又贵的离谱! 因此,团队萌生了一个想法:为什么不创建一个一站式的平台,让用户能够通过单一的接口与多个模型交流呢&#x…

点云工具CloudCompare下载、安装与汉化

一、下载 软件免费开源,所以可以直接在官网下载,官网地址: CloudCompare - Open Source project 进入官网后,点击菜单栏【Download】 选择合适系统进行下载 二、安装 常规软件安装流程即可 三、汉化 打开软件后,…

社交媒体数据恢复:微信电话本

首先,请确保您的微信已登录,并且您具有管理员权限。接下来,按照以下步骤进行操作: 第一步:备份微信数据 在进行数据恢复之前,建议您先备份微信数据。这可以帮助您在数据丢失的情况下更好地保护您的微信数据…

成都百洲文化传媒有限公司引领电商服务新风尚

在当今数字化时代,电商行业正以前所未有的速度蓬勃发展,而在这个充满机遇与挑战的领域中,成都百洲文化传媒有限公司以其专业的电商服务,成为了行业的佼佼者。作为一家专注于电商服务的传媒公司,百洲文化不仅为商家提供…

NDK下载与配置以及遇到的问题

通过 Android Studio进行下载或者官网下载,下面是在 androidStudio中下载在项目中配置ndk 菜单栏点开 File-》Project Structure,可以看到配置好的ndk配置ndk的系统环境变量,系统变量 -> 新建一个变量名为 NDK_HOME -> 变量值为文件路…

新旅程:类与对象的魔法课堂

🎉🎉🎉欢迎莅临我的博客空间,我是池央,一个对C和数据结构怀有无限热忱的探索者。🙌 🌸🌸🌸这里是我分享C/C编程、数据结构应用的乐园✨ 🎈🎈&…

AI大模型在测试中的深度应用与实践案例

文章目录 1. 示例项目背景2. 环境准备3. 代码实现3.1. 自动生成测试用例3.2. 自动化测试脚本3.3. 性能测试3.4. 结果分析 4. 进一步深入4.1. 集成CI/CD管道4.1.1 Jenkins示例 4.2. 详细的负载测试和性能监控4.2.1 Locust示例 4.3. 测试结果分析与报告 5. 进一步集成和优化5.1. …

RK3588 camera驱动总结二之图像格式

camera驱动中很重要的一个设置就是格式,此文来看看这块。 在驱动中有个重要的参数mbus-code,即Media Bus Pixel Codes,它描述的是用于在物理总线上传输的格式,比如 sensor 通过mipi dphy 向 isp 传输的图像格式,或者在…

AI预测体彩排3采取888=3策略+和值012路一缩定乾坤测试5月28日预测第4弹

今天继续基于8883的大底进行测试,今天继续测试,好了,直接上结果吧~ 首先,888定位如下: 百位:3,4,2,5,0,7,8,9 十位:3,2,4,1,6,7,8,9 个位:0,1,2,3,4,5,6,7 …

如果你使用vscode的ssh插件远程连接不了服务器,解决办法如下

CtrlShiftP打开命令面板,在命令面板中输入setting,选择User Settings 在页面中配置"remote.SSH.useLocalServer": true,保存重启后再重新连接就好了 再次连接就可以输入密码连接了

YOLOv5改进 | 卷积模块 | 提高网络的灵活性和表征能力的动态卷积【附代码+小白可上手】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 轻量级卷积神经网络由于其低计算预算限制了CNNs的深度(卷积层数)和宽度(通道数),…

手机号码携号转网查询保障用户权益、信息透明、优化用户体验

携号转网服务是指在同一本地网范围内,蜂窝移动通信用户(不含物联网用户)变更签约的基础电信业务经营者而用户号码保持不变的一项服务。近年来,随着通信行业的不断发展,携号转网服务已成为满足用户个性化需求、提升服务…

使用nexus搭建的nodejs私库,定期清理无用的npm组件,彻底释放磁盘空间

一、背景 昨天我们整理了一篇关于docker私库,如何定期清理以释放磁盘空间的文章。 虽然也提及了npm前端应用的组件该如何定期清理的,本文是对它作一个补充说明。 前文也看到了,npm组件占用的blob空间为180多GB,急需清理。 二、…

给pdf加水印,python实现

from PyPDF2 import PdfReader, PdfWriterdef add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out):"""把水印添加到pdf中"""pdf_output PdfWriter()input_stream open(pdf_file_in, rb)pdf_input PdfReader(input_stream, strictFalse…

111.二叉树的最小深度

给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 返回它的最小深度 2. 思路: 后序遍历(左右中&#xff…

Mybatis预编译

想要看到sql语句有没有执行, 可以用过日志去查看 在properties中打开 使用 stdout 是向控制台输出 #日志开启,sql ,mybatis mybatis.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl

【Beyond Compare】专业的文件对比工具

一、Beyond Compare官方下载 二、Beyond Compare简介 三、Beyond Compare 4激活 一、Beyond Compare官方下载 Beyond Compare官方下载https://www.beyondcompare.cc/ Beyond Compare 4中文包 链接:https://pan.baidu.com/s/14igdUm0Xy7DFp4Jzb58AZg?pwdGLNG 提取码…