消息队列 | 青训营笔记

82 阅读2分钟

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

消息队列

消息队列,是指保存消息的一个容器,本质是个队列。但这个队列需要支持高吞吐、高并发、并且高可用

Kafka

使用场景

  • 日志信息
  • Metrics数据
  • 用户行为

如何使用

  • 创建集群
  • 新增Topic
  • 编写生产者逻辑
  • 编写消费者逻辑

基本概念

  • Topic: 逻辑队列,不同 Topic 可以建立不同的 Topic
  • Cluster物理集群,每个集群中可以建立多个不同的 Topic
  • Producer: 生产者,负责将业务消息发送到 Topic 中
  • Consumer:消费者,负责消费 Topic 中的消息
  • ConsumerGroup: 消费者组,不同组 Consumer 消费进度互不干涉
  • Offest:消息在 partition 内的相对位置信息,可以理解为唯一ID,在 partition 内部严格递增。

提高吞吐和稳定性

  • Producer:批量发送、数据压缩
  • Broker:顺序写,消息索引,零拷贝
  • Consumer:Rebalance

BMQ

为解决Kafka存在的问题而生 兼容Kafka协议,存算分离,云原生消息队列

BMQ架构

image.png

运维操作对比

在重启、替换、扩容、缩容操作上BMQ的效率比Kafka要高很多,均为秒级操作。

Broker-Partition状态机

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

多机房部署

泳道消息

解决主干泳道流量隔离问题及泳道资源重复创建问题

Databus

直接使用原生SDK问题

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

RocketMQ

使用场景

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

RocketMQ比Kafka多了标签和生产者集群的概念

高级特性

  • 事务场景
  • 延迟发送
  • 消费重试和死信队列