kafka常见面试题总结
Kafka 核心知识解析
一、Kafka 消息发送流程
Kafka 发送消息涉及两个线程:main 线程和 sender 线程。在 main 线程中,会创建一个双端队列 RecordAccumulator,main 线程负责将消息发送给 RecordAccumulator,而 sender 线程则从 RecordAccumulator 中拉取消息并发送到 Kafka Broker。
二、Kafka 分区的目的
- 合理使用存储资源与负载均衡
分区会分布在不同 broker 上,通过将海量数据分区存储在各个 broker,可以实现负载均衡的效果,以此达到合理使用存储资源的目的。 - 提高并行度
生产者能够以分区为单位发送消息,消费者也以分区为单位消费数据,这样大大提高了并行度。
三、Kafka 消息的有序性保障
- 生产者端
最简单的方式是设置一个分区,因为 Kafka 在同一个分区内传递消息是有序的。或者可以选择同步式发送模式,不过这种模式效率较低。 - 消费者端
可以设置单个消费者单个分区,以此确保消息的有序性。
四、ISR、OSR、AR 概念
ISR 是 Kafka 集群中还存活的副本,OSR 是在规定时间内没有做出响应被认为已经挂掉的副本,AR 包含 ISR 和 OSR。
五、Kafka 消息丢失情况及应对
- 生产者端消息丢失
如果 acks 设置不当很可能导致消息丢失,acks 有三种配置级别,最高级别是 -1 或者 all,在此级别下生产者会等待整个集群回应接收到消息才认为消息发送成功,安全性更高。不过,由于网络或服务状态问题也可能导致发送消息出现问题,解决此问题可能会涉及到事务。 - 消费者端消息丢失
这和偏移量有很大关系,不合理的偏移量提交一般会导致消息丢失。
六、保证 Kafka 可靠性的方法
- 生产者端
考虑将 acks 参数调为 -1 或者 all,设置调优重试机制,启动幂等性(保证同消息只持久化一次),使用开启事务来提交生产者消息并使用同步提交方式(send(record).get())。 - 消费者端
可以选择手动控制偏移量的提交,这样能避免依赖自动提交时因故障导致的错误偏移量。
七、Kafka 数据去重
Kafka 0.11 版本以后出现了幂等性和事务两个特性来保证数据去重。幂等性通过 PID、Partition、SeqNumber 判断消息是否重复,重复的数据 broker 只会持久化一条。通过事务提交,可以在事务完整提交前对消费者隐藏消息,只有全部事务完整完成消费者才会消费消息,类似于 Java、mysql 等的事务。
八、生产者提高吞吐量的方法
可以调大批次大小参数 batch.size、调整等待时间 linger.ms 参数、设置压缩格式 compression.type 参数压缩数据、调增缓冲区大小 RecordAccumulator。
九、Zookeeper 在 Kafka 集群中的作用
Zookeeper 相当于 Kafka 集群的一个代理,Kafka 的每个 broker 会在 Zookeeper 中进行注册,并保存一些元数据信息,比如主题创建的分区副本等信息。Zookeeper 还会对 Kafka 集群进行 leader 的选举,当某个 leader 出现故障,Zookeeper 会根据选举机制选举新的 leader,同时还能起到负载均衡的效果。总的来说,Zookeeper 协助 Kafka 实现高可用。
十、Kafka 集群中的 Leader 选举机制
当一个分区的 leader 出现故障时,集群会给分区选举新的 leader 以保证该分区的正常运行。选举会根据 Replicas 的顺序,并对照 Isr 来跳过实际不存活的节点。
十一、Kafka 处理数据乱序问题的方法
Kafka 消息传递过程中每个分区的消息是有序的,但存在多个分区时,由于每个分区传递数据的顺序不同会导致数据乱序问题。解决数据乱序问题需要只设置一个分区,并且开启幂等性,acks 设置为 all 或者 -1。
十二、Kafka 中节点的服役和退役
- 服役
首先准备一台配置好环境的服务器,然后写一个需要服役的主题的 json 文件并为之生成负载均衡计划,将计划储存在 json 文件中,使用 kafka - reassign - partitions.sh 命令执行计划,最后查看主题详情确认是否服役成功。 - 退役
和服役操作相仿,重新生成执行计划并执行即可。
十三、Kafka 中 Leader 和 Follower 故障重启后的数据同步
- Follower 挂了再启动
如果是 follower 挂了不影响其他的副本,当 follower 再次启动时,会根据它挂掉时的分区内最小的偏移量 offset 值的后一位从 leader 中同步。 - Leader 挂了
如果 leader 挂了,此时需要重新选举 leader,其他 follower 会从此时分区内偏移量最小的后一个位置重新从新的 leader 中同步数据。
十四、打破 Kafka 初始化时 Leader 选举规律的方法
这种情况一般很少出现,大概率是因为某个任务量巨大,而集群里服务器配置不同,有的服务器性能比较低。此时需要手动设置副本存储计划,指定 replicas 都在哪些节点里执行创建的计划。
相关文章:
kafka常见面试题总结
Kafka 核心知识解析 一、Kafka 消息发送流程 Kafka 发送消息涉及两个线程:main 线程和 sender 线程。在 main 线程中,会创建一个双端队列 RecordAccumulator,main 线程负责将消息发送给 RecordAccumulator,而 sender 线程则从 R…...
前端知识点---Javascript中检测数据类型函数总结
文章目录 01 typeof 运算符02 instanceof 运算符03 Array.isArray()04 Object.prototype.toString.call()05 constructor 属性06 isNaN() 和 Number.isNaN() (常用)07 isFinite() 和 Number.isFinite()08 typeof null 是 "object" 的问题 01 typeof 运算符 返回值是…...

