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

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.mzph.cn/bicheng/16726.shtml

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

相关文章

Vue3+Ant design 实现Select下拉框一键全选/清空

最近在做后台管理系统项目的时候,产品增加了一个让人非常苦恼的需求,让在Select选择器中添加一键全选和清空的功能,刚开始听到的时候真是很懵,他又不让在外部增加按钮,其实如果说在外部增加按钮实现全选或者清空的话&a…

3、python安装-linux系统下

安装前置依赖软件,安装完成后,打开官网,下载linux系统下的python安装包: 选择最新的版本 点击最新版本,进入版本对应的界面, 选择第一个进行源码的编译,右键选择复制连接地址, 回到终…

HTML+CSS+JS(web前端大作业)~致敬鸟山明简略版

HTMLCSSJS【动漫网站】网页设计期末课程大作业 web前端开发技术 web课程设计 文章目录 一、网站题目 二、网站描述 三、网站介绍 四、网站效果 五、 网站代码 文章目录 一、 网站题目 动漫网站-鸟山明-龙珠超 二、 网站描述 页面分为页头、菜单导航栏(最好可下拉&…

CDC 数据实时同步入湖的技术、架构和方案(截至2024年5月的现状调研)

近期,对 “实时摄取 CDC 数据同步到数据湖” 这一技术主题作了一系列深入的研究和验证,目前这部分工作已经告一段落,本文把截止目前(2024年5月)的研究结果和重要结论做一下梳理和汇总。为了能给出针对性的技术方案&…

ESP32-C6接入巴法云,Arduino方式

ESP32-C6接入巴法云,Arduino方式 第一、ESP32-C6开发环境搭建第一步:安装arduino IDE 软件第二步:安装esp32库第三:arduino 软件设置 第二:简单AP配网程序第一步:程序下载第二步:程序使用第三步…

电脑微信群发 500 1000人以上怎么群发,微信营销群发助手软件,本人亲测,增加十倍业绩!!!

今天给大家推荐一款我们目前在使用的电脑群发工具掘金小蜜,不仅可以无限多开,方便你同时管理多个账号,群发功能更是十分强大,轻松释放你的双手。 掘金小蜜(只支持Win7及以上操作系统,没有推Mac版和手机客户…

[码蹄集新手训练营]MT1016-MT1020

目录 题号MT1016 宽度与对齐MT1017 左右对齐MT1018 输入宽度MT1020 %s格式符 题号 MT1016 宽度与对齐 #include<stdio.h> int main() { printf("%-5d %5d\n%-5d %5d\n%-5d %5d",455,455,-123,-123,987654,987654);return 0; }MT1017 左右对齐 #include<s…

Mac | macOs系统安装Monuty解决外接u盘ntfs读写问题

问题 mac电脑的macOs系统无法将文件读写入外接u盘或硬盘中&#xff1b; 解决方案 安装Monuty 官网&#xff1a;mounty官网 下载软件 安装其他配置 macbook:~ uwe$ brew install --cask macfuse macbook:~ uwe$ brew install gromgit/fuse/ntfs-3g-mac macbook:~ uwe$ brew…

机顶盒也可以跑量--上机指南

一、背景介绍 随着科技的进步和智能设备的普及&#xff0c;机顶盒已不再是单纯的电视接收器&#xff0c;而是逐渐演变成为家庭娱乐中心。越来越多的机顶盒支持各种应用、游戏和功能&#xff0c;使得用户可以在大屏幕上享受更多样化的内容。本指南将带你深入了解如何让你的机顶…

价格预言机领导者 Pyth 与 Eclipse 平台集成,为高频 DeFi 应用提供支持

本篇文章将对这一战略合作伙伴关系&#xff0c;以及 Pyth 网络在 Eclipse 生态系统中扮演的关键角色进行深入探讨。 目前&#xff0c;Pyth 价格数据已正式上线于 Eclipse 测试网。Eclipse 是首个结合了以太坊安全性、Solana 性能和 Celestia DA 的 Solana虚拟机(SVM) Layer2 方…

无线麦克风哪个牌子性价比高?揭秘领夹麦克风性价比最高品牌

随着自媒体行业的兴起&#xff0c;现在视频直播或者是个人Vlog都越来越受欢迎了&#xff0c;要想做好内容&#xff0c;除了画面之外&#xff0c;声音效果同样重要。而我们手机上自带的麦克风&#xff0c;容易受环境影响&#xff0c;特别是在户外或者拍摄距离较远时&#xff0c;…

微软改进WSL子系统 新版将支持镜像宿主机网络接口及使用外部DNS

Windows SubSystem for Linux (即 WSL) 是微软在 Windows 10/11 中开发的子系统功能&#xff0c;该功能允许用户在 Windows 上安装 Linux 系统和相关环境&#xff0c;对开发者来说可以构建 Linux 开发环境进行工作。不过 WSL 系统在功能上也有不少缺点&#xff0c;典型的就是默…

【Docker实战】进入四大数据库的命令行模式

上一篇我们讲了docker exec命令&#xff0c;这一次我们使用docker exec命令来进入四大数据库的命令行模式。 我们进行游戏开发或软件开发是离不开四大数据库的&#xff0c;这四大数据库分别是关系型数据库mysql、postgres&#xff0c;nosql数据库redis、mongodb。将它们容器化…

TopK问题

前言&#xff1a;本篇对TopK问题的解答是介于堆的基础上讲的 TopK问题&#xff1a; 就是在许多数据中找到前K个最大的数据或者最小的数据 比如&#xff1a;专业前10、世界五百强、富豪榜、以及游戏排行榜等等 对于TopK问题&#xff1a;能想到的最简单直接的方式就是排序解决,…

fastadmin二次开发 修改默认的前端弹出样式

需要修改fastadmin后台默认的弹出提示样式效果&#xff1a; 在项目里搜索这个关键词&#xff1a;Toastr 首先这个文件&#xff0c;里面的success和error就是弹出提示的方法。 public/assets/js/fast.js 然后是下面这个文件&#xff1a; public/assets/js/require-form.js 你…

对于高速信号完整性,一块聊聊啊(13)

前面一篇说了有源仿真和无源仿真的区别&#xff0c;今天介绍一下前仿真和后仿真。 一个完整的电路设计中必然包含前仿真和后仿真两个部分&#xff0c;它们都属于验证的必要环节。 尤其是在复杂的芯片设计中&#xff0c;验证要占用整个芯片设计流程时间的60%-70%。目的就是尽可…

解析气膜场馆造价—轻空间

随着社会的发展和对环保及时间成本的重视&#xff0c;气膜场馆逐渐成为众多体育场馆的首选建筑模式。气膜建筑包括气膜篮球场、气膜室内足球场、气膜羽毛球场、气膜乒乓球馆、气膜网球场以及气膜滑冰场等&#xff0c;因其多项优势受到广泛应用。 气膜场馆的显著特点 1. 气膜场馆…

aosp14的分屏接口ISplitScreen接口获取方式更新-学员疑问答疑

背景&#xff1a; 有学员朋友在学习马哥的分屏pip自由窗口专题时候&#xff0c;做相关分屏做小桌面项目时候&#xff0c;因为原来课程版本是基于android 13进行的讲解的&#xff0c;但是现在公司已经开始逐渐进行相关的android 14的适配了&#xff0c;但是android 14这块相比a…

2024年上半年系统架构设计师——案例第二题——UML相关

这个只记到一个大概了 主题干&#xff0c;说明人员访客系统 题目1 9分 问序列图信息类型和特点 题目2 序列图填空 好像是10分吧 访客系统的序列图 题目3 6分 说明软件分析和设计时的和UML图有关原则&#xff1f;

展厅设计要做好需要考虑哪些要素

1、展示主题 企业展厅要有一个明朗的展示主题&#xff0c;不止是为了为展厅设计提供方向&#xff0c;也是为了让参观者更好地了解和认识企业。通过精心策划的展示主题&#xff0c;打造一个富有情感和故事性的展示空间&#xff0c;可以快速感染到参观者&#xff0c;使其能够在参…