Kafka大厂面试14问(附答案)

怎么保证顺序消费?

同一个生产者发送到同一分区的消息,先发送的比后发送的offset要小。同一生产者发送到不同分区的消息,消息顺序无法保证。

怎么解决这个问题?

给一个topic只设置一个分区

相同key会发给一个分区

怎么保证幂等性?

生产者:如果发生网络抖动等导致ack返回超时,可以通过producer Id + sequence Number,每个producer在初始化时都会有唯一的pid,对每个生产者发送到分区中的消息都会对应一个从0递增的sequence Number,这样分区接收到消息的时候就能判断sequenceNumber是否重复

消费者:比如设置了手动提交offset,消息已经拉取消费了但是还没提交就挂了,可能会导致重复拉取同一段消息。用redis分布式锁或者根据业务判断该消息是否被消费过

kafka消息丢失?

生产者:

Ack = 0,表示不需要等待任何broker回复,可能会在发送到broker或者fl同步的时候丢消息

Ack = 1,表示等待master回复,可能发送到ld还没来得及同步到follwer,master就挂了,导致消息丢失

Ack = -1,等ld和isr中的fl都收到消息,才发送ack

消费者:

设置的自动提交offset,消息拉取了,但是没消费完,就提交了offset,但是消费者宕机了;

另外在ld选举的时候,zk中会维护isr(已同步ld数据)和osr(未同步ld数据)中选举,配置设置为true的时候,如果isr没有数据就会从osr选举

解决:

  • 配置ack为-1或者all

  • 不允许选举isr以外的副本作为ld

  • 可以设置最小同步数量>1,如果不满足则生产者端会抛异常

  • 减少broker的刷盘间隔

线上消息积压怎么解决?

  1. 生产者发送消息过快,消费者消费慢 -> 如果需要紧急处理,可以把修改消费端程序,让它将收到的消息快速转发到其他topic,然后启动多个消费者同时消费新主题的不同分区

  2. 消息数据格式变动,导致一直消费不成功,也可能导致消息积压,可以转发到死信队列

不同消息队列的优缺点?

rabbitmq:erlang语言,性能好,支持高并发,不利于二次开发

kafka:java实现,高性能高可用,适用于大数据量场景,单机吞吐量百万,缺点单机容量有限

rocketmq:java实现,方便二次开发,高可用高可靠,单机吞吐量十万

kafka高性能高吞吐的原因?

  1. 磁盘的顺序读写(随机读写的话会多次寻址和旋转),而且会预读一些放在内存中

  2. 零拷贝:传统是先读取磁盘空间到内核缓冲区,然后到用户缓冲区,再到socket发送缓冲区;零拷贝是直接从内核缓冲区到socket发送缓冲区,避免了内核态和用户态的切换

  3. 分区分段:每一个分区都是很多个segment文件,针对这些文件有索引,可以快速查找

  4. 批量压缩,批量读写:比如发送消息的时候是异步发送,当发送一条消息时不会直接发送给broker,而是会先缓存起来,然后批量发送,减少io

  5. 页缓存:在缓存中操作数据,比在磁盘操作更快

zk的作用?

老版本中,broker会在zookeeper上注册,创建唯一临时节点,并定时发送心跳到zk,如果心跳断开则剔除。接待拿下存储了topic和分区相关信息,维护了消费者组和分区的注册关系以及offset

新版本中可以不使用zookeeper,使用kraft组件,offset由消费者自己维护

kafka副本数据一致性?

hw:分区的ld和fl共同持有的消息,消费者只能消费hw之前的值

leo:每个分区节点已经存在的消息数

从节点出现故障时,把故障节点剔除isr,如果故障恢复了,会将hw之后的消息删除,然后重新从主节点中同步现在的数据

主节点出现故障:选取出来主节点之后,其他从节点会把大于hw值的消息丢掉,然后重新从主节点同步数据

Kafka的rebalance机制?

比如你要向消费者组中新增一个消费者,需要把消费者和对应的topic分区进行匹配,就会产生rebalance,场景主要有:

  • 消费者组的成员个数发生变化

  • group订阅的topic个数发生变化

  • group订阅的topic分区数发生变化

ld所在的broker就是一个协调者,通过心跳机制监控消费者组中consumer的存活,返回通知消费者进行balance,选举出新的ld consumer ,ldconsumer从协调者获取所有的consumer,将分配信息发给协调者,协调者再通过心跳机制下发给consumer

