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、再次查看分区副本存储情况,发现已经修改完毕!

相关推荐
陌小呆^O^2 小时前
Cmakelist.txt之Liunx-rabbitmq
分布式·rabbitmq
斯普信专业组5 小时前
深度解析FastDFS:构建高效分布式文件存储的实战指南(上)
分布式·fastdfs
jikuaidi6yuan6 小时前
鸿蒙系统(HarmonyOS)分布式任务调度
分布式·华为·harmonyos
BestandW1shEs6 小时前
彻底理解消息队列的作用及如何选择
java·kafka·rabbitmq·rocketmq
天冬忘忧6 小时前
Kafka 生产者全面解析:从基础原理到高级实践
大数据·分布式·kafka
J老熊6 小时前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程
猿java6 小时前
什么是 Hystrix?它的工作原理是什么?
java·微服务·面试
天冬忘忧7 小时前
Kafka 数据倾斜:原因、影响与解决方案
分布式·kafka
隔着天花板看星星7 小时前
Kafka-Consumer理论知识
大数据·分布式·中间件·kafka