首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
龚拓新
蚂蚁集团_研发工程师
发布于上海
关注
已关注
取消关注
@程序员大彬:
Kafka高频面试题总结(2022年最新)
本文已经收录到github仓库,此仓库用于分享互联网大厂高频面试题,包括Java基础、多线程、MySQL、缓存、Spring、Springboot、MyBatis、消息队列、分布式、微服务等等,面试必备!欢迎大家star!github地址:https://github.com/Tyson0314/Java-learning如果github访问不了,可以访问gitee仓库。gitee地址:https://gitee.com/tysondai/Java-learningKafka 都有哪些特点?高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。可扩展性:kafka集群支持热扩展持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)高并发:支持数千个客户端同时读写请简述下你在哪些场景下会选择 Kafka?日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、HBase、Solr等。消息系统:解耦和生产者和消费者、缓存消息等。用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。流式处理:比如spark streaming和 FlinkKafka 的设计架构你知道吗?Kafka 架构分为以下几个部分:Producer :消息生产者,就是向 kafka broker 发消息的客户端。Consumer :消息消费者,向 kafka broker 取消息的客户端。Topic :可以理解为一个队列,一个 Topic 又分为一个或多个分区,Consumer Group:这是 kafka 用来实现一个 topic 消息的广播(发给所有的 consumer)和单播(发给任意一个 consumer)的手段。一个 topic 可以有多个 Consumer Group。Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker上,每个 partition 是一个有序的队列。partition 中的每条消息都会被分配一个有序的id(offset)。将消息发给 consumer,kafka 只保证按一个 partition 中的消息的顺序,不保证一个 topic 的整体(多个 partition 间)的顺序。Offset:kafka 的存储文件都是按照 offset.kafka 来命名,用 offset 做名字的好处是方便查找。例如你想找位于 2049 的位置,只要找到 2048.kafka 的文件即可。当然 the first offset 就是 00000000000.kafka。Kafka 分区的目的?分区对于 Kafka 集群的好处是:实现负载均衡。分区对于消费者来说,可以提高并发度,提高效率。你知道 Kafka 是如何做到消息的有序性?kafka 中的每个 partition 中的消息在写入时都是有序的,而且单独一个 partition 只能由一个消费者去消费,可以在里面保证消息的顺序性。但是分区之间的消息是不保证有序的。Kafka Producer 的执行过程?1,Producer生产消息 --> 2,从Zookeeper找到Partition的Leader --> 3,推送消息 --> 4,通过ISR列表通知给Follower --> 5, Follower从Leader拉取消息,并发送ack --> 6,Leader收到所有副本的ack,更新Offset,并向Producer发送ack,表示消息写入成功。讲一下你使用 Kafka Consumer 消费消息时的线程模型,为何如此设计?Thread-Per-Consumer Model,这种多线程模型是利用Kafka的topic分多个partition的机制来实现并行:每个线程都有自己的consumer实例,负责消费若干个partition。各个线程之间是完全独立的,不涉及任何线程同步和通信,所以实现起来非常简单。请谈一谈 Kafka 数据一致性原理一致性就是说不论是老的 Leader 还是新选举的 Leader,Consumer 都能读到一样的数据。假设分区的副本为3,其中副本0是 Leader,副本1和副本2是 follower,并且在 ISR 列表里面。虽然副本0已经写入了 Message4,但是 Consumer 只能读取到 Message2。因为所有的 ISR 都同步了 Message2,只有 High Water Mark 以上的消息才支持 Consumer 读取,而 High Water Mark 取决于 ISR 列表里面偏移量最小的分区,对应于上图的副本2,这个很类似于木桶原理。这样做的原因是还没有被足够多副本复制的消息被认为是“不安全”的,如果 Leader 发生崩溃,另一个副本成为新 Leader,那么这些消息很可能丢失了。如果我们允许消费者读取这些消息,可能就会破坏一致性。试想,一个消费者从当前 Leader(副本0) 读取并处理了 Message4,这个时候 Leader 挂掉了,选举了副本1为新的 Leader,这时候另一个消费者再去从新的 Leader 读取消息,发现这个消息其实并不存在,这就导致了数据不一致性问题。当然,引入了 High Water Mark 机制,会导致 Broker 间的消息复制因为某些原因变慢,那么消息到达消费者的时间也会随之变长(因为我们会先等待消息复制完毕)。延迟时间可以通过参数 replica.lag.time.max.ms 参数配置,它指定了副本在复制消息时可被允许的最大延迟时间。ISR、OSR、AR 是什么?ISR:In-Sync Replicas 副本同步队列OSR:Out-of-Sync ReplicasAR:Assigned Replicas 所有副本ISR是由leader维护,follower从leader同步数据有一些延迟(具体可以参见 图文了解 Kafka 的副本复制机制),超过相应的阈值会把 follower 剔除出 ISR, 存入OSR(Out-of-Sync Replicas )列表,新加入的follower也会先存放在OSR中。AR=ISR+OSR。LEO、HW、LSO、LW等分别代表什么LEO:是 LogEndOffset 的简称,代表当前日志文件中下一条HW:水位或水印(watermark)一词,也可称为高水位(high watermark),通常被用在流式处理领域(比如Apache Flink、Apache Spark等),以表征元素或事件在基于时间层面上的进度。在Kafka中,水位的概念反而与时间无关,而是与位置信息相关。严格来说,它表示的就是位置信息,即位移(offset)。取 partition 对应的 ISR中 最小的 LEO 作为 HW,consumer 最多只能消费到 HW 所在的位置上一条信息。LSO:是 LastStableOffset 的简称,对未完成的事务而言,LSO 的值等于事务中第一条消息的位置(firstUnstableOffset),对已完成的事务而言,它的值同 HW 相同LW:Low Watermark 低水位, 代表 AR 集合中最小的 logStartOffset 值。数据传输的事务有几种?数据传输的事务定义通常有以下三种级别:(1)最多一次: 消息不会被重复发送,最多被传输一次,但也有可能一次不传输(2)最少一次: 消息不会被漏发送,最少被传输一次,但也有可能被重复传输.(3)精确的一次(Exactly once): 不会漏传输也不会重复传输,每个消息都传输被Kafka 消费者是否可以消费指定分区消息?Kafa consumer消费消息时,向broker发出fetch请求去消费特定分区的消息,consumer指定消息在日志中的偏移量(offset),就可以消费从这个位置开始的消息,customer拥有了offset的控制权,可以向后回滚去重新消费之前的消息,这是很有意义的。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阻塞知道新消息到达(当然也可以阻塞知道消息的数量达到某个特定的量这样就可以批量发Kafka 高效文件存储设计特点Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件,减少磁盘占用。通过索引信息可以快速定位message和确定response的最大大小。通过index元数据全部映射到memory,可以避免segment file的IO磁盘操作。通过索引文件稀疏存储,可以大幅降低index文件元数据占用空间大小Kafka创建Topic时如何将分区放置到不同的Broker中副本因子不能大于 Broker 的个数;第一个分区(编号为0)的第一个副本放置位置是随机从 brokerList 选择的;其他分区的第一个副本放置位置相对于第0个分区依次往后移。也就是如果我们有5个 Broker,5个分区,假设第一个分区放在第四个 Broker 上,那么第二个分区将会放在第五个 Broker 上;第三个分区将会放在第一个 Broker 上;第四个分区将会放在第二个 Broker 上,依次类推;剩余的副本相对于第一个副本放置位置其实是由 nextReplicaShift 决定的,而这个数也是随机产生的谈一谈 Kafka 的再均衡在Kafka中,当有新消费者加入或者订阅的topic数发生变化时,会触发Rebalance(再均衡:在同一个消费者组当中,分区的所有权从一个消费者转移到另外一个消费者)机制,Rebalance顾名思义就是重新均衡消费者消费。Rebalance的过程如下:第一步:所有成员都向coordinator发送请求,请求入组。一旦所有成员都发送了请求,coordinator会从中选择一个consumer担任leader的角色,并把组成员信息以及订阅信息发给leader。第二步:leader开始分配消费方案,指明具体哪个consumer负责消费哪些topic的哪些partition。一旦完成分配,leader会将这个方案发给coordinator。coordinator接收到分配方案之后会把方案发给各个consumer,这样组内的所有成员就都知道自己应该消费哪些分区了。所以对于Rebalance来说,Coordinator起着至关重要的作用Kafka 是如何实现高吞吐率的?Kafka是分布式消息系统,需要处理海量的消息,Kafka的设计是把所有的消息都写入速度低容量大的硬盘,以此来换取更强的存储能力,但实际上,使用硬盘并没有带来过多的性能损失。kafka主要使用了以下几个方式实现了超高的吞吐率:顺序读写;零拷贝文件分段批量发送数据压缩。Kafka 缺点?由于是批量发送,数据并非真正的实时;对于mqtt协议不支持;不支持物联网传感数据直接接入;仅支持统一分区内消息有序,无法实现全局消息有序;监控不完善,需要安装插件;依赖zookeeper进行元数据管理;Kafka 新旧消费者的区别旧的 Kafka 消费者 API 主要包括:SimpleConsumer(简单消费者) 和 ZookeeperConsumerConnectir(高级消费者)。SimpleConsumer 名字看起来是简单消费者,但是其实用起来很不简单,可以使用它从特定的分区和偏移量开始读取消息。高级消费者和现在新的消费者有点像,有消费者群组,有分区再均衡,不过它使用 ZK 来管理消费者群组,并不具备偏移量和再均衡的可操控性。现在的消费者同时支持以上两种行为,所以为啥还用旧消费者 API 呢?Kafka 分区数可以增加或减少吗?为什么?我们可以使用 bin/kafka-topics.sh 命令对 Kafka 增加 Kafka 的分区数据,但是 Kafka 不支持减少分区数。Kafka 分区数据不支持减少是由很多原因的,比如减少的分区其数据放到哪里去?是删除,还是保留?删除的话,那么这些没消费的消息不就丢了。如果保留这些消息如何放到其他分区里面?追加到其他分区后面的话那么就破坏了 Kafka 单个分区的有序性。如果要保证删除分区数据插入到其他分区保证有序性,那么实现起来逻辑就会非常复杂。
点赞 9
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
04-24 18:31
哔哩哔哩_数据分析(准入职员工)
哔哩哔哩内推,哔哩哔哩内推码
1️⃣公司氛围:大家都很年轻,工作氛围很轻松,可以带宠物上班,楼层里经常会有小狗小猫出没,很适合喜欢小动物的朋友们~我见识超多品种的可爱的乖猫乖狗,年轻的同事里也有很多超级美丽/帅气的小姐姐小哥哥,上班都变得快乐不少。2️⃣工作时间:10到7,弹性打卡,我们组不卷,整体上也不怎么卷!全靠内驱力,上班几个月下来确实是这样的,请假也比较容易!总之就是体验很好~没有强push的感觉3️⃣公司福利薪资:研究生一天350+15饭补,本科生300+15饭补,8点半之后免费加班餐,入职会送100元会员购代金劵+小电视,可以买抱枕、手办~不定时还会有Up主扫楼,阿B内部有很多社团可以参加,B站大学欢迎大家,加...
哔哩哔哩公司福利 357人发布
点赞
评论
收藏
分享
04-29 14:41
南京大学 硬件开发
果然还是我太年轻了?
每次请假都很直接说,不舒服就说不舒服,没起来就说起晚了,想出去玩就说去旅游现在想想这样会不会太直接了?希望我老大不会因为我的真诚,觉得我是 不 礼 貌……
领导秒批的请假话术
点赞
评论
收藏
分享
04-11 23:51
门头沟学院 Java
人人都能过团子就本宫过不了
坚定的芭乐反对画饼_许愿Offer版:
人人都能过要面试干嘛,发个美团问卷填一下,明天来上班不就好了
点赞
评论
收藏
分享
04-28 19:27
已编辑
湖南大学 Java
美团测开一面凉经
八股:1、get和post方法的区别?2、http和https的区别?3、Linux常用命令?4、Java中equals()方法和==的区别?5、Java中基本数据类型?6、Java多线程有哪些实现方式?7、抽象类和接口的区别?8、事务的特性?9、一张user表,有name和sex两个字段,写sql语句查询姓陈的女性。10、一张表查询某个字段中重复的数据。11、朋友圈的点赞功能,如何设计测试用例?(有无大佬给个参考答案)总结:很公式化的八股。手撕:链表L1->L2->...->Ln-1->Ln,转换成L1->Ln->L2->Ln-1->...的形...
美团一面2061人在聊
查看12道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
暑期后端高频问题汇总
7.4W
2
...
左手敲代码的程序员,不配拥有offer吗?
5.6W
3
...
想听实话吗,校招ssp聊聊大厂客户端
2.9W
4
...
大连某小区保安一面
2.7W
5
...
后端简历上最值得写的项目
8794
6
...
北京到底有谁在啊?
8609
7
...
五一假期,弯道超车时间表
7632
8
...
暑期实习终章
6316
9
...
美团/饿了么/京东 配送端面经
6291
10
...
五一别写你那破开源代码了
5933
创作者周榜
更多
正在热议
更多
#
找工作,行业重要还是岗位重要?
#
6552次浏览
84人参与
#
盲审过后你想做什么?
#
12237次浏览
108人参与
#
五一之后,实习真的很难找吗?
#
43834次浏览
311人参与
#
领导秒批的请假话术
#
9465次浏览
72人参与
#
安克创新求职进展汇总
#
32456次浏览
412人参与
#
如果不工作真的会快乐吗
#
100795次浏览
861人参与
#
每人推荐一个小而美的高薪公司
#
72805次浏览
1357人参与
#
京东工作体验
#
12940次浏览
90人参与
#
五一假期,你打算“躺”还是“卷”?
#
24489次浏览
388人参与
#
考研可以缓解求职焦虑吗
#
20325次浏览
241人参与
#
如何缓解入职前的焦虑
#
171528次浏览
1267人参与
#
面试等了一周没回复,还有戏吗
#
115117次浏览
1072人参与
#
找工作前vs找工作后的心路变化
#
7087次浏览
64人参与
#
应届生薪资多少才合理?
#
3031次浏览
24人参与
#
写简历别走弯路
#
714007次浏览
7848人参与
#
你喜欢工作还是上学
#
37244次浏览
407人参与
#
如果有时光机,你最想去到哪个年纪?
#
43158次浏览
765人参与
#
牛友们的论文几号送审
#
27117次浏览
623人参与
#
扒一扒那些奇葩实习经历
#
41419次浏览
770人参与
#
24届的你们现状如何了?
#
64466次浏览
377人参与
牛客网
牛客企业服务