RocketMQ零碎知识点

RocketMQ零碎知识点

1.事务消息如何保证

  • 基于两阶段提交和定时任务回查

2.事务消息执行流程

  • 1.应用程序完成本地事务后,同步调用MQ消息发送接口,发送状态为prepare的消息,发送成功后等待本地事务的执行情况。为两阶段提交的第一阶段
  • 2.同时MQ会将prepare消息备份其主题和消息队列,将消息存储在RMQ_SYS_TRANS_HALF_TOPIC的消息消费队列中,然后会开启一个定时任务,消费该消息队列的消息,并向应用程序发起消息事务状态回查,根据反馈的状态之下,同时设有回查次数,超过次数未获取到状态,默认回滚。此为定时任务回查
  • 3.根据本地事务的返回状态执行提交,回滚,然后结束事务。此为两阶段提交的第二阶段

3.消息的存储

  • Commitlog 存储所有主题的消息,顺序写入,通过文件名表示的偏移量来定位第一条消息
  • ConsumeQueue 相当于主题跟队列的索引,一个消费队列对应一个文件,异步将消息转发到该队列
  • IndexFile 加速消息的检索,主要存储消息Key和Offset的对应关系

4.过期文件删除机制

  • 非当前写文件在一定时间间隔内没有被再次更新,则认为是过期文件,可以直接删除。时间间隔默认72小时

5.消息存储最终一致性保证

  • 当Broker由于某个原因宕机,会导致存储的三个文件不一致
  • 若Broker上一次是异常退出,会在store目录下留下一个abort文件,这个abort文件是通过启动创建,正常退出时通过JVM钩子函数删除该文件,因此下一次启动时存在该文件,说明为异常退出,需要进行数据修复
上一篇:OSPF实验及配置---超详细


下一篇:和字节跳动大佬的技术面谈,RocketMQ消息丢失场景及解决办法