消息队列介绍
1. 消息队列原理
- 一个保存消息的容器,本质是一个队列,支持高吞吐,高并发,并且高可用
2. Kafka
1. 如何使用Kafka
- 创建集群
- 新增Topic
- 编写生产者逻辑
- 编写消费者逻辑
2. 基本概念
- Topic:逻辑队列,不同Topic可以建立不同的Topic
- Cluster:物理集群,每个集群可以建立多个不同的Topic
- Producer:生产者,负责将业务信息发送到Topic中
- Consumer:消费者,负责消费Topic中的信息
- ConsumerGroup:消费者组,不同组的Consumer消费进度互不干涉
1. Offset
- 消息在partition内的相对位置信息,在partition内严格递增【消息在partition中的位置ID】
2. Replica
-
每一个partition有多个Replica(副本),Leader Replica将会从ISR(In-Sync Replica)取出
如果Leader副本出现宕机,可以在ISR中重新选出一个Leader -> 高可用
3. Kafka架构
- Broker:缓存代理,Kafka集群中的一台或多台服务器统称broker.(用于数据存储)
4. Producer
- 可以通过将消息进行批量发送(Batch)减少IO次数,加强发送能力
- 可以通过压缩,减少消息大小(解决因消息过大导致带宽不足无法发送)
5. Broker
将Log(日志)进行切分成LogSegment
- 顺序写,消息索引,零拷贝 -> 提高吞吐量或者稳定性
6. Consumer
- Rebalance
3. BMQ
-
泳道
实质上是两个topic
解决主干泳道流量的隔离问题以及泳道资源重复创建的问题
-
Databus
- 简化消息队列客户端复杂度
- 解耦业务和Topic
- 缓解集群压力,提供吞吐
4. RocketMQ
- 高级特性
- 事务
- 延迟消息
- 处理失败(消费重试【未超过重试次数的消息放在RetryTopic,Consumer可以获取到再进行重试】和死信队列【超过重试次数之后的消息存放在ScheduleTopic,无法进行重试但是人工可以介入查看失败信息】)