随笔分类 -  RocketMQ

摘要:Broker在启动的时候会注册定时任务,定时清理过期的数据,默认是每10s执行一次,分别清理CommitLog文件和ConsumeQueue文件: public class DefaultMessageStore implements MessageStore { // CommitLog清理类 p 阅读全文
posted @ 2023-10-23 09:05 shanml 阅读(516) 评论(0) 推荐(0) 编辑
摘要:在RocketMQ 5.0以前,有两种集群部署模式,分别为主从模式(Master-Slave模式)和Dledger模式。 主从模式 主从模式中分为Master和Slave两个角色,集群中可以有多个Master节点,一个Master节点可以有多个Slave节点。Master节点负责接收生产者发送的写入 阅读全文
posted @ 2023-10-16 09:26 shanml 阅读(1855) 评论(0) 推荐(1) 编辑
摘要:Pop模式消费和消息粒度负载均衡 在RocketMQ 5.0之前,消费有两种方式可以从Broker获取消息,分别为Pull模式和Push模式。 Pull模式:消费需要不断的从阻塞队列中获取数据,如果没有数据就等待,这个阻塞队列中的数据由消息拉取线程从Broker拉取消息之后加入的,所以Pull模式下 阅读全文
posted @ 2023-10-13 10:00 shanml 阅读(1098) 评论(0) 推荐(1) 编辑
摘要:为了向云原生演进,提高资源利用和弹性能力,RocketMQ在5.0进行了架构的调整与升级,先来看新特性之一,增加了Proxy层。 增加Proxy代理层 计算存储分离 计算存储分离是一种分层架构,将计算层与存储层分开。 计算层指的是一些消耗计算资源的功能模块比如协议解析、消费管理等,存储指的是数据存储 阅读全文
posted @ 2023-10-11 09:11 shanml 阅读(1683) 评论(2) 推荐(1) 编辑
摘要:CommitLog 生产者向Broker发送的消息,会以顺序写的方式,写入CommitLog文件,CommitLog文件的根目录由配置参数storePathRootDir决定,默认每一个CommitLog的文件大小为1G,如果文件写满会新建一个CommitLog文件,以该文件中第一条消息的偏移量为文 阅读全文
posted @ 2023-10-10 09:08 shanml 阅读(589) 评论(0) 推荐(0) 编辑
摘要:RocketMQ在开启Dledger时,使用DLedgerCommitLog,其他情况使用的是CommitLog来管理消息的存储。在Dledger模式下,消息写入时Leader节点还需要将消息转发给Follower节点,有过半的节点响应成功,消息才算写入成功。 Leader消息写入 Dledger下 阅读全文
posted @ 2023-10-07 09:01 shanml 阅读(591) 评论(0) 推荐(1) 编辑
摘要:RocketMQ 4.5版本之前,可以采用主从架构进行集群部署,但是如果master节点挂掉,不能自动在集群中选举出新的Master节点,需要人工介入,在4.5版本之后提供了DLedger模式,使用Raft算法,如果Master节点出现故障,可以自动选举出新的Master进行切换。 Raft协议 R 阅读全文
posted @ 2023-09-28 09:56 shanml 阅读(770) 评论(0) 推荐(1) 编辑
摘要:RocketMQ支持集群部署来保证高可用。它基于主从模式,将节点分为Master、Slave两个角色,集群中可以有多个Master节点,一个Master节点可以有多个Slave节点。Master节点负责接收生产者发送的写入请求,将消息写入CommitLog文件,Slave节点会与Master节点建立 阅读全文
posted @ 2023-09-27 10:03 shanml 阅读(1549) 评论(0) 推荐(4) 编辑
摘要:消费者负载均衡,是指为消费组下的每个消费者分配订阅主题下的消费队列,分配了消费队列消费者就可以知道去消费哪个消费队列上面的消息,这里针对集群模式,因为广播模式,所有的消息队列可以被消费组下的每个消费者消费不涉及负载均衡,而集群模式一个消息队列同一时间只能分配给组内的一个消费者进行消费。 Rocket 阅读全文
posted @ 2023-09-26 08:30 shanml 阅读(288) 评论(0) 推荐(0) 编辑
摘要:RocketMQ事务的使用场景 单体架构下的事务 在单体系统的开发过程中,假如某个场景下需要对数据库的多张表进行操作,为了保证数据的一致性,一般会使用事务,将所有的操作全部提交或者在出错的时候全部回滚。以创建订单为例,假设下单后需要做两个操作: 在订单表生成订单 在积分表添加本次订单增加的积分记录 阅读全文
posted @ 2023-09-25 09:01 shanml 阅读(488) 评论(0) 推荐(1) 编辑
摘要:全局有序 在RocketMQ中,如果使消息全局有序,可以为Topic设置一个消息队列,使用一个生产者单线程发送数据,消费者端也使用单线程进行消费,从而保证消息的全局有序,但是这种方式效率低,一般不使用。 局部有序 假设一个Topic分配了两个消息队列,生产者在发送消息的时候,可以对消息设置一个路由I 阅读全文
posted @ 2023-09-20 10:34 shanml 阅读(908) 评论(0) 推荐(1) 编辑
摘要:消费者从Broker拉取到消息之后,会将消息提交到线程池中进行消费,RocketMQ消息消费是批量进行的,如果一批消息的个数小于预先设置的批量消费大小,直接构建消费请求ConsumeRequest将消费请求提交到线程池处理,否则需要分批构建进行提交。 消息消费 在消息被提交到线程池后进行处理时,会调 阅读全文
posted @ 2023-09-19 14:29 shanml 阅读(746) 评论(1) 推荐(2) 编辑
摘要:RocketMQ设定了延迟级别可以让消息延迟消费,延迟消息会使用SCHEDULE_TOPIC_XXXX这个主题,每个延迟等级对应一个消息队列,并且与普通消息一样,会保存每个消息队列的消费进度(delayOffset.json中的offsetTable): public class MessageSt 阅读全文
posted @ 2023-09-15 09:00 shanml 阅读(708) 评论(1) 推荐(1) 编辑
摘要:在上一讲中,介绍了消息的存储,生产者向Broker发送消息之后,数据会写入到CommitLog中,这一讲,就来看一下消费者是如何从Broker拉取消息的。 RocketMQ消息的消费以组为单位,有两种消费模式: 广播模式:同一个消息队列可以分配给组内的每个消费者,每条消息可以被组内的消费者进行消费。 阅读全文
posted @ 2023-09-10 22:52 shanml 阅读(675) 评论(0) 推荐(1) 编辑
摘要:当Broker收到生产者的消息发送请求时,会对请求进行处理,从请求中解析发送的消息数据,接下来以单个消息的接收为例,看一下消息的接收过程。 数据校验 封装消息 首先Broker会创建一个MessageExtBrokerInner对象封装从请求中解析到的消息数据,它会将Topic信息、队列ID、消息内 阅读全文
posted @ 2023-08-21 22:38 shanml 阅读(595) 评论(0) 推荐(1) 编辑
摘要:RocketMQ是通过DefaultMQProducer进行消息发送的,它实现了MQProducer接口,MQProducer接口中定义了消息发送的方法,方法主要分为三大类: send同步进行消息发送,向Broker发送消息之后等待响应结果; send异步进行消息发送,向Broker发送消息之后立刻 阅读全文
posted @ 2023-08-16 21:51 shanml 阅读(279) 评论(0) 推荐(3) 编辑
摘要:NameServer是一个注册中心,提供服务注册和服务发现的功能。NameServer可以集群部署,集群中每个节点都是对等的关系(没有像ZooKeeper那样在集群中选举出一个Master节点),节点之间互不通信。 服务注册 Broker启动的时候会向所有的NameServer节点进行注册,注意这里 阅读全文
posted @ 2023-05-25 23:29 shanml 阅读(559) 评论(0) 推荐(1) 编辑
摘要:消息存储 在 【RocketMQ】消息的存储一文中提到,Broker收到消息后会调用CommitLog的asyncPutMessage方法写入消息,在DLedger模式下使用的是DLedgerCommitLog,进入asyncPutMessages方法,主要处理逻辑如下: 调用serialize方法 阅读全文
posted @ 2023-02-26 22:23 shanml 阅读(383) 评论(1) 推荐(1) 编辑
摘要:RocketMQ 4.5版本之前,可以采用主从架构进行集群部署,但是如果master节点挂掉,不能自动在集群中选举出新的Master节点,需要人工介入,在4.5版本之后提供了DLedger模式,使用Raft算法,如果Master节点出现故障,可以自动选举出新的Master进行切换。 Raft协议 R 阅读全文
posted @ 2023-02-15 22:35 shanml 阅读(512) 评论(0) 推荐(0) 编辑
摘要:RocketMQ有两种获取消息的方式,分别为推模式和拉模式。 **推模式** 推模式在[【RocketMQ】消息的拉取](https://www.cnblogs.com/shanml/p/16463964.html)一文中已经讲过,虽然从名字上看起来是消息到达Broker后推送给消费者,实际上还是需 阅读全文
posted @ 2023-01-20 11:01 shanml 阅读(655) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示