尼恩说在前面
在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题:
canal+MQ,会有乱序的问题吗? 如何保证RocketMQ消息有序?
《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF,请到文末公号【技术自由圈】获取
本文目录
- 尼恩说在前面
- 1 如何保证消息顺序?
- 2 消息有序的两大类型
- 2.1 全局顺序
-适用场景
- 2.2 分区顺序
-适用场景
- 2.3 对比
- 3 应用开发维度的实现消息有序需要做的工作:
- 4:canal+MQ,如何实现有序?
- 4.1 Cannal 的有序发送
- 4.2 Cannal 的有序发送示例
- 4.3 Cannal 的使用场景
- 尼恩《技术自由圈》多个核心MQ面试题
- 说在最后
1 如何保证消息顺序?
顺序发送: 发送时保持顺序一致 顺序存储: broker 存储时保持 顺序一致 顺序消费: 消费时 保持 顺序一致
2 消息有序的两大类型
全局有序:整个MQ系统的所有消息严格按照队列先入先出顺序进行消费 局部有序:只保证一部分关键信息的消费顺序
2.1 全局顺序
适用场景
2.2 分区顺序
sharding key
进行区块(queue)分区,同一Queue内的消息严格按FIFO发布和消费。Sharding key是顺序消息中用来区分不同分区的关键字段,和普通消息的Key完全不同。
适用场景
我们用QQ聊天,只需要保证一个聊天窗口里的消息有序就可以了。 而对于电商订单场景,也只要保证一个订单的所有消息是有序的就可以了。
2.3 对比
无
有序消费的消费者类型:ConsumeMessageConcurrentlyService 并发消费服务 无序消费的消费者类型:ConsumeMessageOrderlyService
3 应用开发维度的实现消息有序需要做的工作:
顺序发送环节,消息发生没有序:Producer 发送消息到 MessageQueue 时是轮询发送的,消息被发送到不同的分区队列,就不能保证 FIFO 了。 顺序消费环节,消息消费无序:Consumer 默认是多线程并发消费同一个 MessageQueue 的,即使消息是顺序到达的,也不能保证消息顺序消费。
消息发送有序 消息消费有序
4:canal+MQ,如何实现有序?
Cannal 的有序监听。 Binlog本身是有序的,写入到mq之后如何保障顺序 Cannal 的有序发送。 顺序存储: broker 存储时保持 顺序一致 顺序消费: 消费时 保持 顺序一致
4.1 Cannal 的有序发送
canal.mq.partitionsNum
canal.mq.partitionHash
canal.mq.partitionsNum:
描述:设置消息队列的分区数量。 作用:决定了消息在消息队列中被分区的数量。不同的分区可以并行处理,但需要注意同一个分区内的消息是有序的。
描述:设置消息分区的哈希规则。 作用:用于指定分区的哈希策略,可以根据特定的字段进行分区。例如,可以根据表名、主键等字段进行分区,以保证某些关键数据的有序性。
4.2 Cannal 的有序发送示例
canal.mq.partitionsNum=10
canal.mq.partitionHash=my_database.my_table:id
canal.mq.partitionsNum=10:
表示消息会被分成 10 个分区。每个分区可以并行处理,从而提高处理效率。
针对 my_database.my_table
表的数据,根据id
字段进行哈希分区。这样可以确保同一个 id
的所有变更都进入同一个分区,从而保证该id
的变更顺序不变。
canal.mq.partitionHash
,分区内的消息是有序的,因此只要保证同一实体(如同一行数据)的变更进入同一个分区,就能保证其有序性。4.3 Cannal 的使用场景
实时数据同步:将数据库的变更实时同步到其他系统,如搜索引擎、缓存等。 数据备份:实现数据库的实时备份,确保数据的一致性和完整性。 事件驱动架构:在事件驱动架构中,利用 Canal 将数据库变更作为事件发布到消息队列,供其他系统消费。
canal.mq.partitionsNum
和 canal.mq.partitionHash
,可以在数据同步中既保证有序性,又提高处理效率。尼恩《技术自由圈》多个核心MQ面试题
说在最后
部分历史案例
实现职业转型,极速上岸
关注职业救助站公众号,获取每天职业干货
助您实现职业转型、职业升级、极速上岸
---------------------------------
实现架构转型,再无中年危机
关注技术自由圈公众号,获取每天技术千货
一起成为牛逼的未来超级架构师
几十篇架构笔记、5000页面试宝典、20个技术圣经
请加尼恩个人微信 免费拿走
暗号,请在 公众号后台 发送消息:领电子书
如有收获,请点击底部的"在看"和"赞",谢谢