消息队列
消息队列=保存消息的容器,本质是一个支持高吞吐,高并发,高可用的队列。
1. 前世今生
发展历程简要回顾
业界常用的消息队列
Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下表现出色
BMQ:存算分离
RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在实时场景中运用较广
2. Kafka
使用步骤
创建集群->新增Topic->编写生产者逻辑->编写消费者逻辑
基本概念
- Topic:逻辑队列,一个业务的所有数据均保存在此topic中
- Cluster:物理集群,每个集群可建立多个Topic
- Producer:将业务消息发送给Topic
- Consumer:消息Topic中的消息
- ConsumerGroup:不同组的Consumer消费进度互不干扰
特性
1、高吞吐
2、支持数据批量发送和拉取
3、零拷贝,减少IO操作步骤
缺点
1、运维成本高
2、对于负载不均衡的场景,解决方案复杂
3、没有自己的缓存,完全依赖page cache
4、controller和coordinator和broker在同一进程中,大量IO会造成性能下降
3. BMQ
BMQ简介
兼容Kafka协议,存算分离,云原生消息队列
BMQ架构图
BMQ中的生产者、消费者与Kafka等同,而与Broker之间加入了Proxy;底层新增分布式文件存储系统;生产者生产消息后,proxy转交给broker写入;消费者读取消息时,proxy转发给分布式存储系统读取。
对于重启、替换、扩容、缩容,Kafka至少需要分钟级别,BMQ实现秒级
4. RocketMQ
主要应用场景
针对电商业务线,业务涉及注册、订单、库存、物流...... 也涉及业务错峰时刻,秒杀活动、周年庆......