-
mq用途
- 限流消峰
加入系统只能承载每秒2000请求,而在一秒内同时来了五千请求则有三千请求无法处理。解决办法加入mq存储请求慢慢消费。
- 异步解耦
订单处理
- 数据收集
分布式系统产生的海量数据流,如业务日志
ROCKETMQ_HOME=C:\Users\zhiyuan.tian.IMART360\Desktop\mq
image.png-
集群的搭建理论
- 单master模式
broker集群由多个master构成,不存在slave。同一个topic的各个queue会平均分布在各个master节点上
- 优点:配置简单,单个master宕机或重新维护对应用无影响,在磁盘配置为raid10时,及时机器宕机不可恢复情况下,由于raid10磁盘非常可靠消息也不会丢失(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高。
- 缺点 : 单机机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅(不可消费),消息实时性会受到影响。
- 多master多slave模式
broker集群由多个master构成,每个master又配置了多个slave(在配置了raid磁盘阵列的情况下,一个master一般配置一个slave即可)。master与slave的关系是主备关系,即master负责处理消息的读写请求,而slaver仅仅负责消息的备份与master宕机后的角色切换。
最佳实践
一般为master配置raid10磁盘阵列,然后再为其配置一个slave,
即利用了raid10磁盘阵列的高效,安全性,又解决了可能会影响订阅的问题。
-
消息的生产过程
- producer可以将消息写入到某个broker中的某个queue中,其经理了如下过程
- producer发送消息之前,会现象nameserver发出获取消息topic的路由信息的请求
- NS返回该topic的路由表及broker列表
- producer根据代码中指定的queue选择策略,从queue列表中选出一个队列,用于后续存储发送消息。
- producer对消息做一些特殊处理,例如对消息进行压缩
- producer想选择除的queue所在的broker发送rpc请求,将消息发送到选择除的queue。
路由表:实际是一个map,key为topic名称,value是queueData实例列表。queueData并不是一个queue对应一个queueData,而是一个broker中该topic的所有queue对应一个queuedata
brokername简单来说,路由表的key为topic名称,value则为所有涉及该topic的brokername列表
-
消息的存储
-
abort: 改文件在broker启动后自动创建,正常关闭abort,该文件会自动消息,若在没有启动broker的情况下,发现这个文件是存在的,则说明之前broker的关闭是非正常关闭。
-
checkpoint:其中存储这commitlog consuneueue index 文件的最后刷盘时间
-
commitlog : 其中存放着commitlog文件,而消息是卸载commitlog文件中
-
config :存放着broker运行期间的一些配置数据
-
consumequece 其中存放着consumcqueue 队列存放在这个目录中
-
index : 其中存放着消息索引文件indexFile
-
lock: 运行期间使用到的全局资源锁
网友评论