消息中间件
基础组成
- NameServer:无状态模式、broker向发心跳顺便带上所有的Topic信息、早期是zk后来改了
- Broker:中转消息,消息持久化、底层通讯基于Netty
- Producer:同步、异步、单向
-
集群模式
多master
- 多master多slave异步复制
-
消费保证
发送成功后返回consume_success
-
高可用
集群:NameServer集群、Broker主从 双主 双从、Consumer自动切换、Producer链接两个Broker
- 刷盘:同步超时会返回错误、异步不返回
- 消息的主从复制:同步复制、异步复制
-
顺序消息
Hash取模:MessageQueueSelector队列选择机制,消息发送 消息顺序由消费者保证,消费者是多线程
消息去重
幂等
-
分布式事务
最大努力:消息表、不断轮询、人工干预
- 半消息:发送半消息,发送成功,本地事务,觉得是否提交还是回滚,服务端没收到回查,检查本地事务,根据本地事务决定,提交
- 2/3pc
最终一致:预发,持久化,返回状态,发送处理结果,判断是否干掉持久化的发送
调用链路
Producer和NameServer节点建立一个长连接
- 定期从NameServer获取Topic信息
- 并向Broker Master建立链接,发送心跳
- 发送消息给Broker Master
-
消息重试
顺序消息重试:不断重试16次 4小时46分钟 可以修改尝试次数,对一个消费者设置 组内都会设置,可以获取消息重试次数
-
死信队列
不再被正常消费
- 保存3天
- 面向消费者组
- 控制台 重发 重写消费者 单独消费
事务消息
消息丢失
消息积压
- 决定是否丢弃
- 判断吞吐量
- 停止消费 加机器 加topic
