Kafka 的一些问题,夺命15连问

news2024/11/14 17:15:08
  • kafka-中的组成员

  • kafka四大核心

    • 生产者API

      • 允许应用程序发布记录流至一个或者多个kafka的主题(topics)。

    • 消费者API

      • 允许应用程序订阅一个或者多个主题,并处理这些主题接收到的记录流

    • StreamsAPI

      • 允许应用程序充当流处理器(stream processor),从一个或者多个主题获取输入流,并生产一个输出流到一个或 者多个主题,能够有效的变化输入流为输出流。

    • ConnectorAPI

      • 允许构建和运行可重用的生产者或者消费者,能够把kafka主题连接到现有的应用程序或数据系统。例如:一个连 接到关系数据库的连接器可能会获取每个表的变化

1、kafka消息发送流程

在消息发送过程中设计到了两个线程一个main线程和一个Send线程,在main线程中创建了一个双端队列RecordAccumulator,main线程将消息发送给双端队列,send线程不断从双端线程中拉去消息发送到kafka Broker:

外部数据(生产者),发送消息经过main线程其中数据在main中先经过main的拦截器、序列化器、分区器后被推送到双端队列中,双端队列(RecordAccumulator 缓冲区总大小,默认是32m,但是这个值可以调),数据在双端队列中被分为多个双端队列的容器(当双端队列的容器batch.size的数据累计到16k的时候会自动发送到sengder端,还有一种情况就是数据不满足16k的时候,可以调senser等待linger.ms设置时间,时间到了后就会发送数据,单位是ms、默认值是0ms,延迟建设设置在5~100ms之间),当数满足以上条件的时候,sender从双端线程RecordAccumulator去拉取数据,当数到达sender线程的时候,数据会在client端分成多个分区的request(默认是5个request)然后kafka集群会去sender去接受sender推送归来的、每拉取一个数据会给sender一个返回值(ack,ack返回的次数,默认是5次),说明已经接收到数据(特殊情况,当消息队列中的数据推送过去后,kafka没有给sender返回值,这时候为了重发送消息(重试发送的时间间隔默认是100ms),如果设置了重试发送,还需要设置重试次数(默认是 int 最大值2147483647),然后信息就会进去kafka集群)

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

kafka的框架主要有以下的几个方面构成:

1、Producer:消息生产者,向kafka客户端 发送消息的

2、Consumer:消息消费者,从卡夫卡客户端拉取消息的

3、Consumer Group(CG):消费者组,由多个消费者组成,消费者组内的每个消费者负责消费不同分区的数据,一个分区只能有一个组内的消费者消费,消费者租之间互不影响,所有消费者组,即消费者组是逻辑上的一个订阅者。

4、Broker:一台kafka服务器就是一个broker,一个集群有多个broker

5、Topic:队列,生产者消费者都面向一个topic

6、Partition:一个topic上可以分为多个分区,每个分区都是一个有序的队列

7、Replica:副本,每一个topic都有很多个副本,一个leader和多个follower

8、Leader:每个分区多个副本的’领导者‘数据发送的对象,和消费者拉取的对象都属leader

9、follower:保持和leader数据同步,备份数据,防止leader崩溃数据丢失

框架:

数据从生产者发送到kafka集群的每个broker上的topic(发送的是每个leader,然后follow会会作为leader的备份数据存在broker上边),然后每个topic都有分区,分为不同的分区,然后经过处理,发送到消费者组里边,分别发送,每个消费者组之间不糊影响

3、Kafka 分区的目的?

1、分区便于合理使用存储资源,每个分区在broker上存储,可以把海量数据按照分区切割成一块一块数据存储在多台broker上,合理控制分区的任务,可以实现负载均衡的效果

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

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

保证消息的有序性需要依赖以下几个机制和策略:

1、单一分区内的消息有序,每一个topic内只有一个partation分区,因为分区内有序,可以将所有消息发送到一个分区内,在创建一个topic的时候可以将分区数调为1

2、使用幂等性生产者(默认自动开启),幂等性主要是防止生产者重复发送消息,并且发送到一个分区,保证消息的有序性

5、ISR、OSR、AR 是什么?

ISR:可用的、存活的,leader+follower 是存活的broker

OSR:已经停止的broker

AR:是内部选举选举的顺序,例如AR[2,0,1]

三者的关系:

AR=ISR+OSR

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

1、生产者发送过来的数据,leadr收到应答后,此时生产者以为数据发送成了但是此时,leader挂掉了,但是follower的数据还没同步完,但是follower变成了leader,这个时候数据就会丢失,因为此时的leader是数据是follower没有同步完的数据,导致消息丢失。(图1)

