后端工程师的高阶面经
邓明
前 Shopee 高级工程师,Beego PMC
6888 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
后端工程师的高阶面经
15
15
1.0x
00:00/00:00
登录|注册

28|架构设计:如果让你设计一个消息队列,你会怎么设计它的架构?

你好,我是大明。今天我们学习消息队列的架构设计,也就是如果让你设计一个消息队列,你会怎么做。
这个话题在面试中属于很难的一类,它要求你不仅要对 Kafka 本身有很深刻的理解,也要对分布式系统设计与实现有很深刻的理解。而且你还要在面试短短几分钟内说清楚,就更难了。如果没有准备凭着感觉回答的话,大概率只能讲出生产者、消费者这些比较浅显的东西,不成体系。
所以今天我就从理论和落地实践上给你讲清楚,如果你要设计一个消息队列,你要解决哪些问题。很多跟消息队列有关的知识你已经在前面学过了,所以我们直接从面试准备开始。

面试准备

如果你所在的公司并没有使用任何消息队列之类的中间件,那么你就需要搞清楚你们公司是如何做到解耦、异步和削峰的。当然,如果你所在公司有一些历史比较悠久的系统,尤其是在 Kafka 等消息队列兴盛起来之前就已经存在的系统,也可以去找找它们是如何解决类似问题的。
此外你还可以进一步去了解下面这些实现。
基于内存的消息队列,一般用于进程内的事件驱动,又或者用于替代真实的消息队列参与测试。
基于 TCP 的消息队列。这种消息队列是指生产者直接和消费者连在一起,没有 broker。生产者会直接把消息发给消费者。
基于本地文件的消息队列,也就是生产者直接把消息写入到本地文件,消费者直接从本地文件中读取。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了设计消息队列架构的技术挑战和解决方案,从面试准备和思路两个方面入手。作者提到了消息队列的设计原则和关键问题,详细讨论了消息队列的topic、分区、broker与消息存储设计,以及消费者组和消费者的概念。此外,还介绍了记录偏移量、直接拉取消息和延迟消息等优化性能的方法。通过深入的技术讨论,为读者提供了设计消息队列架构的思路和方法,对于从事分布式系统设计与实现的技术人员具有一定的参考价值。文章还提到了利用数据库来实现消息队列的场景和适用性,以及在不同数据库环境下的实现方式。文章内容涵盖了消息队列架构设计的方方面面,为读者提供了全面的技术指导和实践建议。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端工程师的高阶面经》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • 大将军Leo。。
    请教下老师,Broker怎么划分比较好,是多个业务用都同一个?

    作者回复: 原则就是尽量分散,避免因为一个 Broker 出故障,导致好几个业务都受到影响。 不过就我的观察,实际上大厂在这方面也不是很讲究,都是随便搞。

    2023-10-01归属地:广东
    1
  • Geek8004
    上一条没写完:疑问点:要是分区是3个,目前一个消费组里面已经有三个消费者正在消费每个分区的数据了,那如果新加了一个消费者造成重平衡应该怎么解决; 不同的消费者怎么和不同的分区对应上的?

    作者回复: 三个分区的话,一个消费者会用不上。也就是不会给它安排任务。 但是这是一个动态的过程,也就是某一个时刻,肯定是只有三个消费者在消费,一个空闲。但是因为存在 rebalance 过程,那么可能一开始是 ABC,但是后面 C 有点小问题,换成 ABD 三个消费者,也是可能的。但是正常会认为,比分区数量还要多的消费者,都是浪费资源。

    2023-08-31归属地:上海
    1
  • Geek8004
    尝试回答: 一、在 MySQL 的实现里面,当来了一个新消费者组的时候,该怎么初始化消息偏移量表中该消费者组的数据? 答:如果有3个分区在该topic对应的位移表里面增加一条新的消费组的数据(如 数据库的记录用key:value标识 消费组名字:new_consumer_1,分区:1,位移:0; 消费组名字:new_consumer_1,分区:2,位移:0,消费组名字:new_consumer_1,分区:3,位移:0)三条数据; 疑问点: 二、有些小型公司也不会使用 Kafka 之类的专业的消息队列,而是借助于 Redis 来实现。你知道怎么用 Redis 来实现类似的功能吗?

    作者回复: 你这个是不是没写完?

    2023-08-31归属地:上海
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部