【kafka机制】kafka常见题目

Kafka—ISR机制 ISR机制Kafka 中的 ISR(In-Sync Replicas)机制是一种用于确保数据可靠性和一致性的重要机制。ISR 是一组副本,它包括分区的领导者(Leader)和追随者(Follower)副本,这些副本与领导者保持数据同步。 阅读详情

一、kafka常见面试题

1、kafka定义/理解/优点

分布式的高性能,高吞吐的消息队列系统

如何保证高可用?
1、kafka基本架构由多个broker节点组成的;一个topic主题对应多个分区,而每一个分区存存在broker节点;
2、kafka的副本机制,副本存在其他分区,提高数据的容错性

如何保证高性能/高吞吐?
1、单个partition内的消息是顺序读写,先进先出,消息ID是自增长,按ID分段成不同所Segment文件存储,检索快速;
2、内存读写是零拷贝,使用了Linux的sendfile技术,减了用户态与内核态的内存拷贝移动次数;
3、mmap文件映射
在进程 的非堆内存开辟一块内存空间,和OS内核空间的一块内存进行映射,
kafka数据写入、是写入这块内存空间,但实际这块内存和OS内核内存有映射,也就是相当于写在内核内存空间了,且这块内核空间、内核直接能够访问到,直接落入磁盘。

用途:削峰、解藕、异步通信

缺点:
1、引入外部依赖,外部依赖越多,越容易挂掉
2、系统复杂度提高:使用 MQ 后可能需要保证消息没有被重复消费、处理消息丢失的情况、保证消息传递的顺序性等等问题;

引申:什么是零拷贝
背景:平时从服务器读取静态文件时,服务器先将文件从复制到内核空间,再复制到用户空间,最后再复制到内核空间并通过网卡发送出去,而零拷贝则是直接从内核到内核再到网卡,省去了用户空间的复制。

1、第一次:将磁盘文件,读取到操作系统内核缓冲区;
2、第二次:将内核缓冲区的数据,copy到application应用程序的buffer;
3、第三步:将application应用程序buffer中的数据,copy到socket网络发送缓冲区(属于操作系统内核的缓冲区);
4、第四次:将socket buffer的数据,copy到网卡,由网卡进行网络传输。

2、Kafka中的ISR、AR又代表什么?

ISR:In-Sync Replicas 副本同步队列
AR:Assigned Replicas 所有副本
ISR是由leader维护,follower从leader同步数据有一些延迟(包括延迟时间replica.lag.time.max.ms和延迟条数replica.lag.max.messages两个维度, 当前最新的版本0.10.x中只支持replica.lag.time.max.ms这个维度),任意一个超过阈值都会把follower剔除出ISR, 存入OSR(Outof-Sync Replicas)列表,新加入的follower也会先存放在OSR中。AR=ISR+OSR。

3、kafka producer 打数据,ack 为 0, 1, -1 的时候代表啥, 设置 -1 的时候,什么情况下,leader 会认为一条消息 commit了

1(默认) 数据发送到Kafka后,经过leader成功接收消息的的确认,就算是发送成功了。在这种情况下,如果leader宕机了,则会丢失数据。
0 生产者将数据发送出去就不管了,不去等待任何返回。这种情况下数据传输效率最高,但是数据可靠性确是最低的。
-1 producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成,可靠性最高。当ISR中所有Replica都向Leader发送ACK时,leader才commit,这时候producer才能认为一个请求中的消息都commit了

4、Kafka中的消息是否会丢失和重复消费?

要确定Kafka的消息是否丢失或重复,从两个方面分析入手:消息发送和消息消费。

1、消息发送

     Kafka消息发送有两种方式:同步(sync)和异步(async),默认是同步方式,可通过producer.type属性进行配置。Kafka通过配置request.required.acks属性来确认消息的生产:

0—表示不进行消息接收是否成功的确认;
1—表示当Leader接收成功时确认;
-1—表示Leader和Follower都接收成功时确认;
综上所述,有6种消息生产的情况,下面分情况来分析消息丢失的场景:

(1)acks=0,不和Kafka集群进行消息接收确认,则当网络异常、缓冲区满了等情况时,消息可能丢失;

(2)acks=1、同步模式下,只有Leader确认接收成功后但挂掉了,副本没有同步,数据可能丢失;

