Kafka 的一些问题,夺命15连问
-
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、Kafka中Leader挂了,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的选举规律
相关文章:
Kafka 的一些问题,夺命15连问
kafka-中的组成员 kafka四大核心 生产者API 允许应用程序发布记录流至一个或者多个kafka的主题(topics)。 消费者API 允许应用程序订阅一个或者多个主题,并处理这些主题接收到的记录流 StreamsAPI 允许应用程序充当流处理器(s…...
unity3d————延时函数
1.public void InvokeRepeating(string methodName, float time, float repeatRate); 延迟重复执行函数 InvokeRepeating 参数一:函数名字符串 参数二:第一次执行的延迟时间 参数三:之后每次执行的间隔时间 注意: 1-1.延时函数第…...
计算机学生自我提升方法——善用搜索引擎
计算机学生自我提升方法——善用搜索引擎 在信息爆炸的时代,计算机专业的学生如何有效地自我提升?答案可能就藏在一个简单却强大的工具——搜索引擎中。搜索引擎不仅是获取知识的入口,更是解决问题的利器。下面,我将分享一些善用…...
游戏引擎学习第一天
视频参考: https://www.bilibili.com/video/BV1zGDCYHErA/ 创建一个保存项目的路径 VS的安装略过,个人自行百度 1. vs 创建第一个CMAKE的窗口项目 game.cpp 修改如下的代码 到https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-winmain 去…...
uni-app view循环绑定click和 v-if
<view class"layout-wrap-item" v-for"(item, index) in menuItems" :key"index" click"item.clickHandler" :v-if"showMenu(item)"></view> const xxx (id) > { }; // 定义菜单项数组 const menuItems …...
Redis 高并发分布式锁实战
目录 环境准备 一 . Redis 安装 二:Spring boot 项目准备 三:nginx 安装 四:Jmeter 下载和配置 案例实战 优化一:加 synchronized 锁 优化二:使用 redis 的 setnx 实现分布式锁 优化三:使用 Lua 脚本…...
关于elementui el-radio 赋值问题
今天遇到这样的问题: 点击的时候,同时选中 照抄官网! 后来发现了问题: 也就是说如果你的版本太低,就不能用value,而得用label,于是修改 <el-radio-group v-model"searchTime"&g…...
2024-11-6----Android 11(全志713m)----- 关于添加 Selinux 权限
需求 节点: /sys/devices/platform/motor0/motor_ctrl上层 APP 使用 JNI 需要对该节点进行 echo 的操作,操作失败。 添加前的验证工作 adb 进去验证下,如下图所示: 发现权限不够。su 以后再操作是OK的,如下图: 添加前的修改 为防止报权限错误,直接给777,因为该…...
shodan5(泷羽sec)
声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章。 笔记只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 这节课旨在扩大自己在网络安全方面的知识面,了解网络安全领域的见闻,了…...
【Linux】Ansible集中化运维工具(详解)安装、常用模块、playbook脚本
文章目录 一、Ansible安装及远程控制1、关闭防火墙和SELinux2、安装ansible3、配置SSH无密码登录1、在管理机上生成一对密钥2、将公钥下发到远程主机3、保管密钥 4、主机目录 二、常用模块1、setup模块2、copy模块3、file模块4、shell模块5、script模块6、ping模块7、group模块…...
惠州石湾DELL T130服务器黄灯不开机案例
惠州石湾一个朋友反馈一台DELL PowerEdge T130 塔式服务器故障为 通电后无法开机,前面同时亮3个故障灯。闪电灯,电压灯,高温灯 1:这种情况建议大家更换一个同型号的电源进行故障排除。 2:朋友把该服务器硬件最小化测…...
⭐SmartControl: Enhancing ControlNet for Handling Rough Visual Conditions
目录 0 Abstract 1 Motivation 2 Related Work 2.1 Text-to-Image Diffusion Model 2.2 Controllable Text-to-Image Generation 2.3 ControlNet 2.4 Control Scale Exploration 3 Method 3.1 Framework 3.2 Control Scale Predictor 3.3 Unaligned Data Constructi…...
wordpress站外调用指定ID分类下的推荐内容
在WordPress中,如果你想从站外调用指定ID分类下的推荐内容,你可以使用WordPress REST API来实现。以下是一个基本的步骤指南: 1. 启用REST API 确保你的WordPress站点已经启用了REST API。大多数现代WordPress版本默认启用此功能。 2. 获取…...
Ente: 我们的 Monorepo 经验
原文:manav - 2024.10.29 九个月前,我们切换到了 monorepo。在此,我将介绍我们迄今为止的切换经验。 这并不是一份规范性的建议,而是一个经验的分享,目的是希望能够帮助其他团队做出明智的决策。 与大多数岔路不同&…...
Kafka java 配置
前言: 大家好,大家在springboot项目中,经常采用 KafkaListener 做为消费者。这个是spring为我们封装的。 但是某些情况 注解的方式并不能满足需求。这个时候就需要手动版本了。 介绍: 我们已经集成spring-Kafka 就不需要再…...
网络安全现状:复杂的威胁形势导致压力水平飙升
《2024 年网络安全状况》报告深入分析了当前网络安全挑战和趋势。 该报告重点介绍了几个关键的关注领域,包括人员短缺、技能差距、不断演变的威胁和预算限制,同时还指出了取得进展的领域,例如对威胁响应能力的信心增强以及对网络风险评估的认…...
【机器学习】强化学习(1)——强化学习原理浅析(区分强化学习、监督学习和启发式算法)
文章目录 强化学习介绍强化学习和监督学习比较监督学习强化学习 强化学习的数学和过程表达动作空间序列决策策略(policy)价值函数(value function)模型(model) 强化学习和启发式算法比较强化学习步骤代码走…...
【SoC设计指南 基于Arm Cortex-M】学习笔记1——AMBA
AMBA简介 先进微控制器总线架构(Advanced Microcontroller Bus Architecture,AMBA)是用在arm处理器上的片上总线协议规范集。 AMBA总线协议规范集包含AHB、APB、AXI等。 AHB:先进高性能总线(Advanced High-performance Bus) APB&…...
flutter鸿蒙模拟器 Win环境调试报错问题记录(暂未解决)
前情提要: 1、flutter项目已经正确生成了ohos项目 2、flutter和鸿蒙的环境变量配置正确 3、ohos项目执行flutter build hap成功 4、没有真机,使用win环境创建的x86模拟器 问题状态 使用模拟器运行ohos,控制台提示“安装HAP 报 code:9568347错…...
详解Rust标准库:HashSet
## 查看本地官方文档安装rust后运行 rustup doc查看The Standard Library即可获取标准库内容 std::collections::hash_set::HashSet定义 HashSet是一种集合数据结构,它只存储唯一的元素。它主要用于检查元素是否存在于集合中,或者对元素进行去重操作&…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
医疗AI模型可解释性编程研究:基于SHAP、LIME与Anchor
1 医疗树模型与可解释人工智能基础 医疗领域的人工智能应用正迅速从理论研究转向临床实践,在这一过程中,模型可解释性已成为确保AI系统被医疗专业人员接受和信任的关键因素。基于树模型的集成算法(如RandomForest、XGBoost、LightGBM)因其卓越的预测性能和相对良好的解释性…...
UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...