2、生产者发送过来的数据,leader和isr队列里所有节点收齐数据后应答:

leadr收到数据后所有的follower开始同步数据,但是这时候有一个follower副本挂掉了,然后迟迟不能同步数据,但是leadr也挂断了然后选举了那个坏的follower作为leader导致数据丢失。(图2)

解决方案:

Leader维护了一个动态的in-sync replica set(ISR),意为和 Leader保持同步的Follower+Leader集合(leader:0,isr:0,1,2)

如果Follower长时间未向Leader发送通信请求或同步数据,则该Follower将被踢出ISR。该时间阈值由replica.lag.time.max.ms参数设定,默认30s

图1

图2

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

1、尽可能的防止数据丢失,采用6的方法

2、将ack的级别调成-1“all”,分区副本数要大于等于2

3、ISR里应答的最小副本数大于等于2

解释:

ack:

  acks=0,生产者发送过来数据就不管了,可靠性差,效率高;

  acks=1,生产者发送过来数据Leader应答,可靠性中等,效率中等;

  acks=-1,生产者发送过来数据Leader和ISR队列里面所有Follwer应答,可靠性高,效率低;

  在生产环境中,acks=0很少使用;acks=1,一般用于传输普通日志,允许丢个别数据;

   acks=-1,一般用于传输和钱相关的数据,对可靠性要求比较高的场景。

数据完全可靠性的条件:ack设置为-1+分区副本大于等于2+isr应答副本大于等于2

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

重复原因:

当ask为-1的时候,可能出现数据重复问题,数据发送给了leader,follower也同步成功了,此时准备应答ask为-1的时候leader挂了,然后follower为leader,然后发送没有收到-1的信号,然后又从新发送新的信息给leader导致数据重复

去重:

Exactly Once:数据唯一

  开启幂等性(幂等性,就是producer无论向broker发送多少重复的数据,只能是持久化的一条数据,保证的不重复,幂等性是默认开启的,类似于distinct)

  数据唯一:幂等性+ack-1+分区副本数大于等于2+isr最下副本数大于等于2(不停机情况下)

但是幂等性只能保证在服务器不停机的情况下不会出现重复数据,当服务器运行的时候突然停机,就会出现leader重新阅读的情况导致数据丢失,这时候需要开启事务

事务:开启事务的前提要开启幂等性,生产者请求kafka服务器一个唯一id、这个id不能重复(幂等性需要),然后服务器返回这个id、,然后消费者发送信息请求给kafka,然后kafka给生产者一个返回值这时候生产者发送数据给topic,kafka事务协调器进行持久化请求给transacti分区(这个分区默认有50个分区,每个分区负责一部分事务)

当开始幂等性+事务+ack-1+分区副本大于等于2+isr最小分区副本大于等于2 就可以保证数据的唯一性(可能存在停机的情况下,用)

事务:

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

在消息发送过程中双端队列中调节batch.size:批次大小,默认16k(可以调大一点),linger.ms:信息等待时间调到(5~100ms),compression.type:压缩snappy (压缩类型有none、gzip、snappy、lz4 和 zstd),RecordAccumulator:缓冲区大小,修改为64m(默认32m)

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

zk储存kafka的信息:

主要储存的信息有:

  1、broker【012】 服务器信息

  2、一个json 记录了谁是leader,哪些服务器可用

  3、辅助选举leader

zk中有一个节点 consumers 这个里面,老版本0.9版本之前,存放的是消费者的偏移量(offset,这次消费者消费到哪个地方了,下次从这个地方继续消费),新版本的根本没放在zk中,直接放在集群中了

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

当选举leader的时候,broker会被选举为Contorller leader,负责集群管理breaker的上线和下线,和所有topic分区副本的leader的选举

contorllet依赖于zooker,启动集群的时候会在zk中注册记录,然后将节点信息上传到zkisr【】中,谁先注册谁就是leader如果集群的某一个leader挂掉的话,contorllet会监听到变化,然后选举新的leader(在isr中存活为前提,按照ar(kafka分区中的所有副本统称)中的排序优先选)例如ar【1,0,2】 isr【1,0,2】那么选举顺序就是1,0,2轮询查询

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

出现乱序的原因:

1)生产者在发送3请求的时候,发生异常,发生异常需要重新发送,所以排在了后面,在进行落盘的时候,先落盘1,2 ,落盘3的时候发现是4,需要等,等到3出现为止,然后将 3,4 ,5排序,排序后再进行落盘。

顺序错乱了,会自动排序(开启幂等性)。

kafka在1.0之前版本保证分区有序,是采用:max.in.flight.requests.per.connection=1(不需要考虑是否开启幂等性)

