08 2021 档案
摘要:背景 博主最近在研究sofa-jraft的时候,看到jraft使用的protobuf,所以单独拎出来单独理解一下。 Protobuf语法 https://www.cnblogs.com/resentment/p/6539021.html 使用案例 1 添加proto文件 syntax="proto2
阅读全文
摘要:前言 最近博主在研究蚂蚁金服sofastack平台的sofa-jraft框架,其中涉及到选举部分的定时任务实现HashedWheelTimer,拿出来单独整理一下,其也是netty处理大量连接超时的心跳检测实现。 算法描述 关于时间轮算法,有点类似于HashMap。在new 一个HashedWhee
阅读全文
摘要:mqbroker if [ -z "$ROCKETMQ_HOME" ] ; then ## resolve links - $0 may be a link to maven's home PRG="$0" # 当前文件名 # need this for relative symlinks whil
阅读全文
摘要:数据结构 在commitlog中维护了一组MappedFile,属性为MappedFileQueue,具体看一下里面包含哪些字段 public class MappedFileQueue { private static final Logger log = LoggerFactory.getLog
阅读全文
摘要:简述 rocketmq发送的消息有以下类型,普通并发消息,分区有序消息,全局有序消息(topic分区数=1),延迟消息和事务消息。 发送方式分为同步发送,异步发送,指定队列发送,单向发送,批量发送。 DefaultMQProducerImpl#start public void start(fina
阅读全文
摘要:前面讲解到对于consumequeue的文件恢复和过期文件删除,和flush的过程这边就不再重点阐述,实际上consumequeue中的存储单元是一个20个字节的数据,前8个字节存储消息在commitlog上的物理点位,接着是4字节的消息size,最后是8字节的tag的hash值。可以看做消息在co
阅读全文
摘要:broker过期文件删除机制 RocketMQ会每隔10秒执行文件清理任务 this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() { @Override public void run() { DefaultMessageS
阅读全文
摘要:RocketMQ的消费模式分为集群消费和广播消费 启动机制分两种:pull模式和push模式 PULL模式 pull模式相对简单,获取到messaqueue,用户自行遍历,获取的到当前queue的消息进行处理,最后自行管理点位或者上报给broker /* * Licensed to the Apac
阅读全文
摘要:RocketMQ事务支持 整体流程 实现细节 下面的代码是producer完成1-4的步骤: public TransactionSendResult sendMessageInTransaction(final Message msg, final LocalTransactionExecuter
阅读全文
摘要:RocketMQ-broker存储机制-Index 数据结构 在indexFileHeader中存放着开始和结束的时间戳,开始和结束的物理点位,以及索引的个数。 索引文件加载 public boolean load(final boolean lastExitOK) { File dir = new
阅读全文
摘要:RocketMQ-broker存储机制-HA数据同步 HA机制解决读写分离模式下slave与master的数据同步问题,在master broker高负载的情况下,实现slave broker的数据订阅。HA的主要实现逻辑在HaServer类中,入口在putMessage的handleHA()方法初
阅读全文
摘要:RocketMQ-存储机制-刷盘机制 在理解RocketMQ刷盘实现之前,先理解一下上图展示的刷盘的2种实现的: 1)直接通过内存映射文件,通过flush刷新到磁盘 2)当异步刷盘且启用了对外内存池的时候,先write到writeBuffer,然后commit到Filechannel,最后flush
阅读全文
摘要:broker的可用性策略-快速失败机制 具体实现在BrokerFastFailure,会执行一个定时任务扫描写消息任务的队列,当发现ospagecache繁忙的时候,就取出一个请求任务快速返回,直到OSPageCache不在繁忙。 然后会遍历任务队列,如果发现某一个请求任务已经超时,那么也会立即返回
阅读全文
摘要:RocketMQ-broker状态管理及数据统计 在RocketMQ中,状态管理有BrokerStatsManager,ConsumerStatsManager,FilterServerStatsManager,其实现的方式都是一样的。 这边就拿BrokerStatsManager做介绍 一个Sta
阅读全文
摘要:什么是ACL? 简称访问控制列表,涉及到用户,资源,权限,角色。 用户 用户是访问控制的基础要素,也不难理解,RocketMQ ACL必然也会引入用户的概念,即支持用户名、密码。 资源 资源,需要保护的对象,在RocketMQ中,消息发送涉及的Topic、消息消费涉及的消费组,应该进行保护,故可以抽
阅读全文
摘要:Java8新特性CompletableFuture 详细API示例 参考:https://www.cnblogs.com/laomumu/p/12386971.html 示例: flushOKFuture3 是处理了flushOKFuture1 和 flushOKFuture2的结果,当 flush
阅读全文
摘要:RocketMQ-broker存储机制 该篇主要讲解rocketmq-store模块,了解其存储机制,文件读写原理。 为何Rocketmq存储写文件这么快呢? 简单来说,总结两点: 1)pagecache+虚拟内存 2)零拷贝+java文件映射 Broker存储目录结构 commitlog 文件名是
阅读全文
摘要:前言 在看完rocketmq通信层的源码之后,再来看namesrv的代码相对容易些,rocketmq的服务注册和发现并没有采用zookeeper这样的开源分布式协作框架,而是自研了一套服务注册和发现的服务,相对来说比较简单,多个namesrv之间不相互通信,也不是主从关系。 namesrv主要有两个
阅读全文