今天分享的这道面试题,是一个工作 2 年的小伙伴私信给我的。
我觉得这个问题比较简单,本来不打算说,但是,唉~ 作为新的 UP 主满足粉丝的基本要求,才能获得更多的点赞呀~是吧。
关于“ Kafka 如何保证消息不丢失 ”这个问题
一、面试解析
(如图)kafka 是一个用来实现异步消息通信的中间件,它的整个架构由 Producer、 Consumer、Broker 组成。 所以,对于 kafka 如何保证消息不丢失这个问题,可以从三个方面来考虑和实现。 首先是 Producer 端,需要确保消息能够到达 Broker 并实现消息存储,在这个层面,有可能出现网络问题,导致消息发送失败,所以,针对 Producer 端,可以通过 2 种方式来避免消息丢失 7. Producer 默认是异步发送消息,这种情况下要确保消息发送成功,有两个方法 a. 把异步发送改成同步发送,这样 producer 就能实时知道消息发送的结果。 b. 添加异步回调函数来监听消息发送的结果,如果发送失败,可以在回调中重试。 8. Producer 本身提供了一个重试参数 retries,如果因为网络问题或者 Broker 故障导致发送失败,Producer 会自动重试。然后是 Broker 端,Broker 需要确保 Producer 发送过来的消息不会丢失,也就是只需要把消息持久化到磁盘就可以了。 (如图)但是,Kafka 为了提升性能,采用了异步批量刷盘的实现机制,也就是说按照一定的消息量和时间间隔来刷盘,而最终刷新到磁盘的这个动作,是由操作系统来调度的,所以如果在刷盘之前系统崩溃,就会导致数据丢失。
(如图)Kafka 并没有提供同步刷盘的实现,所以针对这个问题,需要通过 Partition的副本机制和 acks 机制来一起解决。“我简单说一下 Partition 副本机制,它是针对每个数据分区的高可用策略,每个partition 副本集包含唯一的一个 Leader 和多个 Follower,Leader 专门处理事务类的请求,Follower 负责同步 Leader 的数据”。在这样的一种机制的基础上,kafka 提供了一个 acks 的参数,Producer 可以设置 acks参数再结合 Broker 的副本机制来个共同保障数据的可靠性。acks 有几个值的选择。 9. acks=0, 表示 producer 不需要等 Broker 的响应,就认为消息发送成功,这种情况会存在消息丢失。 10. acks=1,表示 Broker 中的 Leader Partition 收到消息以后,不等待其他 FollowerPartition 同步完,就给 Producer 返回确认,这种情况下 Leader Partition 挂了,会存在数据丢失。 11. acks=-1,表示 Broker 中的 Leader Parititon 收到消息后,并且等待 ISR 列表中的 follower 同步完成,再给 Producer 返回确认,这个配置可以保证数据的可靠性 最后,就是 Consumer 必须要能消费到这个消息,实际上,我认为,只要 producer和 broker 的消息可靠的到了保障,那么消费端是不太可能出现消息无法消费的问题,除非是 Consumer 没有消费完这个消息就直接提交了,但是即便是这个情况,也可以通过调整 offset 的值来重新消费。 以上就是我对这个问题的理解。
二、面试总结
从高手的回答可以发现,任何的技术问题,是可以按照请求的顺序,或者调用关系来逐层推导去回答的。当然,技术的底子要足够厚,至少像 kafka 里面这些副本、数据同步、分区、刷盘等功能,至少都要有深度的思考和研究。 好的,本期的普通人 VS 高手面试系列的视频就到这里结束了,喜欢的朋友记得点赞和收藏。 另外,有任何技术上的问题,职业发展有关的问题,都可以私信我,我会在第一时间回复。 我是 浮生,一个工作了 14 年的 Java 程序员,咱们下期再见。三、粉丝福利
最近很多同学问我有没有java学习资料,我根据我从小白到架构师多年的学习经验整理出来了一份 50W字面试解析文档、简历模板、学习路线图、java必看学习书籍 、 需要的小伙伴 可以关注我
公众号:“ 灰灰聊架构 ”, 回复暗号:“ 321 ”即可获取
猜你喜欢
- 3小时前外包干了1个月,技术退步一大半。。。
- 3小时前智能小程序相关名词解释(汇总)
- 3小时前kafka基础知识总结
- 3小时前基于 Eureka 的 Ribbon 负载均衡实现原理【SpringCloud 源码分析】
- 3小时前JavaMySql+hadoop高校固定资产管理系统 74965(免费领源码)计算机毕业设计选题推荐上万套实战教程JAVA、PHP,node.js,C++、python等
- 3小时前3D Gaussian Splatting:用于实时的辐射场渲染
- 3小时前汽车座椅空调(汽车座椅空调出风口可以封掉吗)
- 3小时前留学中介收费情况(留学中介机构收费标准)
- 2小时前手机掉厕所怎么办(手机掉蹲厕里了应该怎么处理)
- 1小时前tnf羽绒服(tnf羽绒服充绒量多少克)
网友评论
- 搜索
- 最新文章
- 热门文章