1.0及以后的版本采用,开启幂等性,然后设置max.in.flight.requests.per.connection需要设置小于等于5, 未开启幂等性:max.in.flight.requests.per.connection需要设置为1,

启用幂等性,kafka服务端会缓存producer的5个request的元数据,这都可保证最近5个request的数据是有序的

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

服役:1、需要创建以下json,创建一个均衡的主题,然后生成一个负载均衡的计划(kafka-reassign-partitions.sh --bootstrap-server bigdata01:9092 --topics-to-move-json-file topics-to-move.json --broker-list "0,1,2,3" --generate)2、执行之前写的json,然后将生成的未来分区策略复制,3、创建副本存储计划(所有副本存储在 broker0、broker1、broker2、broker3 中),4、然后执行副本存储计划,5、验证副本存储计划

退役:先按照退役一台节点,生成执行计划,然后按照服役时操作流程执行负载均衡1、创建json创建一个负载均衡主题2、创建执行计划3、创建副本存储计划4、执行副本5、验证副本存储计划

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

leader:leader发生故障后,会从isr中从新选出一个新的leader,为了保证多个副本之间的一致性,其余的follower会将各自的log文件高于hw的部分截掉,然后从新的leader同步数据(木桶理论),只能保证副本时间的一致性不能保证数据不会重复

LEO:每个副本的最后一个offset(偏移量),leo其实就是最新的offset+1

HW:所有副本中最小的leo

follower故障:follower故障后会被临时的提出isr,这个期间leader和follower会一直的接收数据,但是等到那个被临时踢出的follower恢复后,follower会读取本地磁盘的记录上次的hw,并将文件高于hw的部分你截取掉,然后从新开始从leader读取数据,等到该follower的leo大于等于这个hw的时候,就可以从新进入isr队列

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

写一个json然后把,指定的leader follower写进去,然后根据这个json创建topic就能,创建副本存储计划(所有副本都指定存储在 broker0、broker1、broker2 中),执行副本存储计划,打破这个leader的选举规律

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

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

相关文章

精选5款小程序设计工具,助力设计之路璀璨前行

在当今数字化浪潮中,小程序的重要性日益凸显,无论是电商、社交还是服务领域,小程序都成为连接用户与品牌的关键桥梁。而一款优秀的小程序离不开精心的设计,以下 5 款小程序设计工具将成为你设计事业的得力助手。 一、即时设计 即…

亚马逊评论爬虫+数据分析

爬取评论 做分析首先得有数据,数据是核心,而且要准确! 1、爬虫必要步骤,选好框架 2、开发所需数据 3、最后测试流程 这里我所选框架是seleniumrequest,很多人觉得selenium慢,确实不快,仅针对此…

量子计算及其在密码学中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 量子计算及其在密码学中的应用 量子计算及其在密码学中的应用 量子计算及其在密码学中的应用 引言 量子计算概述 定义与原理 发展…

论文笔记:no pose,no problem-基于dust3r输出GS参数实现unpose稀疏重建

1.摘要 我们引入了 NoPoSplat,这是一种前馈模型,能够从未设置的稀疏多视图图像中重建由 3D 高斯参数化的 3D 场景。 我们的模型专门使用光度损失进行训练,在推理过程中实现了实时 3D 高斯重建。 为了消除重建过程中对准确pose的需要&#xff…

godot--自定义边框/选中时样式 StyleBoxTexture

前提知识: stylebox就像一个贴图,把图案贴到控件是。多个stylebox同时生效的话,那当然也有层级之分,上层覆盖下层(可以设置透明度来显示下层) 关于主题的概念: godot——主题、Theme、StyleB…

ReactPress 安装指南:从 MySQL 安装到项目启动

ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎Star。 ReactPress 是一个基于 React 的开源发布平台,适用于搭建博客、网站或内容管理系统(CMS)。本文将详细介绍如何安装 ReactPress,包括…

BMC运维管理:IPMI实现服务器远控制

IPMI实现服务器远控制 实操一、使用IPMI重置BMC用户密码实操二、使用IPMI配置BMC的静态IP实操三、IPMI实现BMC和主机控制操作实操四、ipmitool查看服务器基本信息实操五、ipmitool实现问题定位BMC(Baseboard Management Controller,基板管理控制器)是服务器硬件的一个独立管…

手机上用什么方法可以切换ip

手机上用什么方法可以切换IP?在某些特定情境下,用户可能需要切换手机的IP地址,以满足网络安全、隐私保护或绕过地域限制等需求。下面以华为手机为例,将详细介绍手机IP地址切换的几种方法,帮助用户轻松实现这一目标。 一…

鸿蒙多线程开发——并发模型对比(Actor与内存共享)

