kafka经典问题整理

1. kafka的ISR,AR代表什么?

AR:分区中的所有副本统称为AR(Assigned Repllicas)
ISR:所有与leader副本保持一定程度同步的副本(包括Leader)组成ISR(In-Sync Replicas)
说明:ISR是AR的一个子集,AR=ISR+OSR OSR(Out-Sync Relipcas),消息先发送到leader副本,所有follower副本从leader副本拉取消息同步,同步会存在一个滞后,通过设置相应的参数,满足参数覆盖范围的副本就称为ISR,保证了快速同步,不会因为少数几个副本的同步影响生产数据的性能。

2.kafka的HW,LEO代表什么?

HW:High Watermak最高水位线
LEO:Log End Offset最新偏移量
HW是ISR所有副本LEO最小的偏移量,代表最高水位线

3.kafka怎么体现消息的顺序性?

kafka同一分区内有序,顺序写入,顺序读取

4.kafka分区器、序列化器、拦截器处理顺序?

kafka lag值很大 kafka lag为负数_数据

5.kafka生产者客户端结构如何?几个线程?分别是什么?

见上图,两个线程,一个线程是往消息收集器一条条写入数据,第二线程是把消息收集器的数据批量写入kafka

6.消费组中消费组个数超过分区个数,是否会导致有的消费者无法消费数据?

是的,一个分区只能被一个消费者消费

7.消费者提交位移时,是offset还是offset+1

offset+1

8.哪些场景会造成重复消费

消费端,处理完数据还没来的及提交,程序就挂了,导致再次连接时,重新消费这一批数据。处理方案,将消息提交改为手动提交,数据处理和消息提交放在一个事务里,可以借助mysql的事务。

9.哪些场景会造成消息漏掉

生产端,ack=0不重试,ack=1 leader写入就返回,这种情况下,leader挂了,重新选举生成的leader并没有这个偏移量导致消息重复
消费端,先提交,后处理数据的时候出现异常

10.当使用kafka-topics.sh创建topic时,kafka背后执行逻辑是什么

创建:在zk上/brokers/topics/下节点 kafkabroker会监听节点变化创建主题
删除:调用脚本删除topic会在zk上将topic设置待删除标志,kafka后台有定时的线程会扫描所有需要删除的topic进行删除

11.topic分区可不可以增加,可不可以减少为什么?

可增加不可减少,以存在的分区如果存在数据,无法往其他分区迁移,要保证分区的顺序性

12.kafka有内部topic吗?有什么作用

有topic,offset的提交就是写入内部分区

13.kafka分区分配的概念

生产者分区分配:生产者会把每条消息发送相应的分区,可以直接指定分区,也可通过key的方式进行hash或者轮询
消费组分区分配:消费组中的消费者对应RangeAssignor、RoundRobinAssignor以及StickyAssignor ,其中RangeAssignor为默认的分区分配策略

14.简述kafka日志目录结构

kafka topic有几个分区,就有几个目录,每个目录下有三个文件,
xxx.log是消息集文件,
xxx.index 偏移量索引文件 ,
xxx.timeindex 时间戳索引文件
当kafka通过offset查找数据的时候,会先通过索引文件找到大致的文件便宜量,在通过log文件找到那条消息

15.如果我指定了offset,kafka controller如何查找相应的消息

当kafka通过offset查找数据的时候,会先通过索引文件找到大致的文件便宜量,在通过log文件找到那条消息

16.聊一聊kafka controller作用

1.选举Leader和ISR
2.管理集群Broker的上下线
3.所有Topic的分区副本分配

参考

17.kafka哪些地方需要选举?选举策略有哪些

一共有两处需要用到选举,首先是 partition 的 leader,用到的选举策略是 ISR;然后 是 kafka Controller,用先到先得的选举策略

18.失效副本指什么?有哪些对应措施

不能及时与leader同步,暂时踢出ISR,等其追上leader之后再重新加入

19.kafka有哪些设计让它有如此高的性能?

1.磁盘顺序写入
顺序写入的话,磁盘就不需要再移动转头,速度提升非常快
2.零拷贝
传统的拷贝,时从硬件拷贝到系统缓存,在拷贝到用户端程序,再又用户端程序写入系统缓存,再写入三方系统。零拷贝去除用户端(因为没有任何变动逻辑,写什么就输出什么),直接再系统缓存写入三方系统

20.kafka如何保证excatly once?

21.kafka新的消费者加入,分区如何分配

分区的分配有两种方式,RoundRobinAssignor 轮询分区,Range分区分配方式。新的消费者消费会导致分区重新分配,看基于哪种方式了。(具体怎么分配我不太清楚哦)

22.kafka新增分区,分区如何分配

分区的分配有两种方式,RoundRobinAssignor 轮询分区,Range分区分配方式。新的消费者消费会导致分区重新分配,看基于哪种方式了。(具体怎么分配我不太清楚哦)

23.kafka的幂等性是什么?

Producer在生产发送消息时,难免会重复发送消息。Producer进行retry时会产生重试机制,发生消息重复发送。而引入幂等性后,重复发送只会生成一条有效的消息

24.什么时候会出现消费者重启或者 Rebalance 操作