这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
课程概要
- 消息队列的前世今生
- 消息队列-Kafka
- 消息队列-BMQ
- 消息队列-RocketMQ
- 最佳实践
问题场景与解决方案
- 系统崩溃
- 服务处理能力有限
- 链路耗时长尾
- 日志如何处理
解耦
解耦后,消息队列在主存储服务崩溃后可以切换副存储
削峰
在服务处理能力有限的情况下,通过削峰来限制出口量,达到限流的效果
异步
由于单链路下耗时太长了,为了减少耗时,使用异步方案可以将几件事情分开单独处理
日志处理
消息队列定义
消息队列(MQ),指保存消息的一个容器,本质是个队列,但是这个队列需要支持 高并发,高吞吐,且高可用.
业界消息队列对比
消息队列-Kafka
Kafka的特性
- 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒
- 可扩展性:kafka集群支持热扩展
- 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
- 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
- 高并发:支持数千个客户端同时读写
基本概念
- Topic: 逻辑队列,不同 Topic 可以建立不同的 Topic
- Cluster: 物理集群,每个集群中可以建立多个不同的 Topic
- Producer: 生产者,负责将业务消息发送到 Topic 中
- Consumer: 消费者,负责消费 Topic 中的消息
- ConsumerGroup: 消费者组,不同组 Consumer 消费进度互不干涉
帮助提高Kafka提高吞吐或稳定性的功能:
- Producer:批量发送,数据压缩
- Broker:顺序写,消息索引,零拷贝
- Consumer:Rebalance