这是我参与「第五届青训营 」笔记创作活动的第十五天
消息队列
消息队列,是指保存消息的一个容器,本质是个队列。但这个队列需要支持高吞吐、高并发、并且高可用
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架构
运维操作对比
在重启、替换、扩容、缩容操作上BMQ的效率比Kafka要高很多,均为秒级操作。
Broker-Partition状态机
保证对于任意分片在同一个时刻只能在一个Broker上存活
多机房部署
泳道消息
解决主干泳道流量隔离问题及泳道资源重复创建问题
Databus
直接使用原生SDK问题
- 客户端配置较为复杂
- 不支持动态配置,更改配置需要停掉服务
- 对于latency不是很敏感的业务,batch效果不佳
RocketMQ
使用场景
例如,针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等,同时也会涉及许多业务峰值时刻,如秒杀活动、周年庆、定期特惠等
RocketMQ比Kafka多了标签和生产者集群的概念
高级特性
- 事务场景
- 延迟发送
- 消费重试和死信队列