消息队列

110 阅读2分钟

发展历程

image.png

kafka

使用场景

  • 搜索服务
  • 直播服务
  • 订单服务
  • 支付服务
  • 用户行为服务
  • 日志信息存储

kafka的使用

  1. 创建集群
  2. 新增Topic
  3. 编写生产者逻辑
  4. 编写消费者逻辑

kafka基本概念

Topic:逻辑队列,不同Topic 可以建立不同的 Topic

Cluster:物理集群,每个集群中可以建立多个不同的 Topic

Producer:生产者,负责将业务消息发送到 Topic 中

Consumer:消费者,负责消费 Topic 中的消息

ConsumerGroup: 消费者组,不同组 Consumer 消费进度互不干涉

Offset:消息在 partition 内的相对位置信息,可以理解为唯一1D,在partition 内部严格递增。

Replica:每个分片有多个 Replica

image.png

消息队列零拷贝问题

image.png

Consumer和Partition的分配

  • 手动分配
    • 不能自动容灾
  • 自动分配
    • 选取一个broker来作为Coordinator,作为哨兵(Rebalance)
    • 每个Consumer每隔一段时间都会给Coordinator发送一段心跳包

Kafka的缺点

  1. 节点变化所需要的代价比较大
  2. 负载不均衡
  3. 没有自己的缓存,完全依赖 Page Cache
  4. Controller 和 Coordinator和Broker 在同一进程中,大量10会造成其性能下降

BMQ

简介

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

与Kafka对比

image.png

文件结构

image.png

Partition状态机

保证对于任意分片在同一时刻只能在一个 Broker上存活

数据写入流程

image.png

数据读取流程

image.png

泳道消息

根据泳道过滤消息,避免了人力和资源的浪费。

image.png

DataBus

直接使用原生SDK会有什么问题?

  1. 客户端配置较为复杂
  2. 不支持动态配置,更改配置需要停掉服务
  3. 对于latency不是很敏感的业务,batch效果不佳

DataBus作用

  1. 简化消息队列复杂度
  2. 节藕业务与topic
  3. 缓解集群压力

Mirror(跨Region问题)

image.png

RocketMQ

使用场景

实时场景:

例如,针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等;同时,也会涉及许多业务峰值时刻,如秒杀活动、周年庆、定期特惠等

基本概念

image.png

基本架构

image.png

存储模型

image.png

高级特效

事物场景

保证事物的最终一致性

RocketMQ采用了两次提交机制 image.png

延迟发送

image.png