- 博客(14)
- 收藏
- 关注
原创 14. Consumer-负载均衡
集群模式下,同一个消费组下,多个消费者同时订阅同一个主题,但是主题下的每个队列同时只能被一个消费端消费,所以需要进行负载均衡,确定哪些队列由哪些消费者消费 。 如果消费者数量大于队列数,可能有的消费者没有分配到队列;相反,如果如果消费者数量小于队列数,一个消费者可能会被分配到多个队列。 负载均衡是由RebalanceService线程实现的。 RebalanceService.run方...
2019-11-08 00:53:19
415
原创 13. Consumer-消费进度管理
不管是顺序消费还是并发消费,在一批消息消费完成后都会将消息从processQueue中移除,返回最小processQueue的最小偏移量,并更新消费进度。 广播模式下,消费进度文件存储在各个消费端本地,因为多个消费端是同时消费的,且互相独立的。 集群模式下,多个消费端共同消费同一个队列,且同一时间只有一个消费端在消费,所以消费进度文件是存储在broker的。 消费进度管理接口是:Off...
2019-11-08 00:52:26
448
原创 12. Consumer-顺序消费
rocketmq支持顺序消费,如果发送端只设置一个队列,可实现顺序消息。 并发消费逻辑是由ConsumeMessageOrderlyService服务处理的。 ConsumeMessageOrderlyService.start方法: public void start() { if (MessageModel.CLUSTERING.equals(ConsumeMe...
2019-11-08 00:51:30
567
原创 11. Consumer-并发消费
消息拉取后存入ProcessQueue中,然后调用consumeMessageService.submitConsumeRequest方法通知消费服务进行消费。 这是个异步过程,使消息消费和消息拉取解耦。Rocketmq消息消费支持并发消费和顺序消费,这里先介绍并发消费。 并发消费逻辑是由ConsumeMessageConcurrentlyService服务处理的。 ConsumeMe...
2019-11-08 00:49:22
659
原创 10. Consumer-消息拉取
"Consumer-消费流程"文章的最后,启动消费实例中,就启动了消息拉取服务。 rocketmq消息拉取是由PullMessageService服务处理的。 PullMessageService.run方法 : public void run() { log.info(this.getServiceName() + " service started"); ...
2019-11-08 00:47:11
451
原创 9. Consumer-启动流程
Rocketmq支持两种消费模式:拉模式和推模式,其中推模式也是基于拉模式实现的,这里主要看下基于推模式的消息消费流程。 常见的推模式的消费端代码如下: public static void main(String[] args) throws MQClientException { String group = "test-group"; String to...
2019-11-08 00:45:02
612
原创 8. Broker-主从同步机制
主从同步机制 为了提高消息的高可用性,避免单点故障导致消息不能消费,rocketmq引入了主从同步机制,如果broker主宕机后,消费者可以继续从broker从拉取消息。rocketmq主从同步由HAService实现的,原理为: 1.master启动在特定端口监听slave连接 2.slave和master建立连接后,指定拉取消息的偏移量 3.slave保存master传过来的消息,反馈...
2019-11-08 00:41:46
481
原创 7. Broker-文件刷盘机制
rocketmq的消息存储是先写入内存,再根据不同的刷盘策略进行刷盘,rocketmq支持两种刷盘模式: 同步刷盘:消息写入后等待刷盘成功返回 异步刷盘:消息写入内存后直接返回,由后台线程去定时刷盘 broker配置文件中设置flushDiskType字段,可选择ASYNC_FLUSH(异步刷盘)和 SYNC_FLUSH(同步刷盘) 前面"Broker-消息存储流程"中...
2019-11-08 00:39:32
576
原创 6. Broker-消息存储文件
1. CommitLog文件 commitlog的文件组织如下所示,每个文件固定大小,默认1G,一个文件写满,创建另一个文件。文件名为文件中第一条消息的全局偏移量。 commitlog使用MappedFile和MappedFileQueue来组织消息文件。MappedFileQueue对应一个文件夹,MappedFile对应一个commitlog文件 接着上一节,进入CommitLog....
2019-11-08 00:37:12
283
原创 5. Broker-消息存储流程
1. Broker启动流程 broker启动类位于 org.apache.rocketmq.broker.BrokerStartup public static void main(String[] args) { start(createBrokerController(args)); } public static BrokerContro...
2019-11-08 00:30:37
370
原创 4. 消息发送流程
简介 本节主要跟踪消息发送的过程,RocketMQ支持三种消息发送方式:同步,异步和单向 同步(sync):发送之后,同步等待直到消息服务器返回发送结果或者超时。 异步(async): 发送之后,指定回调函数,立即返回,发送结果在回调任务中处理(新线程)。 单向(oneway): 发送者单向向服务器发送消息,只管发,不关心消息是否成功发送。 消息发送流程大致如下图所示。 st...
2019-11-08 00:09:00
1067
原创 3. 路由中心-namesrv
1. 数据结构 namesrv主要维护集群的路由信息(broker,topic,queue), 其他模块broker,consumer和producer都会连接namesrv定期注册/获取路由信息。 namesrv维护的数据结构包括 public class RouteInfoManager { private final HashMap<String/*...
2019-11-07 23:57:53
328
原创 2. 调试环境搭建
1. 获取源代码 RocketMQ已于2017年提交到Apache基金会,GitHub代码库地址:https://github.com/apache/rocketmq 这里使用的版本是 <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-all</artifactId> ...
2019-11-07 23:49:29
277
原创 1. Rocketmq简介
1. MQ背景 消息队列是高并发系统的核心组件之一,主要提供 •异步,提高系统性能 •削峰,解决瞬时写压力大问题 •解耦,解决不同系统间的耦合,避免依赖系统一死全死 目前主流的mq包括rocketmq,kafka,rabbitmq,activemq。 rocketmq特点包括: • 支持事务型消息(消息发送和DB操作保持两方的最终一致性,rabbitmq和kafka不支持) ...
2019-11-07 23:48:07
182
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