读写会进行阻塞,所以要尽量避免rebalance

消费者分区分配策略?

Range 范围分区(默认):比如一人领走几个

轮询:给你一个给你一个再转一圈

sticky:粘性

使用这个消费者组中使用最多的分配策略

分区和消费者组的对应关系?

一个消费者组相当于是一个订阅者,可以订阅主题,然后这些消费者共同消费主题下的分区。当消费者小于分区数时,一个消费者可以消费多个分区;当消费者大于分区数时,可能有消费者空闲(一个分区只能被同一消费者组里的一个消费者消费)

kafka的高可用机制?

集群机制:一个kafka集群由多个broker组成,即使某一个broker宕机也不会影响其他的broker

分区备份机制:一个分区可能会存在多个副本,这些副本存储在不同的broker上。如果ld的副本宕机,就会从isr中的follower中选举出一个新的ld,因为isr是同步复制数据,准确性较高;如果没有可用的isr,就会从osr中选举

kafka的数据清理机制?

kafka的topic数据存储在分区上,分区如果文件过大会分段存储,并且有对应的索引文件和日志文件,这样做能减少单个文件的大小,方便查找数据和日志清理

kafka清理数据有两种策略:第一是根据消息的保留时间,默认超过7天清理;第二是根据存储数据的大小,超过一定阈值就会删除最久的消息(默认关闭)。

如有问题,欢迎指正!

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

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

相关文章

[有彩蛋]大模型独角兽阶跃星辰文生图模型Step-1X上线,效果具说很炸裂?快来看一手实测!

先简单介绍一下阶跃星辰吧 公司的创始人兼CEO是姜大昕博士,他在微软担任过全球副总裁,同时也是微软亚洲互联网工程研究院的副院长和首席科学家。 2024年3月,阶跃星辰发布了Step-2万亿参数MoE语言大模型预览版,这是国内初创公司首…

Centos7通过reposync搭建本地Yum源

目录 1. 服务端搭建 1.1. 安装相关软件包 1.2. 加载几个常用的yum源 1.3. 创建文件保存目录 1.4. 把各仓库同步到本地 1.5. 生成仓库信息 1.6. 定时任务更新仓库 1.7. nginx配置下载服务 1.8. 内网测试nginx服务配置是否正确 2. 客户端配置 前言:之前使用…

Nginx负载均衡数据流分析

1、各机器ip信息 客户端IP:192.168.3.239 Nginx代理服务器IP:192.168.3.241 服务端IP:192.168.3.238 2、架构图(略) 3、 下图是在服务端上面的抓包分析。 下图是在客户端上面的抓包分析: 下图是在代理服务…

动态路由和路由导航守卫及其案例分析

为什么需要动态路由? 动态路由其实用的不多,在实际开发中,如果遇到权限分配问题,比如对于一个公司人员的后台管理系统,那对不同成员的权限肯定不同,对于人事部,他们有权限进入成员表对人员的流…

PHP8、ThinkPHP8框架中间的应用教程详解

前言 虽然PHP的落幕的话题一直不绝,但是实际在WEB端项目中PHP占有率达到了70%以上,一直在WEB一枝独秀,它以快速、高效的开发闻名,出圈了几十年,等待只是下一次的涅槃。而经过PHP8、PHP9的演变发展,PHP逐渐…

【Linux网络编程】协议|OSI模型|TCP/IP模型|局域网通信|跨网络通信|地址管理|流程图

目录 ​编辑 一,协议 协议分层 二,OSI七层模型 三,TCP/IP五层(或四层)模型 TCP/IP各个层次一些名词解释 为什么要有TCP/IP协议 TCP/IP协议栈与操作系统的宏观关系示意图 四,网络传输基本流程 局…

【书生大模型实战营】MindSearch CPU-only 版部署

MindSearch CPU-only 版部署 MindSearch CPU-only 版部署任务步骤 MindSearch CPU-only 版部署 任务 将 MindSearch 部署到 HuggingFace 并美化 Gradio 的界面,并提供截图和 Hugging Face 的Space的链接。 步骤 按照官方教程,实现在网页上打开MindSe…

llama_factory Qlora微调异常 No package metadata was found for The ‘autoawq‘

importlib.metadata.PackageNotFoundError: No package metadata was found for The ‘autoawq’ distribution was not found and is required by this application. To fix: pip install autoawq 其实问题比较简单 直接安装autoawq 即可 但是对应会有版本问题: 查…

