一、RocketMQ
1.1 MQ的应用场景
- 任务异步处理。将不需要同步处理的并且消耗长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。
- 应用程序解耦
- 日志收集
交互流程:
- 采集系统从log日志文件采集数据,发送至消息队列
- 各日志需求服务从消息队列接收消息进行日志处理
1.2 RocketMQ介绍
是阿里开源的一款非常优秀的中间件产品,现已成为apache基金会的顶级项目。
1.3消息队列技术选型对比
消息队列有哪些
activeMq、RabbitMQ,ZeroMQ、Kafka、MetaMQ、Redis
RabbitMQ优点:
- 支持AMQP协议
- 基于erlang语言开发,高并发性能较好
- 工作模式较为灵活
- 支持延迟消息
- 提供较为友好的后台管理页面
- 单级部署,1-2WTPS
RabbitMQ缺点:
- 不支持水平扩容
- 不支持事务
- 消息吞吐量三者最差
- 当产生消息堆积,性能下降明显
- 消息重发机制需要手动设置
- 不支持消息重复消费
RocketMQ优点:
- 高可用,高吞吐量,海量消息堆积,低延迟性能上,都表现出色
- api与架构设计更加贴切业务场景
- 支持顺序消息
- 支持事务消息
- 支持消息过滤
- 支持重复消费
- 支持延迟消息
- 支持消息跟踪
- 天然支持集群、负载均衡
- 支持指定次数和时间间隔的失败消息重发
- 单机部署,5-10WTPS
RocketMQ缺点:
- 生态圈相比较kafka有所不如
- 消息吞吐量与消息堆积能力也不如kafka
- 不支持主从自动切换
- 只支持java
Kafka优点:
- 高可用,高吞吐量,低延迟性能上,表现出色
- 使用人数多,技术生态圈完善
- 支持顺序消息
- 支持多种客户端
- 支持重复消费
Kafka缺点:
- 依赖分区,消费者数量受限于分区数
- 单级消息过多时,性能下降明显
- 不支持事务消息
- 不支持指定次数和时间间隔的失败消息重发
1.4Rocket三种消息发送方式
- 同步消息
producer向broker发送消息,执行API时同步等待,直到broker服务器返回发送结果。
2.异步消息
producer向broker发送消息时指定消息发送成功及发送异常的回调方法,调用API后立即返回,producer发送消息线程不阻塞,消息发送成功或失败的回调任务在一个新的线程中执行
3.单向消息
producer向broker发送消息,执行API时直接返回,不等待broker服务器的结果
1.5Rocket消息结构
RocketMQ的消息包括基础属性和扩展性两部分:
- 基础属性
- topic:主题相当于消息的一级分类,具有相同的topic的消息将发送至该topic下的消息队列中,比如说一个电商系统可以分为商品消息、订单消息、物流消息等,就可以在broker中创建商品主题、订单主题等,所有商品的消息发送至该主题下的消息队列中。
- 消息体:即消息的内容,可以是字符串、对象等类型(可系列化)。消息的最大长度是4M。
- 消息Flag:消息的一个标记,RockerMQ不处理,留给业务系统使用。
2.扩展属性
- tag:相当于消息的二级分类,用于消费消息时进行过滤,可为空。
- keys:message索引键,在运维中可以根据这些key快速检索到消息,可为空。
- waitStoreMsgOK:消息发送时是否等消息存储完成后再返回。
1.6消息中间件对比
Kafka |
RocketMQ |