天天看点

Kafka_面试题

Kafka面试题

    • 1. Kafka中的ISR、AR又代表什么?
    • 2. Kafka中的HW、LEO等分别代表什么?
    • 3. Kafka中是怎么体现消息顺序性的?
    • 4. Kafka中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么?
    • 5. Kafka生产者客户端的整体结构是什么样子的?使用了几个线程来处理?分别是什么?
    • 6. 消费组中的消费者个数如果超过topic的分区,那么就会有消费者消费不到数据”这句话是否正确?
    • 7. 消费者提交消费位移时提交的是当前消费到的最新消息的offset还是offset+1?
    • 8. 有哪些情形会造成重复消费?
    • 9. 那些情景会造成消息漏消费?
    • 10. 当你使用kafka-topics.sh创建(删除)了一个topic之后,Kafka背后会执行什么逻辑?
    • 11. topic的分区数可不可以增加减少?为什么?
    • 12. kafka producer如何优化打入速度
    • 13. Kafka有内部的topic吗?如果有是什么?有什么所用?
    • 14. Kafka分区分配的概念?
    • 15. 简述Kafka的日志目录结构?
    • 16. 如果我指定了一个offset,Kafka Controller怎么查找到对应的消息?
    • 17. 聊一聊Kafka Controller的作用?
    • 18. Kafka中有那些地方需要选举?这些地方的选举策略又有哪些?
    • 19. 失效副本是指什么?有那些应对措施?
    • 20. Kafka的那些设计让它有如此高的性能?

1. Kafka中的ISR、AR又代表什么?

AR:Assigned Replicas 所有副本,包括主

ISR:In-Sync Replicas 副本同步队列 (ISR由leader维护,follower从leader同步数据有一些延迟)

(包括延迟时间replica.lag.time.max.ms和延迟条数replica.lag.max.messages两个维度)

当前最新的版本0.10.x中只支持replica.lag.time.max.ms这个维度),任意一个超过阈值都会把follower剔除出ISR,存入OSR(Outof-Sync Replicas)列表,新加入的follower也会先存放在OSR中。

AR=ISR+OSR。

2. Kafka中的HW、LEO等分别代表什么?

LEO:(Log End Offset)每个副本的最后条消息的offset

HW:(High Watermark)俗称高水位,一个分区中所有副本最小的offset

3. Kafka中是怎么体现消息顺序性的?

Kafka只能保证分区内消息顺序有序,无法保证全局有序

实际业务中:

1)一个 topic,一个 partition,一个 consumer,内部单线程消费,单线程吞吐量太低,一般不会用这个。

2)写 N 个内存 queue,具有相同 key 的数据都到同一个内存 queue;然后对于 N 个线程,每个线程分别消费一个内存 queue 即可,这样就能保证顺序性。

4. Kafka中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么?

拦截器(onSend onAcknowledgement)->序列化器->分区器

5. Kafka生产者客户端的整体结构是什么样子的?使用了几个线程来处理?分别是什么?

1个主线程,一个sender线程。主线程有拦截器(onSend onAcknowledgement)->序列化器->分区器,sender线程负责堆积(或到指定时间)发送数据到对应分区

6. 消费组中的消费者个数如果超过topic的分区,那么就会有消费者消费不到数据”这句话是否正确?

消费者个数如果超过topic的分区,那么就会有消费者消费不到数据,一个分区只能被一个消费者消费

7. 消费者提交消费位移时提交的是当前消费到的最新消息的offset还是offset+1?

offset+1,文件也是这样命名的

8. 有哪些情形会造成重复消费?

1)从生产者端:

ack 设置为 -1 ,Leader收到数据follower同步数据后 ,brocker准备返回ack的时候挂掉了,新选出的Leader则会出现重复发送的情况

2)从消费者端:

先消费后提交,消费完成以后offset没有提交成功,下次消费时则会导致重复

9. 那些情景会造成消息漏消费?

1)从生产者端:

ack 设置为 0或者1时

–为0时,无状态返回,不知道是否收到

–为1时,只有Leader收到就返回ack,此时Leader挂了,副本尚未同步,则会漏消费。

2)从消费者端:

先提交后消费时

10. 当你使用kafka-topics.sh创建(删除)了一个topic之后,Kafka背后会执行什么逻辑?

1、会在zookeeper中的/brokers/topics节点下创建一个新的topic节点,如:/brokers/topics/first

2、触发Controller的监听程序

3、kafka Controller 负责topic的创建工作,并更新metadata cache

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

可以增加,不能减少。

12. kafka producer如何优化打入速度

增加线程

提高 batch.size

增加更多 producer 实例

增加 partition 数

设置 acks=-1 时,如果延迟增大:可以增大 num.replica.fetchers(follower 同步数据的线程数)来调解;

跨数据中心的传输:增加 socket 缓冲区设置以及 OS tcp 缓冲区设置。

13. Kafka有内部的topic吗?如果有是什么?有什么所用?

__consumer_offsets:作用是保存 Kafka 消费者的位移信息

14. Kafka分区分配的概念?

1、range

2、Round-robin

15. 简述Kafka的日志目录结构?

一个Topic有多个partition,一个partition对应一个目录,目录命名 ,topic-分区id。

下面分多个segment目录,命名是以topic名称和开始消息的偏移量来命名的,目录主要有两类文件log和index文件。

16. 如果我指定了一个offset,Kafka Controller怎么查找到对应的消息?

通过 offset找到对应的segment目录,目录下找到index文件,再去log文件中获取消息

17. 聊一聊Kafka Controller的作用?

Kafka集群的管理者,依赖zookeeper

在Kafka早期版本,对于分区和副本的状态的管理依赖于zookeeper的Watcher和队列:每一个broker都会在zookeeper注册Watcher,所以zookeeper就会出现大量的Watcher, 如果宕机的broker上的partition很多比较多,会造成多个Watcher触发,造成集群内大规模调整;每一个replica都要去再次zookeeper上注册监视器,当集群规模很大的时候,zookeeper负担很重。这种设计很容易出现脑裂和羊群效应以及zookeeper集群过载。

新版本该变了这种设计,使用KafkaController,只有KafkaController

Leader会向zookeeper上注册Watcher,其他broker几乎不用监听zookeeper的状态变化

Kafka集群中多个broker,有一个会被选举为controller leader,负责管理整个集群中分区和副本的状态,比如partition的leader 副本故障,由controller 负责为该partition重新选举新的leader 副本;当检测到ISR列表发生变化,有controller通知集群中所有broker更新其MetadataCache信息;或者增加某个topic分区的时候也会由controller管理分区的重新分配工作

当broker启动的时候,都会创建KafkaController对象,但是集群中只能有一个leader对外提供服务,这些每个节点上的KafkaController会在指定的zookeeper路径下创建临时节点,只有第一个成功创建的节点的KafkaController才可以成为leader,其余的都是follower。当leader故障后,所有的follower会收到通知,再次竞争在该路径下创建节点从而选举新的leader(先到先得)

18. Kafka中有那些地方需要选举?这些地方的选举策略又有哪些?

1、KafkaController选举的时候,先到先得

2、分区的副本选Leader的时候,从ISR中获取

19. 失效副本是指什么?有那些应对措施?

踢出ISR的那些OSR。从HW截断,然后同步Leader

20. Kafka的那些设计让它有如此高的性能?

1、分区

2、顺序

3、零拷贝