![](https://img-blog.csdnimg.cn/20210823103910710.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
RocketMQ
文章平均质量分 85
RocketMQ
码上得天下
这个作者很懒,什么都没留下…
展开
-
RocketMQ消息ACK机制及消费进度管理
中剖析过,consumer的每个实例是靠队列分配来决定如何消费消息的。那么消费进度具体是如何管理的,又是如何保证消息成功消费的(RocketMQ有保证消息肯定消费成功的特性(失败则重试)?本文将详细解析消息具体是如何ack的,又是如何保证消费肯定成功的。由于以上工作所有的机制都实现在PushConsumer中,所以本文的原理均只适用于RocketMQ中的PushConsumer即Java客户端中的DefaultPushConsumer。转载 2024-02-29 18:08:34 · 861 阅读 · 0 评论 -
RocketMQ 的消费逻辑
正常的消息会进入 else 分支,对于首次重试的消息,默认的 delayLevel 是 0 ,RocketMQ 会将 delayLevel + 3,也就是加到 3 ,这就是说,如果没有显示的配置延时级别,消息消费重试首次,是延迟了第三个级别发起的重试,也就是距离首次发送 10s 后重试,其主题的默认规则是。消费消息并发服务启动后,会定期扫描所有消费的消息,若当前时间减去开始消费的时间大于消费超时时间,首先会将过期消息发送 sendMessageBack 命令发送到 Broker ,然后从快照中删除该消息。转载 2024-02-29 17:48:55 · 118 阅读 · 0 评论 -
RocketMQ 消费端限流机制
默认为 1000 条,就触发限流,限流的具体做法就是暂停向 Broker 拉取该队列中的消息,但并不会阻止其他队列的消息拉取。中进行消息消费,消息消费完成后会将对应的消息从 ProcessQueue 中移除,然后向 Broker 端提交消费进度,提交的消费偏移量为 ProceeQueue 中的最小偏移量。这个就更加直接了,不仅从消息数量考虑,再结合从消息体大小考虑,处理队列中消息总大小超过 100M 进行限流,这个显而易见就是为了避免内存溢出。转载 2024-02-29 17:36:05 · 381 阅读 · 0 评论 -
RocketMQ 消息积压了,增加消费者有用吗?
这种策略 broker 的命名必须按照格式:机房名@brokerName,因为消费者分配队列的时候,首先按照机房名称过滤出所有的 MessageQueue,然后再按照平均分配策略进行分配。等外部系统恢复正常后再从本地取出来进行处理。:如果消费者的数量小于 MessageQueue 的数量,并且外部系统响应正常,为了快速消费积压消息而增加消费者,有什么需要考虑的吗?:外部系统虽然响应正常,但是增加多个消费者后,外部系统的接口调用量会突增,如果达到吞吐量上限,外部系统会响应变慢,甚至被打挂。转载 2024-02-29 17:08:08 · 87 阅读 · 0 评论 -
RocketMQ Producer重试机制
MQBrokerException是在消息发送结果中,发送状态不OK(状态码不是ResponseCode.FLUSH_DISK_TIMEOUT、ResponseCode.FLUSH_SLAVE_TIMEOUT、ResponseCode.SLAVE_NOT_AVAILABLE、ResponseCode.SUCCESS),就会抛出这个异常。顺序消息不重试的原因:顺序发送流程:发送消息->sendKernelImpl,所以没有重试逻辑。生产者流控,因为broker处理能力达到瓶颈;转载 2024-02-29 15:20:50 · 51 阅读 · 0 评论 -
RocketMQ 集群 Broker 挂了,会造成什么影响?
而对于局部顺序消息,比如同一个订单相关的消息要发送到同一个 Broker 的同一个 MessageQueue 中的情况,如果这个 Broker 挂了,那 MessageQueueSelector 会选择其他 Broker 上的 MessageQueue 进行发送,这会影响当前这笔订单消费的顺序性。这里假设没有从节点。:如果主节点重启了,如果消费者会用本地保存的偏移量去主节点拉取消息,主节点会更新本地的偏移量,同时从节点也会去主节点同步偏移量,所以并不会拉取到重复消息。需要注意的是,这个策略默认是不开启的。转载 2024-02-29 15:00:40 · 101 阅读 · 0 评论 -
RocketMQ 消息存储流程
基于 RocketMQ 4.2.0 版本进行的。本文讲述 RocketMQ 存储一条消息的流程。转载 2024-02-29 13:16:12 · 69 阅读 · 0 评论 -
RocketMQ的Broker如何保证不丢失消息:同步刷盘、同步双写
所以,rocket mq是有可能会丢数据的,而且也是有可能因为master宕机导致消息消费延迟的,但是这都是可以通过参数调节,保证100%数据不丢失的。版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/sishenhzy/article/details/106164234。转载 2024-02-29 12:10:17 · 171 阅读 · 0 评论 -
RocketMQ二十三问
类比一下我们生活的邮政系统——邮政系统要正常运行,离不开下面这四个角色, 一是发信者,二 是收信者, 三是负责暂存传输的邮局, 四是负责协调各个地方邮局的管理机构。对应到 RocketMQ 中,这四个角色就是 Producer、 Consumer、 Broker 、NameServer。RocketMQ类比邮政体系在操作系统中,使用传统的方式,数据需要经历几次拷贝,还要经历用户态/内核态切换。传统文件传输示意图-来源《图解操作系统》从磁盘复制数据到内核态内存;从内核态内存复制到用户态内存;转载 2024-02-29 11:42:23 · 25 阅读 · 0 评论 -
RocketMQ消息重复消费的7种原因
总得来说,RocketMQ中还是存在很多种导致消息重读消费的情况,并且官方也说了,只是在大多数情况下消息不会重复所以如果你的业务场景中需要保证消息不能重复消费,那么就需要根据业务场景合理的设计幂等技术方案。转载 2024-02-29 11:04:06 · 508 阅读 · 0 评论 -
顺序消息可能存在的坑
在金融行业中,如果用户订阅了余额变更短信通知服务,当余额发生变化会收到短信通知,但收到短信的顺序必须和用户银行卡账号余额发生变化的顺序一致。这个场景是典型的顺序消费场景,在分布式架构体系中,账户余额服务与发送短信是两个不同的微服务,通常会基于MQ来实现解耦合,其时序图如下图所示:引入了MQ,那如何保证顺序呢?转载 2023-05-20 15:57:58 · 76 阅读 · 0 评论 -
RocketMq DefaultLitePullConsumer流程分析
链接:https://www.jianshu.com/p/fc6e4cfe39cb。商业转载请联系作者获得授权,非商业转载请注明出处。转载 2023-05-20 14:02:10 · 1276 阅读 · 0 评论 -
RocketMQ -- offset管理
正文首先来明确一下 Offset 的含义, RocketMQ 中, 一 种类型的消息会放到 一 个 Topic 里,为了能够并行, 一般一个 Topic 会有多个 Message Queue (也可以 设置成一个), Offset是指某个 Topic下的一条消息在某个 Message Queue里的 位置,通过 Offset的值可以定位到这条消息,或者指示 Consumer从这条消息 开始向后继续处理。Rocketmq集群有两种消费模式。转载 2023-05-19 20:51:21 · 2852 阅读 · 0 评论 -
Rocketmq的master broker基于配置,无选举机制
RocketMQ中的master和slave可以认为是物理上的概念。一台机器要么是master,要么是slave,与topic无关,是在配置文件中指定的(也可以换种方式理解,认为master和slave是逻辑上的概念,broker是物理上的概念。但是一个broker要么是master,要么是slave)。master与slave通过配置brokerName来进行配对。相同的brokerName中,brokerId为0的表示master,其他表示slave。示例图中有9台broker机器。kafk转载 2022-01-14 21:16:23 · 876 阅读 · 0 评论 -
深入理解RocketMQ消息查询机制
深入理解RocketMQ消息查询机制RocketMQ到底快在哪里?深入探索RocketMQ消息存储和查询原理https://zhuanlan.zhihu.com/p/138689403转载 2022-01-06 16:14:09 · 120 阅读 · 0 评论 -
《深入理解RocketMQ》- MQ消息的投递机制
0. 前言RocketMQ的消息投递分分为两种:一种是生产者往MQ Broker中投递(Push);另外一种则是MQ broker 往消费者 投递(这种投递的说法是从消息传递的角度阐述的,实际上底层是消费者从MQ broker 中Pull拉取的)。本文将从模型的角度来阐述这两种机制。1. RocketMQ的消息模型RocketMQ 的消息模型整体并不复杂,如下图所示:一个Topic(消息主题)可能对应多个实际的消息队列(MessgeQueue) 在底层实现上,为了提高MQ的可用性和灵活性,一转载 2022-01-06 16:04:07 · 787 阅读 · 0 评论 -
RocketMQ订阅关系一致
订阅关系一致指的是同一个消费者Group ID下所有Consumer实例所订阅的Topic、Tag必须完全一致。如果订阅关系不一致,消息消费的逻辑就会混乱,甚至导致消息丢失。本文提供订阅关系一致的正确示例代码以及订阅关系不一致的可能原因,帮助您顺畅地订阅消息。背景信息消息队列RocketMQ版里的一个消费者Group ID代表一个Consumer实例群组。对于大多数分布式应用来说,一个消费者Group ID下通常会挂载多个Consumer实例。由于消息队列RocketMQ版的订阅关系主要由Top转载 2022-01-06 15:34:03 · 2845 阅读 · 0 评论 -
RocketMQ生产环境开启自动创建topic会有什么影响?
概述本文是个人学习笔记,参考《RocketMQ技术内幕》及RocketMQ源码4.2.0(GitHub - apache/rocketmq at release-4.2.0)结论生产环境如果开启了自动创建Topic,会有3个影响用户指定的读写队列数可能不是预期结果。创建的Topic的读队列数和写队列数取值为默认Topic(“TBW102”)的读队列数和Produce端设置的队列数的最小值。 不能保证所有的Broker上都能注册该Topic。Broker创建了新的Topic后,新的Topic转载 2022-01-06 15:20:56 · 1359 阅读 · 0 评论 -
源码分析RocketMQ之消息消费重试机制
本篇 Chat 将从以下几个方面进行讲解,帮助大家能够更加优雅高效的使用 RocketMQ 提升消息消费效率并从底层源码对 RocketMQ 消息重试机制有更加深入的了解。RocketMQ 消息重试过程描述 RocketMQ 消费阶段消息重试的源码分析 死信 DLQ 的处理方式 RocketMQ在消息发送阶段的消息重试手段首先,我们需要明确,只有当消费模式为MessageModel.CLUSTERING(集群模式)时,Broker 才会自动进行重试,对于广播消息是不会重试的。集群消费模式..转载 2021-12-09 12:10:59 · 1436 阅读 · 0 评论 -
深入理解RocketMQ延迟消息
延迟消息是实际开发中一个非常有用的功能,本文第一部分从整体上介绍秒级精度延迟消息的实现思路,在第二部分结合RocketMQ的延迟消息实现,进行细致的讲解,点出关键部分的源码。第三步介绍延迟消息与消息重试的关系。1 延迟消息介绍基本概念:延迟消息是指生产者发送消息后,不能立刻被消费者消费,需要等待指定的时间后才可以被消费。场景案例:用户下了一个订单之后,需要在指定时间内(例如30分钟)进行支付,在到期之前可以发送一个消息提醒用户进行支付。一些消息中间件的Broker端内置了延迟消息支持的能力,转载 2021-12-09 11:36:57 · 1473 阅读 · 0 评论 -
RocketMQ消息存储原理
1.RocketMQ的存储架构1.1存储特点消息主体以及元数据都存储在CommitLog当中 Consume Queue相当于kafka中的partition,是一个逻辑队列,存储了这个Queue在CommiLog中的起始offset,log大小和MessageTag的hashCode。 每次读取消息队列先读取consumerQueue,然后再通过consumerQueue去commitLog中拿到消息主体。1.2为什么要这样设计?rocketMQ的设计理念很大程度借鉴了kafka,所以转载 2021-11-18 11:33:33 · 1660 阅读 · 0 评论 -
分布式消息队列RocketMQ与Kafka架构上的巨大差异之2 -- CommitLog与ConsumeQueue
在前面Rocket与Kafka的对比之“拨乱反正”续篇中,我们已经提到了RocketMQ和Kafka在架构上面的一个巨大差异:Kafka是每个partition对应一个文件,而RocketMQ是把所有topic的所有queue的消息存储在一个文件里面,然后再分发给ConsumeQueue。存储上的巨大差异Kafka的存储下图展示了Kafka的存储结构: 其中每个topic_partition对应一个日志文件,Producer对该日志文件进行“顺序写”,Consumer对该文件进行“顺序读”。但转载 2021-11-18 11:03:44 · 280 阅读 · 0 评论 -
分布式消息队列RocketMQ与Kafka架构上的巨大差异之1 -- 为什么RocketMQ要去除ZK依赖?
我们知道,在早期的RocketMQ版本中,是有依赖ZK的。而现在的版本中,是去掉了对ZK的依赖,转而使用自己开发的NameSrv。并且这个NameSrv是无状态的,你可以随意的部署多台,其代码也非常简单,非常轻量。那不禁要问了:ZooKeeper是业界用来管理集群的一个非常常用的中间件,比如Kafka就是依赖的ZK。那为什么RocketMQ要自己造轮子,自己做集群的管理呢?纯粹就是再做一个Zookeeper吗?本篇试图通过一个架构上的巨大差异,来阐述为什么RocketMQ可以去掉ZK。Kafka转载 2021-11-16 17:52:40 · 526 阅读 · 0 评论 -
RocketMQ为什么要保证订阅关系的一致性?
前段时间有个朋友向我提了一个问题,他说在搭建 RocketMQ 集群过程中遇到了关于消费订阅的问题,具体问题如下:然后他发了报错的日志给我看:the consumer's subscription not exist我第一时间在源码里找到了报错的位置:org.apache.rocketmq.broker.processor.PullMessageProcessor#processRequest:subscriptionData = consumerGroupInfo.fi.转载 2021-11-16 16:37:03 · 1121 阅读 · 0 评论 -
消息中间件的四种投递模式对比
消息中间件( Message Oriented Middleware,简称MOM)在企业开发中变得越来越重要。本文介绍消息中间件中的四种消息投递模型,主要是介绍模型的核心特性,以及不同模型之前的区别。这四种模型分别是:PTP模型 Pub/Sub模型 Partition模型 Transfer模型其中PTP模型和Pub/Sub模型在JMS规范中有定义,消息中间件ActiveMQ就实现了JMS规范。然而一些消息中间件,并没有实现JMS规范,而是自己设计出了一套模型,例如Kafka和RocketMQ就采转载 2021-11-16 14:53:36 · 358 阅读 · 0 评论 -
RocketMQ架构解析
一、架构图以及角色1、架构图2、角色总共有四大部分:NameServer,Broker,Producer,Consumer。2.1、NameServerNameServer主要包括两个主要功能:管理brokers:broker服务器启动时会注册到NameServer上,并且两者之间保持心跳监测机制,以此来保证NameServer知道broker的存活状态; 路由信息管理:每一台NameServer都存有全部的broker集群信息和生产者/消费者客户端的请求信息;Name转载 2021-11-16 11:10:57 · 360 阅读 · 0 评论 -
图解 RocketMQ 核心原理
本文来自 Apache RocketMQ 的资深用户丁威,他和 MyCat 的核心开发者周继锋合著了《RocketMQ技术内幕:架构设计与实现原理》一书,目的是希望用图解的方式梳理 RocketMQ的核心原理,包括 RocketMQ Topic 的路由注册与剔除机制、消息发送高可用设计、消息存储文件设计、并发消息拉取与消息消费流程、主从同步(HA)、事务消息基本实现原理等,帮助开发者在使用 RocketMQ 的同时,还能对其核心原理了然于心。Topic 的路由机制介绍路由注册机制之前,先简..转载 2021-11-16 10:31:28 · 738 阅读 · 0 评论 -
从源码看RocketMQ的消费端负载均衡和Rebalance机制
Consumer的负载均衡RocketMQ在消费端的负载均衡如下图所示,各个partition均匀分布在各个consumer上,如下图所示:所有consumer依次消费每一个partition,如果partition数量不是consumer的整数倍,则排在前面的consumer会消费更多的partition,下面可以看看consumer的实现。Rebalance的实现RocketMQ的consumer负载均衡依赖于RebalanceImpl类,以push的方式为例,在DefaultMQP转载 2021-11-16 09:15:24 · 214 阅读 · 0 评论 -
深入理解RocketMQ Rebalance机制
本文深入的分析了RocketMQ的Rebalance机制,主要包括以下内容: Rebalance必要的元数据信息的维护 Broker协调通知机制; 消费者/启动/运行时/停止时Rebalance触发时机 单个Topic的Rebalance流程 分区分配策略 RocketMQ与Kafka Rebalance机制的区别, 文章篇幅较长,感兴趣的用户可以先收藏,再阅读。1 Rebalance简介 Rebalance(再均衡)机制...转载 2021-11-15 18:50:22 · 3695 阅读 · 2 评论 -
RocketMQ设置的ConsumeThreadMax无效
问题最近线上消息积压刚好碰到这个问题。RocketMQ设置的ConsumeThreadMax无效,线程数只会达到ConsumeThreadMin值。回答ConsumeMessageConcurrentlyServicepublic class ConsumeMessageConcurrentlyService implements ConsumeMessageService { private static final InternalLogger log = ClientL转载 2021-09-01 17:34:42 · 1462 阅读 · 0 评论 -
RocketMQ生产者和消费者Demo(三)
依赖: <!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-spring-boot-starter --> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter&l原创 2021-08-27 17:59:16 · 422 阅读 · 0 评论 -
RocketMQ生产者和消费者Demo(二)
核心代码:package org.example.mq.consumer;import org.apache.commons.lang3.StringUtils;import org.apache.rocketmq.acl.common.AclClientRPCHook;import org.apache.rocketmq.acl.common.SessionCredentials;import org.apache.rocketmq.client.consumer.DefaultMQPus原创 2021-08-23 17:19:51 · 520 阅读 · 0 评论 -
RocketMQ事务消息实现分析
这周RocketMQ发布了4.3.0版本,New Feature中最受关注的一点就是支持了事务消息:今天花了点时间看了下具体的实现内容,下面是简单的总结。RocketMQ事务消息概要通过冯嘉发布的《RocketMQ 4.3正式发布,支持分布式事务》一文可以看到RocketMQ采用了2PC的方案来提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息。这张图说明了事务消息的大致方案,分为两个逻辑:正常事务消息的发送及提交、事务消息的补偿流程事务消息发送及提交:发...转载 2021-05-21 09:47:07 · 325 阅读 · 0 评论 -
自定义注解除了AOP之外的另外一种使用方式
主要代码:@Componentpublic class MqConsumerScanner implements ApplicationContextAware, BeanFactoryAware { private final Logger LOGGER = LoggerFactory.getLogger(this.getClass()); private ApplicationContext applicationContext; private BeanFactory beanFact原创 2020-10-28 21:06:08 · 483 阅读 · 0 评论 -
Rocketmq如何保证消息不丢失,如何保证消息不被重复消费
1、消息整体处理过程这里我们将消息的整体处理阶段分为3个阶段进行分析:Producer发送消息阶段。Broker处理消息阶段。Consumer消费消息阶段。Producer发送消息阶段发送消息阶段涉及到Producer到broker的网络通信,因此丢失消息的几率一定会有,那RocketMQ在此阶段用了哪些手段保证消息不丢失了(或者说降低丢失的可能性)。手段一:提供SYNC的发送消息方式,等待broker处理结果。RocketMQ提供了3种发送消息方式,分别是:同步发送转载 2020-08-17 19:31:57 · 17229 阅读 · 6 评论 -
RocketMQ保证高可用和高性能的几种措施
整体架构ocketmq是通过broker主从机制来实现高可用的。相同broker名称,不同brokerid的机器组成一个broker组,brokerId=0表明这个broker是master,brokerId>0表明这个broker是slave。消息生产的高可用:创建topic时,把topic的多个message queue创建在多个broker组上。这样当一个broker组的master不可用后,producer仍然可以给其他组的master发送消息。 rocketmq目前还不支持.转载 2020-08-17 19:27:08 · 804 阅读 · 1 评论 -
Rocketmq 发送消息报错create mapped file failed, server is busy or broken.
H:\software\JAVA8\JDK8\bin\java "-javaagent:H:\software\IntelliJ IDEA 2018.1\lib\idea_rt.jar=57760:H:\software\IntelliJ IDEA 2018.1\bin" -Dfile.encoding=UTF-8 -classpath H:\software\JAVA8\JDK8\jre\lib\charsets.jar;H:\software\JAVA8\JDK8\jre\lib\deploy.jar.原创 2020-05-14 22:46:21 · 5568 阅读 · 10 评论 -
RocketMQ生产者和消费者Demo(一)
1,单机模式的配置:进入目录\rocketmq-all-4.7.0-bin-release\conf\2m-noslave,修改broker-a.properties目录如下:# 集群名称brokerClusterName=DefaultCluster# broker名字,注意此处不同的配置文件填写的不一样brokerName=broker-a# 0 表示Master,>0 表示SlavebrokerId=0# nameServer地址,分号分割namesrvAddr=127.0.原创 2020-05-14 20:53:59 · 1138 阅读 · 0 评论 -
Windows环境Rocketmq 服务及控制台搭建
1. 控制台源码下载地址:https://github.com/apache/rocketmq-externals.git,当前版本1.0.12.解压后进入目录H:\software\rocketmq-externals-master\rocketmq-console\src\main\resources修改配置文件application.properties3.进入目录H:\sof...原创 2020-03-19 22:35:46 · 3705 阅读 · 1 评论 -
Rocketmq发送时异常system busy,start flow control for a while
:2020-03-12 09:41:17.495 [WARN ] [MessageThread_3] [,] RocketmqClient : Message [topic=%RETRY%CID_PH_CSP_STG02, flag=0, properties={MIN_OFFSET=366509, TRACE_ON=true, RETRY_TOPIC=T_CDD_TO_COMMON_AA, M...原创 2020-03-12 20:14:56 · 2934 阅读 · 0 评论