分享

kafka优秀面试题汇总

问题导读

1.你认为面试题是否有标准答案?
2.你认为该如何准备面试题?
3.你认为kafka有哪些难点?


kafka面试题,网上资料是非常多,而且很多也是非常优秀的。如果我们比较心细,可能会发现,不同的面试题答案是有些是有差异的。

那么对于面试题,那么这些到底哪个答案才是对的。

其实对于一些问题,很多都是站在我们自己的角度,根据自己的理解去回答问题。

因此面对这些问题,如果我们死记硬背,肯定会出问题的。没有自己理解的记忆,是经不起推敲和追问的。而面试在于交流包括面试题,所以希望我们在看网上资料的时候,要多消化和查找资料,而不是简单的去背答案。

这里给大家举一个例子:

比如下面面试题:
请说明什么是Apache Kafka?


答案1:
Apache Kafka是由Apache开发的一种发布订阅消息系统,它是一个分布式的、分区的和重复的日志服务。

答案2:
Kafka是分布式发布-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。

上面两个答案从对错的角度来说,其实都是没有错的。而答案2在表述了概念后,又有用途等方面的回答。因此在回答问题方面,其实也是有很多学问的。如果你想在面试中想表现的更好,可以了解下About云VIP

这里在给大家精选一些可能会难住我们的面试题,同时给大家推荐一些总结不错的其它总结。

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

ISR:In-Sync Replicas 副本同步队列
AR:Assigned 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 follower如何与leader同步数据
Kafka的复制机制既不是完全的同步复制,也不是单纯的异步复制。完全同步复制要求All Alive Follower都复制完,这条消息才会被认为commit,这种复制方式极大的影响了吞吐率。而异步复制方式下,Follower异步的从Leader复制数据,数据只要被Leader写入log就被认为已经commit,这种情况下,如果leader挂掉,会丢失数据,kafka使用ISR的方式很好的均衡了确保数据不丢失以及吞吐率。Follower可以批量的从Leader复制数据,而且Leader充分利用磁盘顺序读以及send file(zero copy)机制,这样极大的提高复制性能,内部批量写磁盘,大幅减少了Follower与Leader的消息量差。

3.什么情况下一个 broker 会从 isr中踢出去
leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR(in-sync Replica),每个Partition都会有一个ISR,而且是由leader动态维护 ,如果一个follower比一个leader落后太多,或者超过一定时间未发起数据复制请求,则leader将其重ISR中移除 。

4.kafka producer如何优化打入速度
增加线程

提高 batch.size

增加更多 producer 实例

增加 partition 数

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

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

5.kafka  unclean 配置代表啥,会对 spark streaming 消费有什么影响
unclean.leader.election.enable 为true的话,意味着非ISR集合的broker 也可以参与选举,这样有可能就会丢数据,spark streaming在消费过程中拿到的 end offset 会突然变小,导致 spark streaming job挂掉。如果unclean.leader.election.enable参数设置为true,就有可能发生数据丢失和数据不一致的情况,Kafka的可靠性就会降低;而如果unclean.leader.election.enable参数设置为false,Kafka的可用性就会降低。

6.consumer水平扩展如何实现kafka支持consumer水平扩展,可以让多个consumer加入一个consumer group,在一个consumer group中,每个分区只能分配给一个consumer,当kafka服务端增加分区数量进行水平扩展后,可以向consumer group中增加新的consumer来提高整个consumer group的消费能力,当consumer group 中的一个consumer出现故障下线时,会通过rebalance操作下线consumer,它负责处理的分区将分配给其他consumer

7.为了避免磁盘被占满,kafka会周期性的删除陈旧的消息,删除策略是什么?

  • 一种是根据消息保留的时间
  • 一种是根据topic存储的数据大小

8.ISR集合是什么?谁维护着?如何维护?
SR(In-Sync Replica)集合表示的是目前可用并且消息量与leader相差不多的副本集合,这是整个副本集合的一个子集
ISR集合的副本必须满足:副本所在节点必须维持着与zookeeper的连接;副本最后一条消息的offset与leader副本最后一条消息的offset之间的差值不能超出指定的阈值
每个分区的leader副本都会维护此分区的ISR集合,写请求首先由leader副本处理,之后follower副本会从leader副本上拉取写入的消息,这个过程会有一定的延迟,导致follower副本中保存的消息略少于leader副本,只要未超出阈值都是可以容忍的

9.producer是否直接将数据发送到broker的leader(主节点)?

producer直接将数据发送到broker的leader(主节点),不需要在多个节点进行分发,为了帮助producer做到这点,所有的Kafka节点都可以及时的告知:哪些节点是活动的,目标topic目标分区的leader在哪。这样producer就可以直接将消息发送到目的地了

10.Kafka消息是采用Pull模式,还是Push模式?
  • Kafka最初考虑的问题是,customer应该从brokes拉取消息还是brokers将消息推送到consumer,也就是pull还push。在这方面,Kafka遵循了一种大部分消息系统共同的传统的设计:producer将消息推送到broker,consumer从broker拉取消息
  • 一些消息系统比如Scribe和Apache Flume采用了push模式,将消息推送到下游的consumer。这样做有好处也有坏处:由broker决定消息推送的速率,对于不同消费速率的consumer就不太好处理了。消息系统都致力于让consumer以最大的速率最快速的消费消息,但不幸的是,push模式下,当broker推送的速率远大于consumer消费的速率时,consumer恐怕就要崩溃了。最终Kafka还是选取了传统的pull模式
  • Pull模式的另外一个好处是consumer可以自主决定是否批量的从broker拉取数据。Push模式必须在不知道下游consumer消费能力和消费策略的情况下决定是立即推送每条消息还是缓存之后批量推送。如果为了避免consumer崩溃而采用较低的推送速率,将可能导致一次只推送较少的消息而造成浪费。Pull模式下,consumer就可以根据自己的消费能力去决定这些策略
  • Pull有个缺点是,如果broker没有可供消费的消息,将导致consumer不断在循环中轮询,直到新消息到t达。为了避免这点,Kafka有个参数可以让consumer阻塞知道新消息到达(当然也可以阻塞知道消息的数量达到某个特定的量这样就可以批量发


11.Kafka存储在硬盘上的消息格式是什么?
消息由一个固定长度的头部和可变长度的字节数组组成。头部包含了一个版本号和CRC32校验码。
  • 消息长度: 4 bytes (value: 1+4+n)
  • 版本号: 1 byte
  • CRC校验码: 4 bytes
  • 具体的消息: n bytes

12.Kafka高效文件存储设计特点:

Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件,减少磁盘占用。

通过索引信息可以快速定位message和确定response的最大大小。

通过index元数据全部映射到memory,可以避免segment file的IO磁盘操作。

通过索引文件稀疏存储,可以大幅降低index文件元数据占用空间大小。

13.partition的数据如何保存到硬盘
topic中的多个partition以文件夹的形式保存到broker,每个分区序号从0递增,且消息有序
Partition文件下有多个segment(xxx.index,xxx.log)
segment 文件里的 大小和配置文件大小一致可以根据要求修改 默认为1g
如果大小大于1g时,会滚动一个新的segment并且以上一个segment最后一条消息的偏移量命名

更多kafka面试题文档下载 Kafka面试专题及答案.zip (117.34 KB, 下载次数: 15)
加微信w3aboutyun,可拉入技术爱好者群

已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /5 下一条