rocketmq

最近在迁移项目的时候,顺带研究了一下rocketmq这个支持消息持久化的队列模型的消息中间件,之前也接触过一些像activemq,rabbitmq等中间件,但没有深入了解。
1. 什么是消息中间件
它采用高效可靠的传递机制进行平台无关的数据传递,通常消息队列利用异步的方式与服务端进行交互,适用于实时性不太高的场景。一般是一个队列模型的消息中间件,其主要解决异步解耦,挡住前端的数据洪峰,保证后端系统稳定。
2. 消息中间件需要解决的问题
2. 1. 发布和订阅是其基本功能
2. 2. 消息优先级,由于rocketmq消息是持久化的,所以若同一队列进行优先级判断,开销很大,所以可以配置高优先级队列,譬如指不同的topic来表示高,中,低级别队列。
2. 3. 消息消费顺序,参考http://www.jianshu.com/p/453c6e7ff81c
2. 4. 消息过滤
2. 5. 消息持久化,持久化到数据库,文件记录形式
2. 6. 消息可靠性,包括避免单点故障。
2. 7. 消息不重复
2. 8. 回溯消费,由于业务需求,可能需要重新消费消息,rocketmq支持按照毫秒级别的时间前回溯或后回溯。
2. 9. 消息堆积,消息堆积在内存Buffer中,超过内存buffer,按照一定策略丢弃消息,考虑到堆积容量、是否影响发消息吞量、consumer
消费、堆积磁盘。
2. 10. 分布式事务,分布式事务两阶段提交问题,rocketmq采用第一 阶段的prepared的offset,进行第二阶段通过Offset进行消息定位回滚
,但是会造成系统脏页过多.
2. 11. 定时消息:指消息不会被consumer立即消费,支持特定的像5s,10s等,否则若任意时间精度,得做消息排序,或者涉及到持久化,销
2. 12. 消息重试:提供定时重试机制(消息本身的问题)或者sleep重试机制
3. rocketmq物理部署结构
rocketmq由nameserver,broker,producer,consumer组成。
3. 1. nameserver:是一个几乎无状态的节点,支持集群部署,节点之间无信息同步。
3. 2. broker:消息中转角色,负责存储消息,转发消息,也称之为Server。为了防止单点故障,通常会设置多master和多slave,一个slave值对应一个master,通过制定相同brokerName不同的brokerId进行定义。每个broker与nameserver集群中的所有节点建立长连接,定时注册topic信息到nameserver。
3. 3. producer:负责产生消息的,与nameserver集群中的其中一个节点建立长连接,定期中nameserver去topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳,可集群部署。
3. 4. consumer:一般是后台系统负责异步消费消息的,与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave 订阅消息,订阅规则由Broker配置决定并且不间断的从broker拉取消息,消息拉取到本地队列,然后本地消费线程消费本地消息队列,只是一个异步过程,拉取线程不会等待本地消费线程。消费有广播消费和集群消费两种,广播消费是指一条消息被多个consumer消费,即使在同一个group;而集群消费是rocketmq默认的消费方式,一个group中consumer实例均摊同一个topic的消费消息。
4. 逻辑部署结构
Producer Group或consumer Group一类发送或消费逻辑一致的producer或consumer的集合名称。可以包括多个其实例或多台机器。
5. 数据存储结构
是类似线性表的结构,数据单独存储在commitLog里,其中消费者会先在consumer queue(ommitLog ,Offset,Size,
Message Tag Hashcode构成)队列中获取对应的在commitLog中offset位置信息,然后再在commitLog中获取 message
(topic,queueId,message构成),其中每个Topic有多个队列构成。
6. 其它
topic表示一类应用,一般是手动创建,关闭自动创建;tags标志消息子类,通常用于在broker端进行消息过滤;keys表示每个消息在业务层面的唯一标识,用于定位消息丢失或查找问题。
7. 常使用过的命令
rocketmq提供一系列控制台命令,用于管理员对topic,broker,nameserver等信息管理。
7. 1. 查看有哪些命令
sh mqadmin
7. 2. 查看具体命令的使用
sh mqadmin help 命令名称 例如: sh mqadmin help topicRoute
7. 3. 创建(修改)topic》》updateTopic
sh mqadmin updateTopic -n 192.168.100.11 -b 192.168.100.11:10911 -t subscribe
sh mqadmin updateTopic -n 192.168.100.11 -c cluster_test -t subscribe
其中必填项:-n(nameserver地址列表以及端口),-t(主题名称),-b(该topic所在的broker地址以及端口)和-c(该topic所在的集群名称)二选一填项。
7. 4. 删除topic》》deleteTopic
sh mqadmin deleteTopic -n 192.168.100.11:9876 -c cluster_test -t subscribe
其中必填项:-n(nameserver地址列表以及端口),-t(主题名称),-c(topic所在的cluster名称)。
7. 5. 查看Topic列表》》topicList
sh mqadmin topicList -n 192.168.100.11:9876
其中 必填项:-n(nameserver地址列表以及端口)。
7. 6. 查看topic路由信息》》topicRoute
sh mqadmin topicRoute -n 192.168.100.11:9876 -t subscribe
其中必填项:-n(nameserver地址列表以及端口),-t(主题名称)。主要查看所在broker地址以及名称等。
7. 7. 查看topic状态统计信息》》topicStatus
sh mqadmin topicStatus -n 192.168.100.11:9876 -t subscribe
其中必填项:-n(nameserver地址列表以及端口),-t(主题名称)。主要查看message的offset,最后更新时间等。
7. 8. 创建(修订)订阅组》》updateSubGroup
sh mqadmin updateSubGroup -n 192.168.100.11:9876 -b 192.168.100.11:10911 -g subscribeGroup
其中必填项:-n(nameserver地址列表以及端口),-g(订阅组名称),-b(该订阅组所在的broker地址以及端口)和-c(topic所在的 集群名称)二选一填项。其中可以选择-d(消费方式等)。
7. 9. 删除订阅组配置》》deleteSubGroup
sh mqadmin deleteSubGroup -n 192.168.100.11:9876 -b 192.168.100.11:10911 -g subscribeGroup
其中必填项:-n(nameserver地址列表以及端口),-g(订阅组名称),-b(该订阅组所在的broker地址以及端口)和-c(topic所在的集群名称)二选一填项。
7. 10. 查看broker统计信息》》brokerStatus
sh mqadmin brokerStatus -n 192.168.100.11:9876 -b 192.168.100.11:10911
其中必填项:-n(nameserver地址列表以及端口),-b(broker地址及端口)。
7. 11. 根据消息id查询消息》》queryMsgById
sh mqadmin queryMsgById -n 192.168.100.11:9876 -i 12345
其中必填项:-n(nameserver地址列表以及端口),-i(消息msgId)。查看所在topic,keys,queueId等信息。
7. 12. 根据消息key查询消息》》queryMsgByKey
sh mqadmin queryMsgByKey -n 192.168.100.11:9876 -t subscribe -k test
其中必填项:-n(nameserver地址列表以及端口),-t(主题名称),-k(消息关键msgKey)。查看meddageId,Qid,offset值。
7. 13. 根据offset查询消息》》queryMsgByOffset
sh mqadmin queryMsgByOffset -n 192.168.100.11:9876 -b 192.168.100.11:10911 -t activity -i 0 -o 0
其中必填项:-n(nameserver地址列表以及端口),-t(主题名称),-b(该订阅组所在的broker名称) ,-i(query队列id),-o(offset值)。
7. 14. 查询producer的网络连接》》producerConnection
sh mqadmin producerConnection -n 192.168.100.11:9876 -g bookChangeGroup -t book
其中必填项:-n(nameserver地址列表以及端口),-t(主题名称),-g(生产者所属组名)。查询当前属于group的生产者到topic=book的网络连接。
7. 15. 查询consumer的网络连接》》consumerConnection
sh mqadmin consumerConnection -n 192.168.100.11:9876 -g bookconsumeGroup
其中必填项:-n(nameser地址列表及端口),-g(消费者所属组名)。查询当前属于group(消费者组)的消费者的网络连接。
7. 16. 查看订阅组消费状态》》consumerProgress
sh mqadmin consumerProgress -n 192.168.100.11:9876 -g bookChangeGroup
其中必填项:-n(nameserver地址列表以及端口),-g(消费者所属组名)。展示消费组的订阅状态。
7. 17. 查看集群消息》》clusterList
sh mqadmin clusterList -n 192.168.100.11:9876
其中必填项:-n(nameserver地址列表以及端口)。查看当前集群名,broker名及地址等信息。
7. 18. 添加(更新)KV配置信息》》updateKvConfig
sh mqadmin updateKvConfig -n 192.168.100.11:9876 -s namestest -k testKey -v testVal
其中必填项:-n(nameserver地址列表以及端口),-s(Namespace值),-k(key值),-v(value值)。
7. 19. 删除KV配置信息》》deleteKvConfig
sh mqadmin deleteKvConfig -n 192.168.100.11:9876 -s namestest -k testKey
其中必填项:-n(nameserver地址列表以及端口),-s(Namespace值),-k(key值)。
备注:深入消息可靠性以及其中分布式事务原理参考http://www.jianshu.com/p/453c6e7ff81c

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值