问题现象 今天忽然收到RocketMQ预警信息如下: 提醒有部分数据没有消费,产生堆积情况. 打开RocketMq-Console-Ng查看如下图形式: 备注:第一反应是Consumer Group内订阅了多个topic?(为什么这么怀疑,下次分析). 通过命令statsAll 作用是查询Topic and Consumer tps stats: sh mqadmin statsAll -n namesrv 发现没有问题,很奇怪?还好之前源码看过,只能调试源码了. 源码调试 本篇不重点讲解源码过…
在企业项目中,利用RocketMQ接收数据,存库. 由于是第一次在项目中具体的使用RocketMQ,一直采坑. 1.发现问题:在最终的联调过程中,并发压测,订单数据丢失,同一时刻,oms推送900+的数据,结果消费者只获取并入库了20几条,绝大部分消息丢失. 自己手写了一个生产者测试类,用最原始的循环的方式快速存入多条数据(此处为了测试方便,并不是重复消费问题,实际项目中消费端要加幂等去重).一次就存5条但是每次都丢两条,好像最后两条数据永远消费不到的样子. 但在,RocketMQ在控制台上明显…
说明 RocketMQ集群消费的时候,我们经常看到类似注释里面 (1,(2 的写法,已经有时候有同学没注意抛异常的情况就是(3 模拟的情况.那么这3种情况到底是怎么样的呢?你是否都了然于心呢?下面我们一起来看看吧,本文主要在讲解RocketMQ集群消费有些内容会提到但是不会深入讲解(以后有机会讲其他的). RocketMQ集群消费执行过程 虽然说是PushConsumer其实本质还是拉. 再跟进去 在继续跟进 Netty推荐使用addListener的方式来回调异步执行的结果.,关于opaque…
一.三种消费 :1.普通消费 2. 顺序消费 3.事务消费 1.1  顺序消费:在网购的时候,我们需要下单,那么下单需要假如有三个顺序,第一.创建订单 ,第二:订单付款,第三:订单完成.也就是这个三个环节要有顺序,这个订单才有意义.RocketMQ可以保证顺序消费,他的实现是生产者(一个生产者可以对多个主题去发送消息)将这个三个消息放在topic(一个topic默认有4个队列)的一个队列里面,单机支持上万个持久化队列,消费端去消费的时候也是只能有一个Consumer去取得这个队列里面的数据,然后…
1.kafka在高并发的情况下,如何避免消息丢失和消息重复? 消息丢失解决方案: 首先对kafka进行限速, 其次启用重试机制,重试间隔时间设置长一些,最后Kafka设置acks=all,即需要相应的所有处于ISR的分区都确认收到该消息后,才算发送成功 消息重复解决方案: 消息可以使用唯一id标识 生产者(ack=all 代表至少成功发送一次) 消费者 (offset手动提交,业务逻辑成功处理后,提交offset) 落表(主键或者唯一索引的方式,避免重复数据) 业务逻辑处理(选择唯一主键存储到R…
RabbitMq消费者在初始配置之后进行数据消费 问题背景 在写一个消费rabbitmq消息的程序是,发现了一个问题,消费者的业务逻辑里面依赖这一些配置信息,但是当项目启动时,如果队列里面有积压数据的时候,就会出现配置信息还没有加载完成就开始进行数据消费了,这样就会出现业务逻辑混乱的情况,所以现在想要做的就是在项目启动时,等待项目的一些配置信息加载完成之后,再进行消息消费的逻辑. 解决方案 方案一 定义一个全局标示变量(用来表示配置加载是否完成),在消费者的消费逻辑开始时判断配置是否加载完成.代…
一.启动RocketMQ [root@master ~]# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1               localhost.localdomain localhost ::1             localhost6.localdomain6 local…
最近在调试RocketMQ消息发送与消费的Demo时,发现一个问题:只要重启程序,RocketMQ消息就会重复消费. 那么这是什么原因导致的,又该如何解决呢? 经过一番排查,发现程序使用的RocketMQ客户端版本是3.6.2,而测试环境安装的RocketMQ环境的版本是4.1.0.原来是客户端和服务器端版本不一样导致的,消息并没有最终被消费,即没有ACK消息确认,只要程序重启就会重复消费. 解决方案:RocketMQ客户端版本使用与服务器端的同一版本,即4.1.0版本. 划重点:使用Rocke…
前言 在之前的MQ专题中,我们已经解决了消息中间件的一大难题,消息丢失问题. 但MQ在实际应用中不是说保证消息不丢失就万无一失了,它还有两个令人头疼的问题:重复消费和乱序. 今天我们就来聊一聊这两个常见的问题,看看RocketMQ是如何解决这两个问题的. 为什么会重复消费 首先我们来聊一聊重复消费的问题,要解决一个问题最开始的一步当然是去查找问题发生的原因了. 那出现重复消费的原因到底是什么呢? 我们先来思考一下生产者发送消息这一过程中是不是有可能重复发送消息到MQ呢? 答案是肯定的,比如生产者…
大家好,我是三友,我又来了~~ 最近仍然畅游在RocketMQ的源码中,这几天刚好翻到了消费者的源码,发现RocketMQ的对于push消费方式的实现简直太聪明了,所以趁着我脑子里还有点印象的时候,赶紧来写一篇文章,来掰扯一下,防止过两天就忘得一干二净了. MQ消费方式 消费方式就是指消费者如何从MQ中获取到消息,分为两种方式,push(推方式)和pull(拉方式). 1.push(推方式) push,顾名思义,就是推的意思.就是当MQ收到生产者产生的消息的时候,会主动将消息推送到消费者进行消费…