aspose如何获取PPT放映页“切换”的“持续时间”值
aspose如何获取PPT放映页“切换”的“持续时间”值 项目场景问题描述问题1:从官方文档和资料查阅发现并没有对切换的持续时间进行处理的方法问题2:aspose的依赖包中,所有的关键对象都进行了混淆处理 解决方案1、找到ppt切换的持续时间对应的混…...
【MQTT】代理服务比较RabbitMQ、Mosquitto 和 EMQX
前言 目前要处理大量设备同时频繁发送数据的情况,MQTT协议确实是一个更优的选择,因为它特别适合需要低带宽和高效能的物联网应用,下面是对目前主流协议的对比 数据截止日期:2024年11月10日 基础设施 后端: springclo…...
【C#/C++】C++/CL中String^的含义和举例,C++层需要调用C#层对象时...
示例: String^ IDataServer::GetParam(String^ aParamName){ /// }在 C/CLI 中,String^ 和 IDataServer::GetParam(String^ aParamName) 这种写法是一种混合了 C 和 .NET 的语法,用于在 C 中操作 .NET 对象。C/CLI 是微软扩展的 C 语言&…...

Python学习从0到1 day26 第三阶段 Spark ② 数据计算Ⅰ
人总是会执着于失去的,而又不珍惜现在所拥有的 —— 24.11.9 一、map方法 PySpark的数据计算,都是基于RDD对象来进行的,采用依赖进行,RDD对象内置丰富的成员方法(算子) map算子 功能:map算子…...

【详细】如何优雅地删除 Docker 容器与镜像
内容预览 ≧∀≦ゞ 镜像与容器的区别删除容器和镜像的具体步骤1. 删除容器步骤 1:查看当前运行的容器步骤 2:停止容器步骤 3:删除容器 2. 删除镜像步骤 1:查看镜像列表步骤 2:删除镜像 3. 删除所有容器和镜像 使用 1Pa…...
Spring Spring Boot 常用注解总结
在 Java 开发中,Spring 和 Spring Boot 框架广泛应用于企业级应用开发。这两个框架提供了丰富的注解,使得开发更加高效和便捷。本文将对 Spring 和 Spring Boot 中常用的注解进行总结。 一、Spring 常用注解 1. Component 作用:用于将普通的…...
Flink独立集群+Flink整合yarn
Flink独立集群的搭建: 1、上传解压配置环境变量 # 1、解压 tar -xvf flink-1.15.4-bin-scala_2.12.tgz # 2、修改环境变量 export FLINK_HOME/usr/local/soft/flink-1.15.4 export PATH$PATH:$FLINK_HOME/bin 2、修改配置文件 cd /usr/local/soft/flink-1.15.4/…...
动态规划 之 简单多状态 dp 问题 算法专题
一. 按摩师 按摩师 状态表示 根据经验 题目要求 dp[i] 表示: 选择到i位置时, 此时的最长预约时长 但是根据题目又分成两种情况: f[i] : 选择到 i 位置的时候, nums[i] 必选, 此时的最长预约时长 g[i] : 选择到 i 位置的时候, nums[i] 不选, 此时的最长预约时长状态转移方程 …...

qt QPixmapCache详解
1、概述 QPixmapCache是Qt框架中提供的一个功能强大的图像缓存管理工具类。它允许开发者在全局范围内缓存QPixmap对象,从而有效减少图像的重复加载,提高图像加载和显示的效率。这对于需要频繁加载和显示图像的用户界面应用来说尤为重要,能够…...
Redis中的持久化
什么是 Redis 持久化? Redis 是一个内存数据库,也就是说它主要把数据存储在内存中,这样可以实现非常高的读写速度。通常,内存数据库是非常快速且高效的,但它也有一个很大的问题:数据丢失的风险。因为当 Red…...

Unity 如何优雅的限定文本长度, 包含对特殊字符,汉字,数字的处理。实际的案例包括 用户昵称
常规限定文本长度 ( 通过 UntiyEngine.UI.Inputfiled 附带的长度限定 ) 痛点1 无法对中文,数字,英文进行识别,同样数量的汉字和同样数量的英文像素长度是不一样的,当我们限定固定长度后,在界面上的排版不够美观 痛点2…...

SMO+PLL滑膜观测器、MARS模型参考自适应观测器simulink仿真
模型内容介绍: (1)SMOPLL滑膜观测器通过SMO估计电机的转速和位置信息,并利用PLL技术对这些信息进行跟踪和校正,以实现高精度的电机控制; (2)MARS是一种基于模型参考自适应控制理论…...
例题解析:利用异或运算(XOR)找出单独的数
异或运算(XOR) 异或运算是一种位运算,通常用符号 ^ 表示。它的运算规则如下: 如果两个二进制位相同,结果为 0。如果两个二进制位不同,结果为 1。 具体来说,对于两个二进制位 a 和 bÿ…...

如何处理微信小程序大量未捕获的异常
1)如何处理微信小程序大量未捕获的异常 2)如何关闭代码创建的纹理的读写,或者创建不带读写的图片 3)回收带有贴图和Collider的Mesh,如何正确用对象池维护 4)Cloth组件使用在一个篮筐上,运行后篮…...
C#-StringBuilder
string:特殊的引用 每次重新赋值或者拼接时会分配新的内存空间,如果一个字符串经常改变会非常浪费空间。 StringBuilder:C#提供的一个用于处理字符串的公共类 修改字符串而不创建新的对象,需要频繁修改和拼接的字符串可以使用它…...

SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based
关注这个靶场的其它相关笔记:SQLI LABS —— 靶场笔记合集-CSDN博客 0x01:过关流程 输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来): http://localhost/sqli-labs/Less-39/ 本关是堆…...

linux安装zookeeper和kafka集群
linux安装zookeeper和kafka集群 一、Zookeeper集群部署安装zookeeper1. 下载2. 上传, 解压3. 配置 Zookeeper 节点4. 创建 myid 文件5. 启动参数更改6. sh文件授权7. 启动集群8. 防火墙开启端口 验证集群 二、kafka集群安装安装Kafka1. 下载Kafka安装包2. 上传到服务器…...

洞悉 Linux 系统运行细节,使用 atop 监测和回看系统负载状态
Linux系统的资源使用情况,你可以通过使用命令如free、top和netstat来实时监控内存、CPU及端口的使用状态。对于需要追踪历史资源消耗动态的场景,atop命令则能有效帮助用户查看过去的系统负载情况。 本篇教程的灵感源自一位小伙伴的真实经历:…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...