RocketMQ中的零拷贝

零拷贝

什么是零拷贝?
所谓零拷贝就是避免数据在内核空间缓冲区和用户空间缓冲区之间的复制,避免CPU拷贝对CPU资源的消耗。

零拷贝的两种实现方式:

  • mmap + write方式
    优点:即使频繁调用,使用小块文件传输,效率也很高。
    缺点:不能很好的利用DMA方式,会比sendfile多消耗 CPU,内存安全性控制复杂,需要避免JVM Crash问题。
  • sendfile方式

RocketMQ的存储设计

消息存储结构

RocketMQ消息存储默认路径:${user.home}\store\

消息存储结构包括:

  • commitlog 消息存储目录
  • config 运行期间的配置信息
  • consumequeue 消息消费队列存储目录
  • index 消息索引文件存储目录
  • abort 如果存在abort文件,说明broker非正常关闭;该文件默认启动时创建,正常退出之前删除;
  • checkpoint 文件检测点,存储commitlog文件最后一次刷盘时间戳、consumequeue最后一次刷盘时间、index索引文件最后一次刷盘时间戳。

RocketMQ集群模式部署

RocketMQ部署主要有以下几种模式:

  • 单master模式(Local模式或单点模式)
  • 多master模式(无slave)
  • 多master多slave模式-异步复制模式
  • 多master多slave模式-同步双写模式

刷盘策略:同步刷盘/异步刷盘(指节点自身消息持久化是同步还是异步写入磁盘)
主从同步方式:同步双写/异步复制(指同一组主从节点之间数据的同步)

RocketMQ分布式事务解决方案

RocketMQ分布式事务解决方案

使用二阶段提交,半事务消息和事务回查来解决上下游数据的一致性。

事务消息发送

在一些对数据一致性有强需求的场景,可以使用RocketMQ事务消息来解决,从而保证上下游数据的一致性。

例如,A系统 --> RocketMQ --> B系统,如何保持A、B系统分布式事务的一致性?