RocketMq是阿里出品(基于MetaQ)的开源中间件,已捐赠给Apache基金会并成为Apache的顶级项目。基于java语言实现,十万级数据吞吐量,ms级处理速度,分布式架构,功能强大,扩展性强。
Springboot 集成 RocketMq(入门)-CSDN博客
1.定义
主题是 RocketMQ 中消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息。 主题的作用主要如下:
1.1 定义数据的分类隔离
RocketMQ 建议将不同业务类型的数据拆分到不同的主题中管理,通过主题实现存储的隔离性和订阅隔离性。
1.2 定义数据的身份和权限
RocketMQ 的消息本身是匿名无身份的,同一分类的消息使用相同的主题来做身份识别和权限关理。
2.模型关系
RocketMQ 默认提供消息可靠存储机制,所有发送成功的消息都被持久化存储到队列中,配合生产者和消费者客户端的调用可实现至少投递一次的可靠性语义。
RocketMQ 队列模型和Kafka的分区(Partition)模型类似。在 RocketMQ 消息收发模型中,队列属于主题的一部分,虽然所有的消息资源以主题粒度管理,但实际的操作实现是面向队列。
RocketMQ 中通过修改队列数量,以此实现横向的水平扩容和缩容。
3.内部属性
3.1 读写权限
定义:当前队列是否可以读写数据。
取值:由服务端定义,枚举值如下
6:读写状态,当前队列允许读取消息和写入消息。
4:只读状态,当前队列只允许读取消息,不允许写入消息。
2:只写状态,当前队列只允许写入消息,不允许读取消息。
0:不可读写状态,当前队列不允许读取消息和写入消息。
4.使用建议
4.1按照实际业务消耗设置队列数
RocketMQ 的队列数可在创建主题或变更主题时设置修改,队列数量的设置应遵循少用够用原则,避免随意增加队列数量。
主题内队列数过多可能对导致如下问题:
集群元数据膨胀
RocketMQ 会以队列粒度采集指标和监控数据,队列过多容易造成管控元数据膨胀。
客户端压力过大
RocketMQ 的消息读写都是针对队列进行操作,队列过多对应更多的轮询请求,增加系统负荷。
4.2 常见队列增加场景
4.2.1 实现物理节点负载均衡
RocketMQ 每个主题的多个队列可以分布在不同的服务节点上,在集群水平扩容增加节点后,为了保证集群流量的负载均衡,建议在新的服务节点上新增队列,或将旧的队列迁移到新的服务节点上。
4.2.2 实现顺序消息性能扩展
RocketMQ 中顺序消息的顺序性在队列内生效的,因此顺序消息的并发度会在一定程度上受队列数量的影响,因此建议仅在系统性能瓶颈时再增加队。