kafka面试夺命30问

目录

1、kafka消息发送的流程?

[2、Kafka 的设计架构你知道吗?](#2、Kafka 的设计架构你知道吗?)

[3、Kafka 分区的目的?](#3、Kafka 分区的目的?)

[4、你知道 Kafka 是如何做到消息的有序性?](#4、你知道 Kafka 是如何做到消息的有序性?)

[5、ISR、OSR、AR 是什么?](#5、ISR、OSR、AR 是什么?)

[6、Kafka 在什么情况下会出现消息丢失](#6、Kafka 在什么情况下会出现消息丢失)

[7、怎么尽可能保证 Kafka 的可靠性](#7、怎么尽可能保证 Kafka 的可靠性)

8、Kafka中如何做到数据唯一,即数据去重?

9、生产者如何提高吞吐量?

10、zk在kafka集群中有何作用

11、简述kafka集群中的Leader选举机制

12、kafka是如何处理数据乱序问题的。

13、kafka中节点如何服役和退役

14、Kafka中Leader挂了,Follower挂了,然后再启动,数据如何同步?

15、kafka中初始化的时候Leader选举有一定的规律,如何打破这个规律呢?


1、kafka消息发送的流程?

在消息发送的过程中,涉及到了两个线程------main 线程和 Sender 线程。

1、在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给RecordAccumulator,

2、Sender 线程不断从 RecordAccumulator 中拉取消息发送到 Kafka Broker。

2、Kafka 的设计架构你知道吗?

kafka的基础框架:

1)Producer:消息生产者,就是向 Kafka broker 发消息的客户端。

2)Consumer:消息消费者,向 Kafka broker 取消息的客户端。

3)Consumer Group(CG):消费者组,由多个 consumer 组成。

4)Broker:一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。

5)Topic:一个队列、主题。

6)Partition:一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。

7)Replica:副本。一个 topic 的每个分区都有若干个副本,一个 Leader 和若干个 Follower。

8)Leader:每个分区多个副本的"主",生产者发送数据的对象,以及消费者消费数据的对象都是 Leader。

9)Follower:每个分区多个副本中的"从"

3、Kafka 分区的目的?

1、便于合理使用存储资源,合理控制分区的任务时,还可以达到负载均衡效果

2、提高并行度

4、你知道 Kafka 是如何做到消息的有序性?

可以保证数据单分区内有序、多分区无法保证:

开启幂等性、可以保证数据在单分区内自动排序

5、ISR、OSR、AR 是什么?

AR是Kafka 分区中的所有副本

ISR是和 Leader 保持同步的副本

OSR是和Leader 不同步的副本,也就是挂掉的副本

AR = ISR + OSR

6、Kafka 在什么情况下会出现消息丢失

1、如果ack的值设置为0时,生产者发送完数据,leader直接挂了,数据就会丢失。

2、如果ack的值设置为1时,生产者发送完数据,leader应答后还没同步数据给follow就挂掉了,也会导致数据丢失。

3、如果ack的值设置为-1时,且ISK里应答的副本数只有一个,那么当leader挂掉的时候数据也会丢失。

7、怎么尽可能保证 Kafka 的可靠性

ACK级别设置为-1 + 分区副本大于等于2 + ISR里应答的最小副本数量大于等于2

首先将ACK的级别设置为-1

其次分区副本数要大于等于2

最后也要保证ISR里应答的最小副本数量也要大于等于2

这个才可以尽可能的保证kafka数据的可靠性

8、Kafka中如何做到数据唯一,即数据去重?

至少一次+幂等性+事务

1、首先开启幂等性,默认是开启的。但这个只能保证单个分区单对话内不重复,即服务器不挂掉的情况下是唯一的。

2、其次、使用事务 这个才可以保证数据的唯一

9、生产者如何提高吞吐量?

调生产者的参数:

1、可以增大批次大小(batch.size)

2、可以增大等待时间(linger.ms

3、可以对消息进行压缩(compression.type)

默认是none ,可以配置为gzip sanppy lz4 zstd

4、可以增大缓冲区的大小(RecordAccumulator)

10、zk在kafka集群中有何作用

1、zookeeper可以记录kafka集群中有哪些服务器,并且哪些服务器是可用的

2、zookeeper可以记录每个主题的分区中谁是leader,谁是fllower

3、zookeeper可以辅助leader的选举

11、简述kafka集群中的Leader选举机制

1)每一个broker上线时,会在zk中进行注册