另外,还有设置重试次数

2、消息重复消费
根本原因 已经消费了数据,但是offset没有成功提交;或者生产者重复推送消息。

其中很大一部分原因在于发生了再均衡。
1)消费者宕机、重启等。导致消息已经消费但是没有提交offset。
2)消费者使用自动提交offset,但当还没有提交的时候,有新的消费者加入或者移除,发生了rebalance。再次消费的时候,消费者会根据提交的偏移量来,于是重复消费了数据。
3)消息处理耗时,或者消费者拉取的消息量太多,处理耗时,超过了max.poll.interval.ms的配置时间,导致认为当前消费者已经死掉,触发再均衡。

3、rebalance过程
第一阶段:选择组协调器
组协调器GroupCoordinator:每个consumer group都会选择一个broker作为自己的组协调器coordinator,负责监控这个消费组里的所有消费者的心跳,以及判断是否宕机,然后开启消费者rebalance。consumer group中的每个consumer启动时会向kafka集群中的某个节点发送FindCoordinatorRequest请求来查找对应的组协调器GroupCoordinator,并跟其建立网络连接。

组协调器选择方式:通过如下公式可以选出consumer消费的offset要提交到__consumer_offsets的哪个分区,这个分区leader对应的broker就是这个consumer group的coordinator

公式:hash(consumer group id) % __consumer_offsets主题的分区数

第二阶段:加入消费组
在成功找到消费组所对应的GroupCoordinator之后就进入加入消费组的阶段,在此阶段的消费者会向GroupCoordinator发送JoinGroupRequest请求,并处理响应。然后GroupCoordinator从一个consumer group中选择第一个加入group的consumer作为leader(消费组协调器),把consumer group情况发送给这个leader,接着这个leader会负责制定分区方案(由于rebalance等策略有客户端配置决定,因此分区方案需要consumer来制定,以消费组协调器的配置为准)。

第三阶段:SYNC GROUP
consumer leader通过给GroupCoordinator发送SyncGroupRequest,接着GroupCoordinator就把分区方案下发给各个consumer,他们会根据指定分区的leader broker进行网络连接以及消息消费。

5、Kafka中是怎么体现消息顺序性的?

分区之间无序,单个分区内有序;
比如说我们建了一个 topic,有三个 partition。生产者在写的时候,其实可以指定一个 key,比如说我们指定了某个订单 id 作为 key,那么这个订单相关的数据,一定会被分发到同一个 partition 中去,而且这个 partition 中的数据一定是有顺序的。

消费者分布式锁保证消费有序,防止线程并发;

6、kafka如何实现延迟队列?

基于时间轮自定义了一个用于实现延迟功能的定时器;时间轮插入和删除都是O(1),数据结构是:底层使用数组实现,数组中的每个元素可以存放一个TimerTaskList对象。TimerTaskList是一个环形双向链表,在其中的链表项TimerTaskEntry中封装了真正的定时任务TimerTask.
参考:https://blog.youkuaiyun.com/u013256816/article/details/80697456

7、几种消息队列对比?

1)kafaka支持多种客户端语言
2)rocketmq支持java语言

8、大量消息在 MQ 里长时间积压,该如何解决?
出现原因:
其一为消费的太慢或消费方出现异常,其二为生产方生产的太快,总的来说就是消息的速度赶不上生产的速度,生产和消费速度不匹配造成的。
消息堆积的解决方案
1) 消费端:增加消费者,多部署几台消费者机器(横向扩展),提升消费者的消费能力。
2)消费端:此种情况可以将这些消费不成功的消息转发到其它队列里去(类似死信队列),后面再慢慢分析死信队列里的消息处理问题。
3)消费端:mq 中的消息过期失效了。可以采取一个方案,就是批量重导,这个我们之前线上也有类似的场景干过。就是大量积压的时候,我们当时就直接丢弃数据了,然后等过了高峰期以后,将丢失的那批数据,写个临时程序,一点一点的查出来,然后重新灌入 mq 里面去,把白天丢的数据给他补回来。
4)生产端:流量激增的话,我们需要评估是否需要增加资源还是通过限流的方式解决

https://www.jianshu.com/p/5f4b3a520719

9、消息中间件面试题:如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时呢?
https://www.jianshu.com/p/5f4b3a520719

