kafka面试夺命30问
目录
1、kafka消息发送的流程?
2、Kafka 的设计架构你知道吗?
3、Kafka 分区的目的?
4、你知道 Kafka 是如何做到消息的有序性?
5、ISR、OSR、AR 是什么?
6、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、再次查看分区副本存储情况,发现已经修改完毕!