2)每个broker中都有一个controller,controller会争先抢占zk中 controller节点的注册权,谁先抢到,谁选举时说了算。假如broker0中的controller中抢到了,那它就是说了算的人。该controller一直监听ids节点是否有挂掉的节点。

3)选举规则是:在ISR中存活为前提,按照AR中排在前面的优先,比如:ar[1,0,2] ,isr[1,0,2],那么Leader会按照1,0,2 进行顺序的轮询。

12、kafka是如何处理数据乱序问题的。

可以保证数据单分区内有序、多分区无法保证:

开启幂等性、可以保证数据在单分区内自动排序

13、kafka中节点如何服役和退役

服役:

假如我要对已经存在的topicA主题的节点进行服役

1、创建一个要均衡的主题:首先在kafka中创建一个json文件,在这个Json文件里写入要均衡的主题topicA

2、生成一个负载均衡的计划:创建完之后执行这个json文件命令,生成一个负载均衡的计划

(执行的这个命令有服役计划)

3、创建副本存储计划:再创建一个json文件,将上一步生成的负载均衡的计划中未来分区策略复制进去

4、执行副本存储计划即可

退役:

假如我要对已经存在的topicA主题的节点进行退役

1、创建一个要均衡的主题:首先在kafka中创建一个json文件,在这个Json文件里写入要均衡的主题topicA

2、生成一个负载均衡的计划:创建完之后执行这个json文件命令,生成一个负载均衡的计划

(执行的这个命令有退役计划)

3、创建副本存储计划:再创建一个json文件,将上一步生成的负载均衡的计划中未来分区策略复制进去

4、执行副本存储计划即可

14、Kafka中Leader挂了,Follower挂了,然后再启动,数据如何同步?

1、假如Follower挂了:

假如Follower挂掉了,Leader和其他的Follower 继续往前存储数据,挂掉的节点从ISR集合中剔除,此时挂掉的Follower又重启了,它会先从上一次挂掉的节点的HW(最高水位线)开始同步数据,直到追上最后一个Follower为止,此时会重新回归ISR。

2、假如Leader挂了:

首先会从ISR中选出一个新的Leader,紧接着其余的Follower会将各自的log文件高于HW的部分截掉,然后从新的Leader同步数据。

15、kafka中初始化的时候Leader选举有一定的规律,如何打破这个规律呢?

手动调整分区副本,它的大致步骤是这样的:

1、创建一个新的topic:假如是topicA

2、查看这个默认的分区副本存储情况

3、创建副本存储计划:创建一个json文件,里面写入自定义的分区副本存储计划

4、执行副本存储计划:然后执行这个副本存储计划即可!

5、再次查看分区副本存储情况,发现已经修改完毕!

相关推荐
xsgbbx3 小时前
Agent Skills 实战:用 SKILL.md 把 Claude Code 从助手变成队友
面试
gQ85v10Db3 小时前
Redis分布式锁进阶第十八篇:本地缓存+分布式锁双锁架构 + 高并发削峰兜底 + 极致性能无损优化实战
redis·分布式·缓存
knight_9___3 小时前
LLM工具调用面试篇6
人工智能·python·面试·职场和发展·llm·agent
小江的记录本4 小时前
【Kafka核心】Kafka高性能的四大核心支柱:零拷贝、批量发送、页缓存、压缩
java·数据库·分布式·后端·缓存·kafka·rabbitmq
gQ85v10Db4 小时前
Redis分布式锁进阶第十四篇:全系列终局架构复盘 + 锁体系统一规范 + 线上全年零事故收官方案
redis·分布式·架构
KmSH8umpK4 小时前
Redis分布式锁进阶第十二篇
数据库·redis·分布式
生物信息与育种4 小时前
黄三文院士领衔植物星球计划(PLANeT)发表Cell
人工智能·深度学习·算法·面试·transformer
gQ85v10Db5 小时前
Redis分布式锁进阶第十六篇:番外高阶避坑篇 + 隐性埋点锁故障深挖 + 疑难杂症终极兜底方案
数据库·redis·分布式
闵孚龙5 小时前
一篇文章彻底吃透NumPy与Pandas——从零基础到面试通关的完整指南
面试·numpy·pandas
Heo5 小时前
14_React 中的更新队列 updateQueue
前端·javascript·面试