10、消息中间件面试题:消息队列的优缺点,区别
参考:https://www.jianshu.com/p/eaafb1581e55

11、kafka如何保障消息发送顺序性?
1)kafka可以通过partitionKey,将某类消息写入同一个partition,一个partition只能对应一个消费线程,以保证数据有序。

引申:producer发消息到队列时,通过加锁保证有序。先后两条消息发送时,前一条消息发送失败,后一条消息发送成功,然后失败的消息重试后发送成功,造成乱序?

为了解决重试机制引起的消息乱序为实现Producer的幂等性,Kafka引入了Producer ID(即PID)和Sequence Number。

对于接收的每条消息,如果其序号比Broker维护的序号大一,则Broker会接受它,否则将其丢弃

如果消息序号比Broker维护的序号差值比一大,说明中间有数据尚未写入,即乱序,此时Broker拒绝该消息

如果消息序号小于等于Broker维护的序号,说明该消息已被保存,即为重复消息,Broker直接丢弃该消息

引申:消费端只用单线程消费效率低?
解决方案
消费者端创建多个内存队列,具有相同 key 的数据都路由到同一个内存 队列;然后每个线程分别消费一个内存队列即可,这样就能保证顺序性。

Kafka副本机制详解 在讨论具体的副本机制之前,我们先花一点时间明确一下副本的含义。我们之前谈到过,Kafka 是有主题概念的,而每个主题又进一步划分成若干个分区。副本的概念实际上是在分区层级下定义的,每个分区配置有若干个副本。 阅读详情

相关推荐

Kafka常见23道面试题以答案.docx

异步处理、日常系统解耦、削峰、提速、广播 具体一点例如:消息,网站活动追踪,监测指标,日志聚合,流处理,事件采集,提交日志等

kafka命令行操作练习

1)查看当前服务器中的所有topic [root@hadoop101 kafka]# bin/kafka-topics.sh --zookeeper hadoop101:2181 --list first liang 2)创建topic [root@hadoop101 kafka]# bin/kafka-topics.sh --zookeeper hadoop101:2181 --create --replication-factor 3 --partitions 1 --topic test Creat

m0_48830183的博客 301

HarmonyOS开发第一步:Dev Eco Studio4.0保姆级安装配置指南(含Node.js环境)

本文提供HarmonyOS开发环境搭建的保姆级教程,重点详解Dev Eco Studio 4.0的安装与配置,并攻克Node.js环境与Ohpm包管理器的关键设置难点。通过清晰的步骤指引,帮助开发者从零开始,高效完成开发环境部署,顺利迈出鸿蒙应用开发的第一步。

lake5的博客 569

Kafka解析之失效副本

https://blog.youkuaiyun.com/u013256816/article/details/78851989 简介 Kafka从0.8.x版本开始引入副本机制,这样可以极大的提高集群的可靠性和稳定性。不过这也使得Kafka变得更加复杂起来,失效副本就是所要面临的一个难题。 通常情况下,Kafka中的每个分区(partition)都会分配多个副本(replica),具体的副本数量由Broker级别参数default.replication.factor(默认大小为1)指定,也可以在创建topic的时候通

大叶子不小的博客 639

Claude Code vs Codex

Claude Code 提供了一个生产就绪(production-ready)的实现,包含良好的错误处理、优雅的关闭逻辑、详细注释和文档,以及内置测试。Claude Code 输出了一个可运行的 Next.js + TypeScript 前端,但错过了一些设计里的黄色主题元素;Codex 则生成自己的版本,没有导出设计中的图片,也没严格遵照设计主题。Codex 完成同样功能,但更简洁直接,文档和注释少一些但功能达标。任务都用同样的提示,使用 TypeScript 实现,并在一天内完成。

weixin_49869937的博客 2385

SAP开发顾问简历模板范文(精选篇)

SAP开发顾问简历该怎么写呢?

Huanzhucv的博客 1568

kafka基础选择题

kafka基础选择题

weixin_38861839的博客 6537

避开这5个坑!STC8H DMA串口通信的实战避坑指南(115200波特率实测)

本文深入解析了STC8H单片机利用DMA实现稳定全双工串口通信的实战要点。针对115200高波特率场景,详细拆解了DMA-UART架构、关键寄存器配置、时钟精度计算、缓冲区管理及中断协同等核心环节,并提供了具体的避坑指南和调试方法,帮助开发者构建高效可靠的通信链路。

