Kafka面试题:一些重要的核心知识点

Kafka中的模块概念:

Broker:Broker是Kafka的实例,每台服务器都有一个或多个Broker,Borker端不维护数据的消费状态,直接用磁盘存储数据,线性读写,提高效率。
Producer:发布者,将消息推送给Broker
Consumer:消费者,从Broker端拉取消息
Topic:发送到Broker的消息都是以Topic主题分类的
Partition:Topic的分区,是物理上的概念
Consumer Group:将多个消费者组成一个消费者组,在Kafka中,一个主题中的数据只能被消费者组中的一个消费者消费,而每个消费者可以消费同一个topic中不同分区的数据,也是为了提高Kafka的吞吐量
Topic与Partition:每条消息都有一个指定的Topic,为了提高Kafka吞吐量,物理上把Topic分成一个或者多个partition,每个partition在物理上对应一个文件夹,这个文件夹存储这个partition的所有消息和索引

Kafka常见面试题

  • 1.Kafka 中的 ISR(InSyncRepli)、OSR(OutSyncRepli)、AR(AllRepli)代表什么?
    ISR:为了保证数据可靠性提供的副本机制,所有跟leader保持同步的副本集合称为ISR;当有follow副本同步滞后太多或超时,将被移出ISR,被归为OSR;AR即所有副本的集合。所以ISR+OSR=AR

  • 2.Kafka 中的 HW、LEO 等分别代表什么?
    HW:标识了一个特定的消息偏移量,消费者只能拉取到这条offset之前的数据
    ISR分区副本中最后一条消息的待写位置,就是每个副本最大消息+1=LEO
    在这里插入图片描述

  • 3.Kafka 中是怎么体现消息顺序性的?
    生产者通过分区的leader副本顺序写入,保证消息顺序性
    消费者只能保证分区中数据消费的顺序性,无法保证分区间消费顺序。

  • 4.Kafka 中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么
    拦截器:按照kafka规则过滤数据是否符合要求
    序列化器:将key,value转换成字节数组可在网络中传输,将消息数据序列化
    分区器:如果ProducerRecoder指定分区,则不需要通过分区器,如果没有指定,则执行partition()方法计算该消息的分区
    先执行拦截器,再是序列化器,最后分区器

  • 5.Kafka 生产者客户端的整体结构是什么样子的?使用了几个线程来处理?分别是什么?
    Kafka生产者客户端主要由main线程和sender线程组成,先由主线程执行拦截器,序列化器,分区器后将数据推送到消息累加器中,消息累加器缓存好后批量发送到sender线程里,sender负责将数据推送到kafka cluster中。

  • 6.消费者组中消费者数量多少合适
    一个topic中的分区只能被一个组中的一个消费者消费,反之一个消费者可以消费多个分区的数据。所以消费者的数量不要大于分区数,否则也是浪费。

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

  • 8.有哪些情形会造成重复消费?如何避免
    1)强行kill线程,消费者已经消费但没有来得及提交offset
    2)消费完后的数据,还没有提交,与partition断开连接。比如某条消息消费时间超过kafka的session默认timeout30秒,那么可能会触发kafka的re-blance重平衡机制
    为了避免重复消费,可以设置手动提交offset,将消费消息和提交offset作为一个原子操作,要么都成功要么都失败。同时在producer推送消息的时候绑定一个sequnceid,在server端接收校验,重复的丢弃

  • 9.那些情景会造成消息漏消费?如何避免
    消费者设置为自动提交offset时,如果消费者拿到数据还未处理而自动提交offset,此时kafka被kill掉,数据将被漏消费。设置为手动提交offset

  • 10.当你使用 kafka-topics.sh 创建(删除)了一个 topic 之后,Kafka 背后会执行什么逻辑?
    1)会在 zookeeper 中的/brokers/topics 节点下创建一个新的 topic 节点,如:
    /brokers/topics/first
    2)触发 Controller 的监听程序
    3)kafka Controller 负责 topic 的创建工作,并更新 metadata cache

  • 11.topic 的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为什么?
    可以增加,在增加分区的时候,会通知订阅topic的消费者组触发re-reblace重平衡事件

  • 12.topic 的分区数可不可以减少?如果可以怎么减少?如果不可以,那又是为什么?
    不可以减少分区数,如果减少将会影响数据的顺序性,事务性等问题

  • 13.Kafka 有内部的 topic 吗?如果有是什么?有什么所用?
    在_consumer_offsets中,保存消费者的offset

  • 14.Kafka 分区分配的概念?
    一个topic多个分区,一个消费者组有多个消费者,每个分区只被一个消费者组中的一个消费者消费

  • 15.简述 Kafka 的日志目录结构?
    每个partition下的文件夹,有index下标,log数据。生产者将消息追加到log中,index记录offset偏移量

  • 16.如果我指定了一个 offset,Kafka Controller 怎么查找到对应的消息?
    通过二分查找法定位offset在哪个index文件中,再通过二分查找法找到offset小于或等于索引条目中最大的那个offset,拿到这条offset后得到它在message中的位置,再去message中找到这条数据,取出offset+1这条消息就是
    在这里插入图片描述

  • 17.聊一聊 Kafka Controller 的作用?
    主要依靠zookeeper完成集群broker和分区的管理,还有分区中ISR的选举

  • 18.Kafka 中有那些地方需要选举?这些地方的选举策略又有哪些?
    分区中ISR的leader需要选举,默认为ISR集合中第一个follow

  • 19.失效副本是指什么?有那些应对措施?
    OSR中的副本就是失效副本。同步策略是首先将当前记录的HW之后的消息删除,然后和leader同步,当存储消息的offset大于ISR中的HW后,重新回到ISR中

  • 20.Kafka 的哪些设计让它有如此高的性能?
    1、顺序写入磁盘,顺序读写比随机读写效率提升很多
    2、Memory Mapped File,即内存映射文件,利用操作系统的分页存储,来实现文件映射到物理内存,完成映射之后操作系统会对物理内存的操作同步到磁盘中

  • 21.Kafka是如何清理日志数据的
    Kafka的数据清理和consumer消费无关,只关乎server.properties中的两个消费规则

log.retention.hours=48 #数据最多保存48小时
log.retention.bytes=1073741824 #数据最多1G
  • 22.ACK应答机制
    为了保证producer发送消息的可靠性,每个partition在收到消息后都要返回ack确认包,producer收到后继续发送下一批数据,否则重发。ack有三种机制
    ack=0:producer只管发送,不管是否接收成功,对于数据可靠性要求不高
    ack=1:kafka默认机制,producer要等待leader副本接收到返回ack确认包后,认为消息发送成功
    ack=-1:producer要等待所有副本写入成功返回ack后,认为消息推送成功
  • 23.为什么kafka效率这么高?
    kafka将所有消息都收集为一个批量文件,并且批量压缩减少网络IO损耗,写入的时候由于是追加文件末尾的方式速度最优,读取的时候配合sendfile直接暴力输出。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值