15道Kafka高频面试题与答案
15道Kafka高频面试题与答案
转载请标明出处:https://blog.csdn.net/donkor_/article/details/140374705
题库
- 1.Kafka中的ISR、OSR、AR代表什么?
- 2.Kafka中的HW、LEO等分别代表什么?
- 3.zookeeper对于kafka的作用是什么?
- 4.Kafka的用途有哪些?使用场景如何?
- 5.Kafka中是怎么体现消息顺序性的?
- 6.有哪些情形会造成重复消费?或丢失信息?
- 7.Kafka 分区的目的?
- 8.Kafka 的高可靠性是怎么实现的?
- 9.简述Kafka的日志目录结构?
- 10.Kafka的那些设计让它有如此高的性能?
- 11.Kafka中有那些地方需要选举?这些地方的选举策略又有哪些?
- 12.失效副本是指什么?有那些应对措施?
- 13.Kafka消息是采用Pull模式,还是Push模式?
- 14.Kafka创建Topic时如何将分区放置到不同的Broker中?
- 15.消费者提交消费位移时提交的是当前消费到的最新消息的 offset 还是 offset+1?
1.Kafka中的ISR、OSR、AR代表什么?
ISR (InSyncRepli) : 速率和leader相差低于10秒的follower的集合
OSR(OutSyncRepli) : 速率和leader相差大于10秒的follower
AR(AllRepli) : 所有分区的follower
2.Kafka中的HW、LEO等分别代表什么?
HW(High Water) : 又名高水位,根据同一分区中,最低的LEO所决定
LEO(Log End Offset) : 每个分区的最高offset
3.zookeeper对于kafka的作用是什么?
Kafka中的Topic 被分成了若干分区,每个分区在同一时间只被一个 consumer 消费。然后再通过offset进行消息位置标记,通过位置偏移来跟踪消费状态。相比其他一些消息队列使用“一个消息被分发到consumer 后 broker 就马上进行标记或者等待 customer 的通知后进行标记”的优点是,避免了通信消息发送后,可能出现的程序奔溃而出现消息丢失或者重复消费的情况。同时也无需维护消息的状态,不用加锁,提高了吞吐量
4.Kafka的用途有哪些?使用场景如何?
- 用户追踪:根据用户在web或者app上的操作,将这些操作消息记录到各个topic中,然后消费者通过订阅这些消息做实时的分析,或者记录到HDFS,用于离线分析或数据挖掘
- 日志收集:通过kafka对各个服务的日志进行收集,再开放给各个consumer
- 消息系统:缓存消息
- 运营指标:记录运营监控数据,收集操作应用数据的集中反馈,如报错和报告
5.Kafka中是怎么体现消息顺序性的?
每个分区内,每条消息都有offset,所以只能在同一分区内有序,但不同的分区无法做到消息顺序性
6.有哪些情形会造成重复消费?或丢失信息?
- 先处理后提交offset,会造成重读消费
- 先提交offset后处理,会造成数据丢失
7.Kafka 分区的目的?
对于kafka集群来说,分区可以做到负载均衡,对于消费者来说,可以提高并发度,提高读取效率
8.Kafka 的高可靠性是怎么实现的?
为了实现高可靠性,kafka使用了订阅的模式,并使用isr和ack应答机制
能进入isr中的follower和leader之间的速率不会相差10秒
当ack=0时,producer不等待broker的ack,不管数据有没有写入成功,都不再重复发该数据
当ack=1时,broker会等到leader写完数据后,就会向producer发送ack,但不会等follower同步数据,如果这时leader挂掉,producer会对新的leader发送新的数据,在old的leader中不同步的数据就会丢失
当ack=-1或者all时,broker会等到leader和isr中的所有follower都同步完数据,再向producer发送ack,有可能造成数据重复
9.简述Kafka的日志目录结构?
每一个分区对应一个文件夹,命名为topic-0,topic-1,每个文件夹内有.index和.log文件
10.Kafka的那些设计让它有如此高的性能?
- kafka是分布式的消息队列
- 对log文件进行了segment,并对segment建立了索引
- (对于单节点)使用了顺序读写,速度可以达到600M/s
- 引用了zero拷贝,在os系统就完成了读写操作
11.Kafka中有那些地方需要选举?这些地方的选举策略又有哪些?
在ISR中需要选择,选择策略为先到先得
12.失效副本是指什么?有那些应对措施?
失效副本为速率比leader相差大于10秒的follower
将失效的follower先提出ISR
等速率接近leader10秒内,再加进ISR
13.Kafka消息是采用Pull模式,还是Push模式?
在producer阶段,是向broker用Push模式
在consumer阶段,是向broker用Pull模式
在Pull模式下,consumer可以根据自身速率选择如何拉取数据,避免了低速率的consumer发生崩溃的问题
但缺点是,consumer要时不时的去询问broker是否有新数据,容易发生死循环,内存溢出
14.Kafka创建Topic时如何将分区放置到不同的Broker中?
首先副本数不能超过broker数
第一分区是随机从Broker中选择一个,然后其他分区相对于0号分区依次向后移
第一个分区是从nextReplicaShift决定的,而这个数也是随机产生的
15.消费者提交消费位移时提交的是当前消费到的最新消息的 offset 还是 offset+1?
生产者发送数据的offset是从0开始的,消费者消费的数据的offset是从1开始,故最新消息是offset+1
更多推荐
所有评论(0)