消息队列
背景
- 系统崩溃
- 服务能力有限
- 链路耗时长尾
- 发起订单(5ms)
- 库存记录-1 (100ms)
- 订单记录+1(100ms)
- 通知商家 (30s)
- 日志存储(日志如何处理)
解决方案
-
解耦 :
-
削峰
-
异步:并列执行
-
日志处理
消息队列
什么是消息队列
消息队列(Message Queue),保存消息的一个容器,本质是一个队列,但这个队列需要支持高吞吐、高并发、高可用
消息队列对比:
使用场景
- 搜索服务
- 直播服务
- 订单服务
- 支付服务
- 记录日志信息
- Metrics数据
- 用户行为
Kafka
如何使用
- 创建集群
- 新增Topic,设置分支数量
- 编写生产者逻辑
- 编写消费者逻辑
基本概念
- Topic: 逻辑队列,不同Topic可以建立不同的Topic
- Cluster: 物理集群,每个集群中可以建立多个不同的Topic,一个集群可以存储多个消息的逻辑队列,相当于一个邮局
- Producer: 生产者,负责将业务消息发送到Topic中,生产信息的一方
- Consumer: 消费者,负责消费Topic中的消息,接收信息的一方
- ConsumerGroup: 消费者组,不同组Consumer消费进度互不干涉,也就是说,不同消费者消费信息的速度是不一样的
概括来说,消息队列可以比喻为一个信箱, 其中的集群(Cluster)可以比喻为一个邮局,专门用来存放多个消息队列的(一个集群放一个队列就太浪费了), 生产者相当于寄邮件的人(生产消息), 消费者则相当于收邮件的人
Consumer消息接收端
如何解决分配问题
- 手动分配:手动指定哪一个Consumer消费哪一个Partition,由业务来决定
- 缺点: 容灾能力差
- 有点: 比较快
- 通过
Coordinator协调分配,即自动分配Partition。