目录
[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 的可靠性)
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、再次查看分区副本存储情况,发现已经修改完毕!