melon的博客 675

Kafka 练习题

一、选择题 Kafka服务器默认能接收的最大消息是多大? (单选) A     A:1M     B:10M     C:100M     D:没有大小限制,因为支持大数据   2.Kafka的特性(多选) ABCD     A:高吞吐量、低延迟     B:可扩展性、持久性、可靠性     C:容错性     D:高并发   3.kaf...

DH15145070414的博客 7847

利用Android系统漏洞实现后台弹窗(外弹)

关键:从 Android 8.0(API 26)开始,禁止使用 context.sendBroadcast() 发送隐式广播(即没有指定 setPackage() 或明确组件的广播)。demo核心代码展示利用Android显示系统和广播系统的漏洞实现在后台弹窗的功能,支持最新Android15,16版本。核心功能都是在so层去做,大量使用了jni反调, 如果要上架到应用市场,需要对代码做进一步混淆,加固以应对市场安全扫描。3,开启虚拟显示窗口,这是个透明像素窗口。5,可开启一个线程,调用这个外弹窗口。

2018,再出发~ 1316

使用Prophet进行时间序列预测

Prophet是Facebook开发的开源时间序列预测工具,用于处理时间序列数据的建模和预测。它建立在统计模型之上,适用于多种时间序列预测问题,具有易用性和灵活性。能够处理缺失值和异常值支持对节假日和季节性的建模可以灵活地添加自定义的季节性成分自动检测变化点提供了直观的可视化工具这个简短的教程为您提供了使用Prophet进行时间序列预测的基本步骤和一些重要的概念。您可以通过阅读Prophet官方文档和其他在线资源来进一步深入学习和了解更多细节。

Mrrunsen的博客 480

kafka假死 & Direct buffer memory

发生java.lang.OutOfMemoryError: Direct buffer memory

happy19870612's blog 7441

【DRAM存储器四十六】LPDDR5介绍--基本操作之行操作、读、写

简述LPDDR5的行操作和读写时序

highman110的博客 760

2021年Java常见面试题目,涨姿势了!

前言 如果你不能拼爹,或者不想拼爹,最好的方法是拼实力。 合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。 所以,你必须要从基层做起。当然,所谓的基层,并不是端茶倒水,但多一些体验,总是无害的。 前两年的时间,应当主要打好基础的累积,认清职业现状和社会经济发展趋势,适应工作后的生活,对心灵浮躁的洗涤。 这一阶段最大的敌人是自身的态度,切忌不可眼高手低,牢记一句话——“心比天高,命比纸薄。”脚踏实地,一步一个脚印,为未来做好铺垫。 kafka面试基础[17] 1.Kafka的用途有哪些?使用场

101

Isaac Lab 强化学习全身控制策略 Sim2Real 宇树人形机器人训练部署 HOVER

《IsaacLab策略训练与部署指南》提供了在仿真和真实机器人上实现HOVER全身控制策略的完整流程。主要内容包括:1) Linux环境下的IsaacLab安装与HOVER资源库配置;2) 使用1024个并行环境训练教师/学生策略的详细步骤;3) 策略测试与评估方法;4) Sim2Sim仿真验证和Sim2Real真实机器人部署方案。本教程特别针对Unitree H1仿人机器人,包含运动数据准备、策略训练、性能评估到硬件部署的全链条实现方案,为机器人控制策略开发提供标准化参考框架。

机器人控制与仿真应用 3069

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Kafka 物理存储机制

一个商业化消息队列的性能好坏,其文件存储机制设计是衡量一个消息队列服务技术水平和最关键指标之一。下面将从Kafka文件存储机制和物理结构角度,分析Kafka是如何实现高效文件存储,及实际应用效果。Kafka的基本存储单位是分区。在配置Kafka的时候,管理员指定了一个用于存储分区的目录清单log.dirs参数的值。

程序猿进阶 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【Kafka】机制总结-一文搞懂Kafka常见机制

