ConcurrentMap<Integer, Long>>offsetTable,offsetTable的数据结构为ConcurrentMap,是一个线程安全的容器,key的形式为topic@group(每个topic下不同消费组的消费进度),value也是一个ConcurrentMap,key为queueId,value为消费位移(这里不是offset而是位移)。
消息的来源都是 Broker,一般来说消息的发送(Producer)只会发到主节点,然后Broker会进行消息的同步,同步到从节点,作为消费者(Consumer)也只会优先从Master节点,获取消息,进行消费,除非主节点不可用或者非常繁忙,才会从从节点进行消费,Broker除了消息的中转,还负责消息的持久化以及主从数据之间的复制...
如下图所示,producer发送消息到broker之后,会将消息具体内容持久化到commitLog文件中,再分发到topic下的消费队列consume Queue,消费者提交消费请求时,broker从该consumer负责的消费队列中根据请求参数起始offset获取待消费的消息索引信息,再从commitLog中获取具体的消息内容返回给consumer。在这个过程中,consumer提交的offset为本...
producer先从ZooKeeper的 "/brokers/…/state" 节点找到该partition的leader producer将消息发送给该leader leader将消息写入本地log followers从leader pull消息,写入本地log后向leader发送ACK leader收到所有ISR中的replica的ACK后,增加HW(high watermark,最后commit的offset)并向producer发送ACK HW与LEO HW俗称高水位 ,...
1、DefaultMQProducer 设置Producer的GroupName。 设置InstanceName,当一个JVM需要启动多个Producer的时候,通过设置不同的InstanceName来区分。 设置发送失败重试次数。 设置NameServer地址 组装消息并发送 异步发送返回状态: FLUSH_DISK_TIMEOUT:表示没有在规定时间内完成刷盘,该错误在Broker的刷盘策略被设置为SYNC_FLUSH。
发送时,Producer将不同topic的所有消息都会顺序写入Commit Log中,Broker端的后台服务线程—ReputMessageService不停地分发请求并异步构建ConsumeQueue(逻辑消费队列)和IndexFile(索引文件)数据,不停的轮询,将当前的consumeQueue中的offSet和commitLog中的offSet进行对比,将多出来的offSet进行解析,然后put到consumeQueue中的Maped...
Broker在启动的时候会去向NameServer注册并且定时发送心跳,Producer在启动的时候会到NameServer上去拉取Topic所属的Broker具体地址,然后向具体的Broker发送消息。具体如下图: 2.RocketMQ的消息领域模型 主要分为Message、Topic、Queue、Offset以及Group这几部分。
每次消息消费成功后,这个offset在会先更新到内存,而后定时持久化。在集群消费模式下,会同步持久化到broker,而在广播模式下,则会持久化到本地文件。 2 Producer 初始化流程&流程图&相关类关系说明 在发送消息之前我们先初始化相关类,这里主要用到的类是DefaultMQProducer ...
Group:分组,一个组可以订阅多个Topic。 分为ProducerGroup,ConsumerGroup,代表某一类的生产者和消费者,一般来说同一个服务可以作为Group,同一个Group一般来说发送和消费的消息都是一样的 Offset:在RocketMQ中,所有消息队列都是持久化,长度无限的数据结构,所谓长度无限是指队列中的每个存储单元都是定长,访问其中的存储...
何为offset producer发送消息到broker,Rocketmq会将消息的内容持久化到commitLog文件中,再分发到topic下的消费队列consume Queue,消费者提交消费请求时,broker从该consumer负责的消费队列中根据请求参数传入的起始offset来获取需要消费的消息索引信息,再从commitLog中获取具体的消息内容返回给consumer。消费成功之后,消费者提交of...