Python自适应光学模态星形小波分析和像差算法

🎯要点 🎯星形小波分析像差测量 | 🎯对比傅里叶和小波分析 | 🎯定义多尺度图像质量度量,矩阵数据 | 🎯像差校正算法 | 🎯受激发射损耗显微镜布局 | 🎯干涉仪分支校准,求…

【unity实战】使用新版输入系统Input System+Rigidbody实现第三人称人物控制器(附项目源码)

最终效果 前言 使用CharacterController实现3d角色控制器,之前已经做过很多了: 【unity小技巧】unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果,复制粘贴即用 【unity实战】C…

快速入门Go:Go + gin + MongoDB

Go 进阶:Go + gin + MongDB 极速搭建EcommerceSys电商系统 前言 本章节适合有一定基础的 Golang 初学者,通过简单的项目实践来加深对 Golang 的基本语法和 Web 开发的理解。 本文章持续更新中,请关注… 项目结构 项目流程图 技术栈(待补充)项目结构项目路由 (待补充) …

DataWhale AI夏令营-《李宏毅深度学习教程》笔记-task3

DataWhale AI夏令营-《李宏毅深度学习教程》笔记-task2 第五章 循环神经网络5.1 独热编码5.2 RNN架构5.3 其他RNN5.3.1 Elman 网络 &Jordan 网络5.3.2 双向循环神经网络 第五章 循环神经网络 循环神经网络RNN,RNN在处理序列数据和时间依赖性强的问题上具有独特…

51单片机——实时时钟

1、DS1302介绍 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能 RTC(Real Time Clock):实时时钟,是一种集成电路,通常称为时钟…

机器学习项目——基于机器学习(RNN LSTM 高斯拟合 MLP)的锂离子电池剩余寿命预测方法研究(代码/论文)

完整的论文代码见文章末尾 以下为核心内容和部分结果 摘要 机器学习方法在电池寿命预测中的应用主要包括监督学习、无监督学习和强化学习等。监督学习方法通过构建回归模型或分类模型,直接预测电池的剩余寿命或健康状态。无监督学习方法则通过聚类分析和降维技术&…

VS-E5PH3006L-N3 600V 30A 高效低损耗整流器 二极管 电动 / 混动汽车电池充电的可靠之选

VS-E5PH3006L-N3参数特性: 反向电压(VR):600V,这表示该整流器在电路中能承受的最大反向电压为 600 伏特,超过此电压可能会导致器件损坏。平均整流电流(IF (AV)):30A&…

【系统架构设计】嵌入式系统设计(2)

【系统架构设计】嵌入式系统设计(2) 嵌入式网络系统嵌入式 Internet 的接入方式嵌入式 TCP/IP 协议栈 嵌入式数据库管理系统数据的一致性高效的事务处理数据的安全性 实时系统与嵌入式操作系统对实时系统划分根据实时性的强弱根据对错失时限的容忍程度或…

Linux学习-虚拟化平台安装和使用

注:系统使用Rock8.6 下载链接 通过百度网盘分享的文件:cirros.qcow2,node_base.xml等2个文件 链接:https://pan.baidu.com/s/1hupGQsMjrXMgngCy3lQLhw?pwdhlr6 提取码:hlr6[rootharbor ~]# cat /etc/redhat-releas…

《Class-Agnostic Counting》CVPR2018

概述 摘要:这篇论文提出了一种用于对象计数的模型,该模型能够计算任何类别的对象,而不需要针对特定对象类别进行设计。作者将计数问题表述为一个匹配问题,利用图像中自然存在的自相似性属性。论文的贡献包括:提出了一…

软件工程知识点总结(1):软件工程概述

1 什么是软件? 定义:计算机系统中的程序及其文档。 ——程序是计算机任务的处理对象和处理规模的描述; ——文档是为了便于了解程序所需要的阐明性资料。 2 软件的特点? 软件是无形的,不可见的逻辑实体 ——它的正确与…

人到中年,越发明白,随缘是成年人之间最好的社交状态

​时光荏苒,转眼间,我们已从青涩少年步入沉稳中年。 在这个阶段,我们经历了职场的起起落落,家庭的悲欢离合,也见证了身边人的种种变化。 正如屠格涅夫所言:“凡事只要看得淡些,就没有什么可忧…