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分区器、序列化器、拦截器处理顺序?
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 操作