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

news2024/9/20 10:40:01

怎么保证顺序消费?

同一个生产者发送到同一分区的消息,先发送的比后发送的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.coloradmin.cn/o/2102345.html

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

相关文章

python常用的列表,元组,字符串,集合,字典的应用方法

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6049c6f7ca2d4a0ca4911562dea7a8cd.png 素材内容来自——黑马程序员

【Altium Designer程序开发】生成XML多级数据库文件 V2.0

此工具用于生成多级多节点的XML数据库文件,主要功能用于测试XML文件的生成速度的,运行环境在Altium Designer中,可用于Altium Designer全系列的版本中。 程序界面如下图所示,每一级节点表示每个父Node的子Node的数量,节…

FRP内网穿透与神卓互联,优势对比

本文介绍分析了当前市面上两款常用的内网穿透工具 frp内网穿透介绍 一、概述 frp(Fast Reverse Proxy)是一款高性能的反向代理应用,主要用于实现内网穿透功能。通过frp,用户可以将内网中的服务器或服务暴露到公网上,…

跨境电商运营解决方案:反向代购系统物流集运一体化

跨境电商两种模式,一种是国外商品卖到国内,海淘代购。另一种是国内商品卖到国外,也叫反向代购。 什么是反向代购 反向代购是近年兴起的一种购物模式,是帮国外客户购买中国商品。主要是通过外贸代购系统,把淘宝、天猫…

AEC-Q100车规芯片验证

AEC-Q100是汽车电子协会(Automotive Electronics Council,简称AEC)制定的车规级芯片验证标准,它主要针对车载应用的集成电路产品所设计的一套应力测试标准,旨在通过严格的测试流程,确保芯片在复杂多变的汽车环境下具备高可靠性、高安全性和高稳定性。 验证流程 定义规格:…

哪款清理猫咪浮毛效果好?希喂、霍尼韦尔、美的宠物空气净化器PK

最近在宠物领域,宠物空气净化器的讨论热度很高,不少铲屎官们都有购买的意向。身为三猫孩子的家长,养宠以来市面上所有的猫毛清理工具我都用过,这种新兴产品肯定也不会错过。我结合自身情况和预算,对市面上的品牌进行筛…

UI自动化-元素动作WebElement源码类

UI自动化设计元素动作所用到的源码是WebElement源码类 其中用的最多的为前9个,后续是前端开发时常用 webelement源码类 元素动作都是webelement源码类中 1、往输入框里输入内容,元素单击后输入内容:key的值是要查找的值 获取标签的名称 tagn…

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

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

华为云征文|Flexus云服务X实例使用,宝塔的安装,利用宝塔安装Java、NGINX,Redis,Python,快速搭建开发环境

引出 4核12G-100G-3M规格的Flexus X实例使用测评第4弹:Flexus云服务X实例使用,宝塔的安装,利用宝塔安装Java、NGINX,redis,Python,快速搭建开发环境 什么是Flexus云服务器X实例 官方解释: Fl…

openharmony历程一:安装ubuntu20.04

1.下载ubuntu20.04 官网下载 下拉选择 可使用镜像: 镜像 2.安装 本人使用vmware,其他的如virtualbox也差不多 选择自定义和下一步 我使用的是r5 5600H,只有12核。 由于后面用于鸿蒙安装,推荐内存16GB及以上,硬盘100GB及…

L1-100 四项全能

作者 陈越 单位 浙江大学 新浪微博上有一个帖子给出了一道题:全班有 50 人,有 30 人会游泳,有 35 人会篮球,有 42 人会唱歌,有 46 人会骑车,至少有( )人四项都会。 发帖人不会做这道…

【原创教程】电气电工15:线槽导轨

电气电工这些知识点,我们描述的比较细,虽然看起来比较简单,但是它是后面我们技能提升的基础,如果我们后面学电气工程师相关知识,这些都属于基本功。 接着我们来看一下线槽导轨。 线槽又名走线槽、配线槽、行线槽(因地方而异),是用来将电源线、数据线等线材规范的整理…

【深入了解Java常用类】

前言:Java中的常用类主要提供了广泛的工具和功能,用于简化开发任务,处理常见的编程需求。前面我们已经介绍过String类的一些基本使用方法,接下来我们再介绍一些其它常用类的使用,本文主要介绍以包装类Integer为例、Mat…

SQL语句--DML

DML:Data Manipulation Language(数据操作语言),对表的数据记录增删改查 添加数据 INSERT修改数据UPDATA删除数据 DELETE 给指定字段添加数据: INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1&#xf…

设计模式-原型适配器桥接外观

3.3原型模式(代码见vs) 原型模式就是自我复制。原型模式的核心是一个clone()方法, 对于C来说,其实就是拷贝构造函数,需要实现深拷贝。拷贝构造函数根据谁来拷贝才能实现自我复制呢?答案就是根据自己复制自己…

语言质量评估对欧洲游戏推广的重要性

语言质量评估在欧洲推广游戏中的重要性怎么强调都不为过。欧洲是一个文化和语言多样化的市场,整个大陆有200多种语言。因此,要提供一款与不同地区玩家产生共鸣的本地化游戏,不仅需要准确的翻译,还需要细致的语言质量评估。这一过程…

mysql高级sql

一,查询 1.按关键字排序 1.1用 **ORDER BY** 语句来实现排序: - ORDER BY 语句用于对查询结果进行排序。可以根据一个或多个字段的值进行升序(ASC)或降序(DESC)排序。1.2排序可针对一个或多个字段&#…

【运维监控】prometheus+node exporter+grafana 监控linux机器运行情况(2)

本示例是通过prometheus的node exporter收集主机的信息,然后在grafana的dashborad进行展示。本示例使用到的组件均是最新的,下文中会有具体版本说明,linux环境是centos。本示例分为四个部分,即prometheus、grafana、node exporter…

W25Q32驱动 基于HAL库的SPI

环境 芯片:STM32F103ZET6 库:来自HAL的STM32F1XX.H 原理图 cubeMX配置 W25Q32.h // // Created by seven on 2024/9/2. //#ifndef SPI_W25Q32_H #define SPI_W25Q32_H #include "spi.h"/*** 初始化W25Q32闪存芯片*/ void W25Q32_Init(void);/*** 停止…

P7492 [传智杯 #3 决赛] 序列

*原题链接* 一道类似势能线段树的题,区间按位或上k,不满足区间可合并的性质,只能暴力的单点修改。 但是考虑按位或的性质,一个数或上另一个数,只会变大或不变,如果我们能找到一个方法,能够判定…