消息中间件

基础组成

  • NameServer:无状态模式、broker向发心跳顺便带上所有的Topic信息、早期是zk后来改了
  • Broker:中转消息,消息持久化、底层通讯基于Netty
  • Producer:同步、异步、单向
  • Consumer:pull、push

    集群模式

  • 多master

  • 多master多slave异步复制
  • 多master多slave双写

    消费保证

  • 发送成功后返回consume_success

  • 回溯消费

    高可用

  • 集群:NameServer集群、Broker主从 双主 双从、Consumer自动切换、Producer链接两个Broker

  • 刷盘:同步超时会返回错误、异步不返回
  • 消息的主从复制:同步复制、异步复制
  • 主从同步、异步刷盘

    顺序消息

  • Hash取模:MessageQueueSelector队列选择机制,消息发送 消息顺序由消费者保证,消费者是多线程

    消息去重

  • 幂等

  • 去重:消息表主键冲突

    分布式事务

  • 最大努力:消息表、不断轮询、人工干预

  • 半消息:发送半消息,发送成功,本地事务,觉得是否提交还是回滚,服务端没收到回查,检查本地事务,根据本地事务决定,提交
  • 2/3pc
  • 最终一致:预发,持久化,返回状态,发送处理结果,判断是否干掉持久化的发送

    调用链路

  • Producer和NameServer节点建立一个长连接

  • 定期从NameServer获取Topic信息
  • 并向Broker Master建立链接,发送心跳
  • 发送消息给Broker Master
  • Consumer从Master和Slave一起订阅消息

    消息重试

  • 顺序消息重试:不断重试16次 4小时46分钟 可以修改尝试次数,对一个消费者设置 组内都会设置,可以获取消息重试次数

  • 无序消息重试

    死信队列

  • 不再被正常消费

  • 保存3天
  • 面向消费者组
  • 控制台 重发 重写消费者 单独消费

    事务消息

消息丢失

消息积压

  • 决定是否丢弃
  • 判断吞吐量
  • 停止消费 加机器 加topic