消息队列-中 | 青训营笔记

55 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

BMQ

  • 兼容Kafka协议,存算分离,云原生消息队列

  • image.png

  • image.png

  • 负载均衡

    • 随机选择一定数量的DataNode
    • image.png
  • Broker-Partition状态机

    • image.png
  • Broker-写文件流程

    • image.png
  • Broker-写文件 Failover

    • 替换,找到新的可用节点
  • Proxy

    • image.png
  • 多机房部署

    • image.png
  • BMQ高级特性

    • image.png

    • 泳道消息

      • 解决主干泳道流量隔离问题以及泳道资源重复创建问题。
      • image.png
    • Databus

      • 简化消息队列客户端复杂度
      • 解耦业务与Topic
      • 缓解集群压力,提高吞吐
      • image.png
    • Mirror

      • 跨Region读写
      • image.png
    • Index

      • 数据的查询
        • 原生只支持 offset 和 时间戳
      • image.png
      • 直接在BMQ中将数据结构化,配置索引DDL,异步构建索引后,通过Index Query 服务读出数据。
    • Parquet

      • image.png
      • image.png
      • 直接在BMQ中将数据结构化,通过 Parquet Engine,可以使用不同的方式构建Parquet格式文件。

RocketMQ

  • 例如,针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等;同时,也会涉及许多业务峰值时刻,如秒杀活动、周年庆、定期特惠等
  • image.png
  • image.png
    • Kafka中的Partition概念在这里叫做ConsumerQueue
  • image.png
    • 整台机器都是Master
    • NameServer为集群提供轻量级服务发现和路由
  • image.png
    • 对于一个Broker来说所有的消息的会append到一个CommitLog上面,然后按照不同的Queue,重新Dispatch到不同的Consumer中,这样Consumer就可以按照Queue进行拉取消费,但需要注意的是,这里的ConsumerQueue所存储的并不是真实的数据,真实的数据其实只存在CommitLog中,这里存的仅仅是这个Queue所有消息在CommitLog上面的位置,相当于是这个Queue的一个密集索引
  • 高级特性
    • 事务场景
      • image.png
      • image.png
    • 延迟发送
      • image.png
    • 消费重试和死信队列
      • image.png