Kafka常见面试题(一)

1、Kafka 可以脱离 zookeeper 单独使用吗?为什么?

kafka 不能脱离 zookeeper 单独使用,因为 kafka 使用 zookeeper 管理和协调 kafka 的节点服务器。

2、kafka 有几种数据保留的策略?

kafka 有两种数据保存策略:基于过期时间和基于存储的消息大小。

3、什么情况会导致 kafka 运行变慢?

cpu 性能瓶颈
磁盘读写瓶颈
网络瓶颈

4、Kafka中的分区器、序列化器、拦截器的处理顺序是什么?

拦截器->序列化器->分区器

5、Kafka为什么不支持读写分离?

如果支持了读写分离,就意味着可能的数据不一致,或数据滞后。

这其实是分布式场景下的通用问题,因为我们知道CAP理论下,我们只能保证C(可用性)和A(一致性)取其一,如果支持读写分离,那其实对于一致性的要求可能就会有一定折扣,因为通常的场景下,副本之间都是通过同步来实现副本数据一致的,那同步过程中肯定会有时间的消耗。

Leader/Follower模型并没有规定Follower副本不可以对外提供读服务。很多框架都是允许这么做的,只是 Kafka最初为了避免不一致性的问题,而采用了让Leader统一提供服务的方式。不过,自Kafka 2.4之后,Kafka提供了有限度的读写分离,也就是说,Follower副本能够对外提供读服务。

6、Java Consumer 为什么采用单线程来获取消息?

首先,Java Consumer是双线程的设计。其中一个线程是用户主线程,负责获取消息;另一个线程是心跳线程,负责向Kafka汇报消费者存活情况。将心跳单独放入专属的线程,能够有效地规避因消息处理速度慢而被视为下线的“假死”情况。

单线程获取消息的设计能够避免阻塞式的消息获取方式。单线程轮询方式容易实现异步非阻塞式,这样便于将消费者扩展成支持实时流处理的操作算子。因为很多实时流处理操作算子都不能是阻塞式的。

另外一个可能的好处是,可以简化代码的开发。多线程交互的代码是非常容易出错的。


7、Kafa consumer 是否可以消费指定分区消息?

可以。Kafa consumer 消费消息时,向 broker 发出"fetch"请求去消费特定分区的消息,consumer
指定消息在日志中的偏移量(offset),就可以消费从这个位置开始的消息,customer 拥有
了 offset 的控制权,可以向后回滚去重新消费之前的消息,这是很有意义的


8、Kafka 消息是采用 Pull 模式,还是 Push 模式?

Kafka 遵循了一种大部分消息系统共同的传统的设计:producer 将消息推送到 broker,consumer 从 broker 拉取消息

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

ISR:In-Sync Replicas 副本同步队列
AR:Assigned Replicas 所有副本
ISR是由leader维护的,follower从leader同步数据有一些延迟,如果延迟超过阈值就会把follower剔除出ISR, 存入OSR(Outof-Sync Replicas)列表,新加入的follower也会先存放在OSR中。AR=ISR+OSR。

10、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的消息量差。

#学习路径#
全部评论

相关推荐

2025-12-24 02:41
哈尔滨工业大学 Java
又是焦虑的一个晚上,不想投了不想面了,想静下心来好好沉淀,也是给自己喘口气的机会。在各个平台焦虑地刷来刷去,想了想还是过来写一下从十月以来五次面试的收获。十月:可以说是惨不忍睹。第一次面的小厂,基本没有答出来的问题,当时光顾着看大家的面经背一些高频八股,却连最基本的东西都忘光了。第二次面的滴滴,这次的八股是最最常见的一些,JVM、垃圾回收、隔离级别,算法也是mid,可惜这个机会没有抓住,当时hot100只刷了30,甚至很多语法都不熟。面完自欺欺人沉淀了两个月,实际上这两个月八股一点没背,算法倒是进步了一些。十二月考完试开始海投,明显比十月份时约面难多了。小红书:也很可惜,感觉和面试官聊得不错,问了我很多我做过的ai方面的东西,但是组内主要是做客户端的,反复确认了好几遍我一点都不了解客户端吗。还有最后问了一些Java基础的问题,也是挺好笑,我依旧是一点不知道,太浮躁,Java基础的数据结构的八股一点都没背,很多东西看着差不多就放过去。美团:史上最难堪的一次,详见主页。项目、八股都问到了很多很多我的盲点,可以当错题集用了(笑。面完彻底崩溃。一直都在自欺欺人,实际上就是什么也不会。小厂:莫名其妙。两人在会议间里一起问我。问了两个智力题,都答上来了,依旧挂。可能也是我八股答得不好。这个厂是做类似交易平台的,所以他也问了挺多数据库的事,深挖了一下项目,如果超卖一人一单不用redis而是用MySQL的锁怎么解决,完全愣住了,没准备过,MySQL只会背八股和最简单的查询语句。还发现这个Java基础的数据结构依旧是有问题。哈哈,迄今为止没过过一面,没心力也没胆量继续投了。这一两周把学校的实验、期末收尾也确实挺忙的,回家之后随缘投一投吧,学校里面试太不方便了。刚刚把八股来回翻了翻,想想自己有多少不会,想想自己有多少欠缺,把投的一份简历撤回了。每次投完简历都会做噩梦、被约面试也会做噩梦,给自己一段时间休整,回家以后全力梭哈,希望来年能有好结果。
点赞 评论 收藏
分享
评论
点赞
45
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务