rocketMQ介绍

作用

  • 流量削峰
  • 系统解耦

功能

  • 普通消息
    • 同步消息
    • 异步消息
  • 事务消息
  • 顺序消息
  • 延迟消息
  • 订阅与发布
  • 消息过滤
  • 消息消费重试
  • 死信队列
  • ......

架构设计

rocketMQ介绍_第1张图片

  • 1个broker是1台实例
  • 每个broker都有从节点,便于做故障转移
  • 每个broker对应一个文件,存储数据?还是会根据topic分开放置?
  • 每个broker都有topic对应的queue(topic是虚拟的,代表一组queue,消息到达后会根据规则存储到某个broker的queue中)
  • broker模型设计的优点:
    • 数据均匀分布
    • 同一个group多个消费者连接不同的broker的queue,能消费同一个topic下的数据,提高了消费端的能力
  •  nameServer 相当于eureka,nacos,zookeeper 做注册中心
  • nameServer多节点部署提高可用性

重要属性介绍

topic

        逻辑上消息存储的位置,一个topic表示一组queue。topic对外概念

queue

        实际上消息存储的位置。queue是为了提高性,做的存储设计

        优点:容灾,防止数据倾斜

tag

        消息过滤使用,比如同一个topic下的消息,在同一个queue队列中,有订单类型、商品类型2种消息,依据tag区分,mq推送前会根据consumer订阅的tag过滤

      优点:避免了无效的数据传输(如:订单consumer不用接收同一个queue种的商品消息)

  ps:阿里云rocketMQ会根据topic数量收费(4.0版本),所以可能会有2种业务共用topic情景

group

        应用所属的组,同一组应用,消息只会发送到一个应用

        消费消息时,同一组应用,同一个queue,只会有1个消费者连接(保证消息不会发送到同组下的多个消费者)

问题

为什么不设计成1个broker,1个从节点,然后通过故障转移做高可用?

  1. 1个broker发生问题产生的影响更大(3台broker坏1个,相当于只坏了1/3)

  2. 1个broker节点负载能力是一个问题

  3. 如果没有queue,数据根据topic值,通过hash存到同一个broker,会导致数据倾斜

与kafka的对比

rocketMQ kafka
高可用 支持10w/s 100w/s
可用性 product支持同步消息+异步消息 异步消息 rocketMQ更加可靠
扩展性 支持5W级的queue(一个topic在一个broker就有1个queue) queue到达64后,性能下降
功能全面性 支持普通消息、顺序消息、事务消息、延迟消息等

仅支持普通消息

支持幂等性过滤重复消息

适用场景 业务 日志

你可能感兴趣的:(rocketMQ,java)