围炉网

一行代码,一篇日志,一个梦想,一个世界

架构师系列——RocketMQ知识点集锦

  • RocketMQ如何做到顺序消费?

    • 对于指定的一个 Topic,所有消息按照严格的先入先出(FIFO)的顺序进行发布和消费

    • 同一个queue,存储在里面的message 是按照先进先出的原则

    • 这个时候思路就来了,好比有orderId=1的3条消息,分别是 订单生产、订单付款、订单完成。只要保证它们放到同一个Queue那就保证消费者先进先出了。

    • 那么全局消息呢?把所有消息都放在一个Queue里,Rocker采用的是分段锁,它不是锁整个Broker而是锁里面的单个Queue,因为只要锁单个Queue就可以保证局部顺序消费了。

  • RocketMQ 集群部署模式

    • 单 master 模式

      • 也就是只有一个 master 节点,称不上是集群,一旦这个 master 节点宕机,那么整个服务就不可用,适合个人学习使用。

    • 多 master 模式

      • 多个 master 节点组成集群,单个 master 节点宕机或者重启对应用没有影响。

      • 优点:所有模式中性能最高

      • 缺点:单个 master 节点宕机期间,未被消费的消息在节点恢复之前不可用,消息的实时性就受到影响。

      • 注意:使用同步刷盘可以保证消息不丢失,同时 Topic 相对应的 queue 应该分布在集群中各个节点,而不是只在某各节点上,否则,该节点宕机会对订阅该 topic 的应用造成影响。

    • 多 master 多 slave 异步复制模式

      • 在多 master 模式的基础上,每个 master 节点都有至少一个对应的 slave。master

      • 节点可读可写,但是 slave 只能读不能写,类似于 mysql 的主备模式。

      • 优点: 在 master 宕机时,消费者可以从 slave 读取消息,消息的实时性不会受影响,性能几乎和多 master 一样。

      • 缺点:使用异步复制的同步方式有可能会有消息丢失的问题

    • 多 master 多 slave 同步双写模式

      • 同多 master 多 slave 异步复制模式类似,区别在于 master 和 slave 之间的数据同步方式。

      • 优点:同步双写的同步模式能保证数据不丢失。

      • 缺点:发送单个消息 RT 会略长,性能相比异步复制低10%左右。

      • 刷盘策略:同步刷盘和异步刷盘(指的是节点自身数据是同步还是异步存储)

      • 同步方式:同步双写和异步复制(指的一组 master 和 slave 之间数据的同步)

      • 注意:要保证数据可靠,需采用同步刷盘和同步双写的方式,但性能会较其他方式低

  • 消费者使用Docker部署的特殊情况

    • RocketMQ 的 consumer 客户端都会生成 clientId 唯一标识,clientId 的生成规则是客户端IP+客户端进程号

    • Docker 容器部署如果网络模式使用 Host 模式,容器中的应用都会获取 Docker 网桥的默认IP

    • RocketMQ 的 consumer 端负载均衡是在客户端实现的,consumer 客户端会缓存对应的 Topic 消费队列,默认采用消息队列的平均分配算法,如果 clientId 相同那么所有的客户端都会分配到相同的队列,导致消费异常

  • 对于消息堆积的处理,要做好全面的检查。不能被瞬间大流量的消费入口而影响其他业务

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

沪ICP备15009335号-2