RocketMQ是什么?
Apache RocketMQ 是阿里开源的一款高性能、高吞吐量的消息队列,前身是MetaQ。
应用场景
以下是我整理的一些业务场景。
- 限流:秒杀系统,其他内部生产系统(如批量升级硬件固件版本,批量变更MySQL线上数据结构等),为系统提供消息堆积的能力
- 系统解耦:如把注册和发邮件拆为2个系统,注册后通过发送RocketMQ消息让邮件系统消费执行,加强系统扩展性
- 数据同步:如mysql binlog同步
- 延迟处理:如订单场景,需要自动删除用户30分钟内还没处理的数据,提供延迟队列,但只支持以下的时间设定,不过基本能满足大部分业务的需求。
1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h - 实时流计算处理(flink)
RocketMQ组件
- NameServer:服务发现
- Producer:生产者
- Broker:中转器
- Consumer:消费者
主要工作流程:
- NameServer启动
- Broker启动注册到NameServer,NameServer存储了topic对应的队列信息,队列信息里面包含Broker机器关联(对应的源码对象名是QueueData),也就是NameServer维护了topic和Broker机器的映射关系
- Producer,Consumer从NameServer拉取Topic路由信息
- Producer发送信息到指定topic,会判断是否存在该topic
- Consumer拉取监听的topic信息进行消费