开发者可以实现Serializer和接口,以支持特定的数据格式。实现接口@Override// 示例:将对象转为字符串字节实现接口@Override// 示例:通过 JSON 解析为对象使用自定义序列化器在生产者和消费者的配置中指定自定义类:每条消息在发送到 Kafka 主题时,生产者需要确定将消息发送到哪个分区(Partition)。指定分区:生产者直接指定消息的目标分区。根据 Key 计算分区:如果消息设置了 Key,则通过 Key 的哈希值确定分区。随机分区。

xiaoxualg的博客 1416

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

关于 Kafka 的一些面试题目

上周客串了一下面试官,在这里就简单记录一下期间我问到的一些关于 Kafka 的面试题目,这些都是我平时在学习 Kafka 的一些总结要点。 谈谈你对 kafka 的整体认识? 问这个问题主要是想知道面试者对 Kafka 的整体认识如何,能够大致了解清楚面试者对 Kafka 的相关概念的熟悉程度,比如消息、topic、partition、replica、offset、重平衡、lead...

后端进阶 5648

【Kafka】常见集群机制-领导者选举

Leader 选举机制保证了我们集群中的Partition每时每刻只有一个Leader,保证了我们服务的高可用,但是,并不是这样就能保证我们服务的稳定,通常Leader是业务繁忙的一个机器,如果在所有partition中,1在拥有大部分partiton的备份,如果在选举过程中导致1变成大部分Partition的Leader,那么就会导致1机器的压力,没有分配好集群中机器的资源。ISR 表示所有在AR中存活的副本,存活的机器,需要与Leader定时发送消息,如果超时,会被提出ISR集合,超时时间由。

xiaoxualg的博客 1279

Kafka - 分区机制及副本机制

自定义策略主要是依据业务属性和特点来实现的,以下是几种比较常见的自定义策略。按消息键保存策略,键可以依据业务属性进行划分,这样就可以保障同样的业务被分配到相同的分区,由于Kafka支持单分区消息有序,因此这种策略对于同一业务可以很好地实现消息的有序性需求。按区域分区策略。

小工匠 3540

KafKa存储机制

Kafka 是为了解决大数据的实时日志流而生的, 每天要处理的日志量级在千亿规模。1. 数据实时产生2. 海量数据存储与处理所以它必然要面临分布式系统遇到的高并发、高可用、高性能等三高问题。对于 Kafka 的存储需要保证以下几点:1. 存储的主要是消息流(可以是简单的文本格式也可以是其他格式,对于 Broker 存储来说,它并不关心数据本身)2. 要支持海量数据的高效存储、高持久化(保证重启后数据不丢失)3. 要支持海量数据的高效检索(消费的时候可以通过offset或者时间戳高效查询并处理)

jianfeng123123的博客 4521

kafka容灾机制

Kafka的消息安全性与容灾机制主要是通过副本replication的设置和leader/follower的的机制实现的。 Replication机制broker 容灾机制 Leader Election机制 controller failover Replication机制 Kafka从0.8开始提供partition级别的r

北方的雪之博客专栏 1万+

KafKa原理机制_kafka机制

十年生死两茫茫,千行代码,Bug何处藏。纵使产品经理祭苍天,又怎样?朝令改,夕断肠。相顾无言,惟有泪千行。每晚灯火阑珊处,夜难寐,加班狂学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。

2401_85111824的博客 1187

关于kafka的isr机制

1. 问题 Data Replication Kafka 的 Data Replication 需要解决如下问题: 怎样 Propagate 消息 在向 Producer 发送 ACK 前需要保证有多少个 Replica 已经收到该消息 怎样处理某个 Replica 不工作的情况 怎样处理 Failed Replica 恢复回来的情况 2. Propagate 消息 通过zookeeper先知...

流的博客 9845

2025面试真实总结 Kafka 的一些高频面试题目

更新集群元数据信息、创建主题、删除主题、分区重分配、preferred leader 副本选举、主题分区扩展、broker 加入集群、broker 崩溃、受控关闭、controller leader 选举。更新集群元数据信息、创建主题、删除主题、分区重分配、preferred leader 副本选举、主题分区扩展、broker 加入集群、broker 崩溃、受控关闭、controller leader 选举。生产端调整 batch.size、linger.ms 参数,以及主题分区数合理分配等。

mxt51220的博客 1370
上一篇: 【JAVA虚拟机】java虚拟机
下一篇: 【微服务】微服务相关知识
StrongHelper
博客等级 码龄8年 54粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值