RQ学习

王大爷 2020年09月04日 566次浏览

rocket全局顺序消费,归根就是 1个顺序分片,1个消费线程,来保证消费顺序,集群情况下,保证了高可用,不能保证负载,一台机器需要承载所有的消费请求

rocket分片消费:我们遇到的场景是,接入第三方广告,埋点实现匹配回调

1.顺序消费 2.量大(千万级每天)

全局顺序消费必然导致消息堆积严重

想到的俩个方案 一.分片顺序,用手机型号(埋点,与广告数据均有),做hash来取目标分片,存入消息 二.普通队列,乱序存入,且记录消息发送时间,用定时任务匹配(用发送时间字段区分先后顺序,做逻辑处理)

解决同步刷盘效率问题 1.使用 FileChannel + DirectBuffer 池,使用堆外内存,加快内存拷贝 2.使用数据和索引分离,当消息需要写入时,使用 commitlog 文件顺序写,当需要定位某个消息时,查询index 文件来定位,从而减少文件IO随机读写的性能损耗

https://github.com/Snailclimb/JavaGuide/blob/master/docs/system-design/data-communication/RocketMQ-Questions.md#