当前位置:网站首页>消息队列存储消息数据的MySQL表设计
消息队列存储消息数据的MySQL表设计
2022-07-31 00:08:00 【InfoQ】
消息队列存储结构分析
message表
- 由于系统架构的设计上数据是进行分组,所以表中需要一个代表分组的字段:shard_id。每一组数据分组集群,其shard_id是固定的。这个类似于kafka的partition分区设计,不同的consumer可以拉取不同的shard,达到加速消费的目的;
- 此处设计每个topic用一张单独的表去存储,即message_{topic},原因是1.MySQL理论上支持的表上亿,能满足topic数量要求 2.用单张表存可以隔离各topic的影响(物理上的逻辑上的)3.使用起来比较简单,因为单表中只可能是该topic的消息,id也可以使用自增的。

consume_log表
- 我们支持多个消费者组,每个消费者组共享一条消费进度记录,所以表中需要有group字段来区分是哪个消费者组的消费记录;
- 消费偏移量是最重要的,记录了消费到哪条数据,用offset来标识,即message表中的msg_id,因为msg_id在一个数据分组,一个topic下是严格递增的;

索引分析
发送消息
- 客户端完成分片路由,分配到某个shard,发送消息数据
- 消息队列服务器根据topic找到对应的消息表message_{topic},然后插入数据,msg_id自增
消费消息
- 客户端完成分片的路由,向对应服务器拉取消息,带上参数topic,group
- 查询consumer_log表,根据topic,group通过索引找到对应的数据,取出offset
- 根据offset查询对应的message表,通过主键id,找出下个offset的记录,取出并准备返回
- 更新consumer_log的offset信息
- 返回数据
消息过期
索引总结
- message_log表增加idx_topic_group,是topic+group的组合索引
- message表增加idx_born_date,是born_date的索引
边栏推荐
- Ukraine's foreign ministry: wu was restored to complete the export of food security
- leetcode 406. Queue Reconstruction by Height 根据身高重建队列(中等)
- leetcode 406. Queue Reconstruction by Height
- Shell编程条件语句 test命令 整数值,字符串比较 逻辑测试 文件测试
- The first level must project independently
- 软考总结
- 游戏商城表建立
- 360核心安全大脑3.0正式发布,构建政企用户的“能力中枢平台”
- 从笔试包装类型的11个常见判断是否相等的例子理解:包装类型、自动装箱与拆箱的原理、装箱拆箱的发生时机、包装类型的常量池技术
- VSCode高效开源神器有哪些
猜你喜欢
随机推荐
【深入浅出玩转FPGA学习13-----------测试用例设计1】
Steven Giesel recently published a 5-part series documenting his first experience building an application with the Uno Platform.
@requestmapping注解的作用及用法
雪佛兰开拓者,安全保障温暖你的家庭出行的第一选择
[0x800706D9] solution appears in Microsoft Store
HCIP第十五天笔记
flex-direction容器属性
在微服务中使用事件溯源的六大原因 - Herath
What are the efficient open source artifacts of VSCode
joiplay模拟器如何导入游戏存档
2021GDCPC Guangdong University Student Programming Competition H.History
matplotlib图表多曲线多纵轴绘制工具方法
45.【list链表的应用】
leetcode:127. 单词接龙
47.【指针与数组】
2D Transform Module && Media Queries
.NET 跨平台应用开发动手教程 |用 Uno Platform 构建一个 Kanban-style Todo App
How to install joiplay emulator rtp
360核心安全大脑3.0正式发布,构建政企用户的“能力中枢平台”
joiplay模拟器如何调中文