1、概 述 并发是指在同一时间段内,能够处理多个任务的能力。为了提升应用的响应速度与帧率,以及防止耗时任务对主线程的干扰,HarmonyOS系统提供了异步并发和多线程并发两种处理策略。 异步并发:指异步代码在执行到一定程度后会被…

【NLP】使用 PyTorch 从头构建自己的大型语言模型 (LLM)

读完这篇文章后,你会取得什么成就?你将能够自己构建和训练大型语言模型 (LLM),同时与我一起编写代码。虽然我们正在构建一个将任何给定文本从英语翻译成马来语的 LLM,但你可以轻松地修改此 LLM 架构以用于其他语言翻译任务。 LLM…

css:还是语法

emmet的使用 emmet是一个插件&#xff0c;Emmet 是 Zen Coding 的升级版&#xff0c;由 Zen Coding 的原作者进行开发&#xff0c;可以快速的编写 HTML、CSS 以及实现其他的功能。很多文本编辑器都支持&#xff0c;我们只是学会使用它&#xff1a; 生成html结构 <!-- emme…

YOLO即插即用---PConv

Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks 论文地址&#xff1a; 1. 论文解决的问题 2. 解决问题的方法 3. PConv 的适用范围 4. PConv 在目标检测中的应用 5. 评估方法 6. 潜在挑战 7. 未来研究方向 8.即插即用代码 论文地址&#xff1a; …

小白NAS磁盘规划实践:一次科学、高效的存储旅程

引言 如今,数字化生活正逐步渗透到我们生活的方方面面。从家庭影音到工作文件,从珍贵的照片到大型游戏库,数据的存储需求日益增加。许多朋友开始关注NAS(网络附加存储)设备。作为一个专为数据存储和管理设计的系统,NAS能为我们提供安全、高效的存储方案。但如何科学地规…

ADC前端控制与处理模块--AD7606_Module

总体框架 AD7606_Module主要由3个模块组成组成&#xff0c;AD7606_Data_Pkt和AD7606_Drive以及AD7606_ctrl。 1.AD7606_Data_Pkt主要作用是把AD芯片数据组好数据包&#xff0c;然后发送给上位机&#xff1b; 2.AD7606_Drive主要负责和芯片的交互部分 3.AD7606_ctrl控制模块的作…

注意力机制篇 | YOLO11改进 | 即插即用的高效多尺度注意力模块EMA

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。与传统的注意力机制相比&#xff0c;多尺度注意力机制引入了多个尺度的注意力权重&#xff0c;让模型能够更好地理解和处理复杂数据。这种机制通过在不同尺度上捕捉输入数据的特征&#xff0c;让模型同时关注局部细节和全局…

dell服务器安装ESXI8

1.下载镜像在官网 2.打开ipmi&#xff08;idrac&#xff09;&#xff0c;将esxi镜像挂载&#xff0c;然后服务器开机 3.进入bios设置cpu虚拟化开启&#xff0c;进入boot设置启动选项为映像方式 4..进入安装引导界面3.加载完配置进入安装 系统提示点击继 5.选择安装磁盘进行…

Linux -- 操作系统(软件)

目录 什么是操作系统&#xff1f; 计算机的层状结构 为什么要有操作系统 操作系统到底层硬件 驱动程序 操作系统如何管理硬件&#xff1f; 操作系统到用户 系统调用接口 库函数 回到问题 什么是操作系统&#xff1f; 操作系统&#xff08;Operating System&#xf…

【大数据算法】MapReduce算法概述之:MapReduce基础模型

MapReduce基础模型 1、引言2、MapReduce基础模型2.1 定义2.2 核心原理2.3 优点2.4 缺点2.5 局限性2.6 实例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;鱼哥&#xff0c; 不得了啊 小鱼&#xff1a;啥事情这么慌慌张张的 小屌丝&#xff1a;这不是慌张啊 小鱼&#x…

深入解析 Transformers 框架(四):Qwen2.5/GPT 分词流程与 BPE 分词算法技术细节详解

前面我们已经通过三篇文章&#xff0c;详细介绍了 Qwen2.5 大语言模型在 Transformers 框架中的技术细节&#xff0c;包括包和对象加载、模型初始化和分词器技术细节&#xff1a; 深入解析 Transformers 框架&#xff08;一&#xff09;&#xff1a;包和对象加载中的设计巧思与…

商品详情 API 接口的返回结果通常包含哪些信息?

商品详情 API 接口的返回结果通常包含以下几类信息&#xff1a; 一、商品基本信息&#xff1a; 商品 ID&#xff1a;唯一标识商品的编号&#xff0c;在电商平台的数据库中具有唯一性&#xff0c;用于区分不同的商品。商品标题&#xff1a;对商品的简要描述&#xff0c;通常包…