其他问题排查 | 《Rocket MQ 使用排查指南》第四章-阿里云开发者社区

开发者社区> 云服务技术课堂> 正文

其他问题排查 | 《Rocket MQ 使用排查指南》第四章

简介: 本章介绍 其他问题排查

上一章:消费问题排查 | 《Rocket MQ 使用排查指南》第三章>>>

点击免费下载
《Rocket MQ 使用排查指南》>>>

test

也可以PC端点击https://developer.aliyun.com/topic/download?id=820下载

控制台相关问题

【实例详情】--【数据统计】消息堆积top

【问题描述】:

在【实例详情】--【数据统计】当中看到某个group有堆积,实际上【group管理】--【消费者状态】当中查看这个group并没有堆积

【问题原因】:

实例详情--数据统计当中的消息堆积量是有一定延迟的,是采样数据,不是实时数据,服务消费者状态始终是离线,也看不到订阅关系,导致消息一直没法消费可能会是之前的历史数据,具体的还是要以group管理当中的实时消息堆积量为准

为什么实例下没有该topic,创建的时候却提示该topic已存在

【问题描述】:

创建topic的时候,该实例下不存在新建的topic,创建的时候却提示该topic已存在

image.png

【问题原因】:

没有命名空间的实例下的topic我们是要求全局唯一的,也就是说这个topic名称在全阿里都是要求全局唯一的。这个topic名称应该是已经被其他的用户使用过了

可以在【实例详情】--【实例信息】当中查看该实例是否有命名空间

image.png

查询出来的消息,显示的消费者超过实际的消费者

【问题描述】:

这个topic只有一个消费者在消费,但是实际上查出来可以进行消费验证的消费者却不止当前有订阅关系的消费者

【问题回答】:

如果这个gid曾经订阅过这个topic(现在不订阅了)/现在正在订阅这个topic,并且在控制台的group管理可以查得到这个gid,那么查询消息的时候就会显示在可以进行消费验证的地方

如果您这个gid已经在控制台被删除了,那么查询的时候,就不会再看到有这个gid了。

消费者状态连接信息的客户端ID,公网IP是什么?

【问题描述】;

消费者状态连接信息的客户端ID,公网IP是什么?

【问题回答】:

1、 客户端id就是获取的本机真实ip,linux环境下利用 ifconfig 查看,windows环境利用ipconfig查看,使用的是NetworkInterface.getNetworkInterfaces() 获取的

2、公网ip可以理解为代理ip,有了这个ip才可以上网。linux环境可以利用 curl ifconfig.me 或 curl cip.cc查看,windows环境直接百度搜索ip查看

资源报表当中采集类型的tps是什么意思

【问题描述】:

资源报表当中采集类型的tps是什么意思

image.png

【问题回答】:

是TransactionsPerSecond的缩写,也就是每秒处理的事务数。MQ中主要用来表示 某个topic的每秒钟生产了多少消息数量或某个消费组每秒消费了多少消息数量。

为什么控制台查看不到pid了

【问题描述】:

为什么代码当中的pid现在在控制台查看不到了

【问题回答】:

1、RokcetMQ现在已经没有pid的概念了,所以原先代码当中填入的pid都是无法查询到的。

2、如果不想代码当中有messageProducerId配置,建议将sdk升级到最新版本,参照文档当中的最新代码的写法,修改代码。

不建议直接将pid改成gid。因为现在的最新的消息生产者当中只需要填写发送消息的topic,不需要填写pid和gid了

需要注意的是新版本的sdk是兼容旧版本的,
虽然都是兼容的,切换版本后,也请做好线下测试,再线上灰度发布

如果后续新建实例,有命名空间的,接入点配置项需要变化,代码中的 ONSAddr 需要修改为 NAMESRV_ADDR。
有命名空间的实例,每个实例的接入点不同,在控制台“实例管理”页面可以看到接入点地址

消费者状态当中的消息延迟时间是如何计算的

【问题描述】:

消费者状态当中的消息延迟时间是如何计算的

image.png

【问题回答】:

消息延迟时间的计算公式: 延迟时间 = 未消费消息在队列中的最大时间 = 当前时间 - 最开始堆积的那条消息的时间

告警监控相关问题

收到告警,但是控制台却查看不到报警规则

【问题描述】:

接到了监控告警消息,但是在控制台查看该监控告警的规则,却没有看到

【问题原因】:

Mq的监控报警只能有创建该监控报警的账号登陆才能查看,主账号以及其他账号不能查看监控。

因此如果自己的账号查看不到该告警,那么表明是其他账号设置了报警

设置了报警,没有收到报警短信

【问题描述】:

为什么设置了报警,查看资源也的确符合报警的规则,但是却没有收到报警的短信通知

【排查步骤】:

1.首先确认实例所在地域(Region)支持监控报警功能
2.确认设置的报警接收人的手机号码为中国大陆地区的手机号
3.确认当前消费者是否在线,报警必须要当前消费者在线才可以

资源包费用相关问题

Api计费标准

【问题描述】:

Api是如何计费的

【问题回答】:

API 请求次数 = 发送消息 API 请求次数 + 订阅消息 API 请求次数 + 长轮询 API 请求次数;

以普通消息为例,发一条消息调用api和消费该条消息 算是调用了两次api

长轮询就是说针对每一个队列(queue),消费端会每15秒拉取一次消息,看看topic当中是否有可见的需要消费的消息。每一次拉取都算是一次调用api,都会收取费用。

所以一个topic下面如有有3个broker,每个broker有8个队列,如果该topic当中一整天都没有消息进来,那么一天就是242460*4次调用。所以建议如果消费消息不多,可以隔一段时间重启一下消费段。
长轮询是建立在消费端在线的状态下。

队列queue个数是本身实例决定的,这个目前不支持用户侧配置Topic底层对应的queue数目。并且不支持修改queue的个数

标准版实例tps用量限制

【问题描述】:

标准版实例的tps使用限制是多少

【问题回答】:

单实例收发TPS限制5000条/秒,单个实例的使用限制是保证tps最大到5000是一定有的,但是实际会超过5000,超过的性能不保障。

但是铂金版实例的tps是可以在购买的时候定制的,如果想要更加高的tps建议直接购买铂金版,因为如果在标准版实例的基础上申请调大tps,可能花费的金额会比直接购买铂金版实例还要高

计费常见问题

【问题描述及回答】:

1、
问:每天扣除 2 元,这是什么费用?
答:消息队列 RocketMQ 版费用 = API 调用费 + Topic 资源占用费。每个 Topic 资源占用费为 2 元/天。

2、
问:我昨天删除了 Topic,为什么今天会收到账单并被扣费?
答:Topic 资源占用费以每天 00:00-23:59:59 为周期进行计费,第二天收费。所以,昨天删除 Topic,昨天的计费系统已经计入,今天会出账单进行扣费,明天就不会出账单扣费。

3、
问:我没有使用消息队列 RocketMQ 版服务,为什么会扣费?
答:请查看账单,检查您是否有使用消息队列 RocketMQ 版服务
如果您不需要使用消息队列 RocketMQ 版服务,请及时删除消息队列 RocketMQ 版控制台上所有资源,避免不必要的支出

4、
问:我有看到消息队列 RocketMQ 版的扣费,但是我在控制台上看到没有开通消息队列 RocketMQ 版?
答:消息队列 RocketMQ 版处于欠费状态超过 72 小时,阿里云将暂停为您提供服务,即您不能再访问消息队列 RocketMQ 版控制台与消息队列 RocketMQ 版 API。但是您的消息队列 RocketMQ 版服务被释放之前的欠费仍然需要结清。

5、
问:如何关闭消息队列 RocketMQ 版服务?
答:请删除所有地域 Topic 资源,并将所有发送端,消费端停止。

6、
问:一天的消息总量为 631,238 条,但是通过费用查询结果:API 调用次数为 126,315,056 次,那么多 API 调用次数怎么来的?
答:API 调用次数 = 发送消息 API 调用次数 + 订阅消息 API 调用次数 + 长轮询 API 调用次数(长轮询说明:消息队列 RocketMQ 版 Consumer 为保证消息实时推送而产生的 API 调用,每个队列 15 秒一次长轮询,在此期间,若队列内有消息产生,则不计长轮询次数)。

如何查看整个实例的tps以及总存储用量

【问题描述】:

如何如何查看整个实例的tps以及该实例的总存储用量

【问题回答】:

整个实例的总tps:

取资源报表里每个topic一天当中高峰期tps最大值,然后加起来,就可以算出来总的tps

如果您要在该实例下添加新的topic,原来的topic上分配的tps会分流一部分到新创建的topic上面(如果实例下原有的所有topic的tps总和已经快达到上限)
就是说原来的topic的tps可能会降低一些,然后会分流给到新创建的topic

消息存储空间 也是有计算公式的:每个topic下每天发送的总量 相加 再乘以每条消息的字节数 就可以算出一天的大小

而且broker磁盘使用率超过总量的80%,就会去删除过期的消息,不会存在磁盘不够用的情况(过期消息:已经消费过的还没有被删除的消息)

在原有实例上升级成铂金版,支付后却多出一个新的实例?

【问题描述】:

在原有的标准版实例上直接点击铂金版升级,完成订单支付后,原有实例没有变成铂金版实例,但是却新增多出一个铂金版实例

【问题回答】:

由于之前很多用户是不想把标准版上的所有资源都升级到铂金版,所以目前是调整为升级铂金版默认生成一个新的实例。

客户侧把确认需要资源迁移到铂金版之后,再决定是否保留原来的标准版实例。

如果需要铂金版实例的接入点还是和原有实例的接入点保持一致,后端会将接入点同步成原来的

日志相关问题

升级c++版本到2.0后,日志占用磁盘问题

【问题描述】:

c++的sdk升级到2.0后日志过多,甚至导致开发环境磁盘100%,这个怎么限制日志大小

【问题答案】:

C++的tcp的sdk内置的是java的日志,目前这个日志过多,建议写个日志切割脚本,定时执行日志切割删除,目前服务端没有对日志进行定时切割和删除的动作

Ons.log客户端日志说明

【异常描述及说明】:

1、
打印信息:
[persistAll] Group: CID_XXXX ClientId: 10.31.40.100@171374#14159488#-2036649484#20931314294957812 updateConsumeOffsetToBroker MessageQueue [topic=XXXX, brokerName=qdinternetorder-02, queueId=5] 1013923

说明:
这种现象说明消息已经消费成功、并且在MQ服务端已持久化消费进度;MessageQueue里包括了消息主题、对应的brokerName,消费队列的id
解决方案:
暂无

2、
打印信息:
HeartbeatData [clientID=XXX, producerDataSet=[
ProducerData [groupName=XXXX], ProducerData [groupName=XXX]], consumerDataSet=[]]
send heart beat to broker[XX] success
说明:
该现象是向服务端发送心跳包成功,HeartbeatData是心跳相关的信息,包括客户端id、发送组信息、消费组信息
解决方案:
暂无

3、
打印信息:
[PULL_TPS] [CID_XXXX@CID_XXXX] Stats In One Minute, SUM: 0 TPS: 0.00 AVGPT: 0.00
[PULL_RT] [%RETRY%CID_XXXX@CID_XXXX] Stats In One Minute, SUM: 0 TPS: 0.00 AVGPT: 0.00
说明:
该类信息打印的是从consumeQueue中拉取消息时的TPS(每秒request的数量)
解决方案:
暂无

4、
打印信息:
[TIMEOUT_CLEAN_QUEUE]broker busy, start flow control for a while, period in queue: 905ms, size of queue: 1164
说明:
服务端压力过大、处理不了过多的请求;由于mq服务端在存储数据时是先写入pageCache,然后去刷盘、因此每隔10s会去清理过期的请求(此过程会判断缓存页是否繁忙)
解决方案:
(1)扩容,增加broker,分担压力
(2)osPageCacheBusyTimeOutMills属性值调大

5、
打印信息:
execute the pull request exception
com.aliyun.openservices.shade.com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 25 DESC: the consumer's subscription not lates
说明:
1)、updateConsumeOffsetToBroker日志是正常的,是一个定时任务,定期同步offset到Broker;

2)、theconsumer's subscription not latest这个日志在重启后是当前的一个正常处理逻辑,为了达到"Consumer集群的负载均衡"的一种机制:当一个新的consumer进程加入,客户端需要重新分配queue以实现负载均衡,此时会短暂的阻止pull请求,直到该consumer被重新分配了queue;
解决方案:
暂无

6、
打印信息:
[WRONG]mq is consuming, so can not unlock it, MessageQueue [topic=XX, brokerName=szorder2-02, queueId=1]. maybe hanged for a while, 2
说明:
进行负载均衡时,对消息处理队列尝试加锁,如果1s内还未加锁成功,说明当前消息处理队列已经有消费者在访问,不能进行解锁
解决方案:
暂无

7、
打印信息:
doRebalance, XXX-CID, add a new mq failed, MessageQueue [topic=XXXX, brokerName=szorder2-02, queueId=5], because lock failed
说明:
用户使用的是顺序Topic,为了保证单个分区中消息的顺序消费,这个会有个lock的机制。客户端有这个日志说明其中某个分区已经有客户端在消费了。
解决方案:
暂无

8、
打印信息:
get Topic [XXXXXX] RouteInfoFromNameServer is not exist value
com.aliyun.openservices.shade.com.alibaba.rocketmq.client.exception.MQClientException: CODE: 17 DESC: No topic route info in name server for the topic: TOPIC_XXXXX
See http://rocketmq.apache.org/docs/faq/ for further details.
说明:
nameServer 列表非空,可连接到 nameServer ,但 topicList 为空,或 topicList 状态 非 OK ,比如 curl 接入点 onsaddr 异常。

解决方案:
(1)AK/SK配置错误
(2)用户没有控制台于当前实例下创建了GID
(3)实例化的代码中,NameServerAddr没有配置正确
(4)确认topic权限可用,topic 要求 permission 是 6(rw-)至少为 2(-w-),用mqadmin topicRoute 可排查路由信息

9、
打印信息:
com.aliyun.openservices.ons.api.impl.authority.exception.AuthenticationException: signature validate by dauth failed
说明:
AK/SK配置错误
解决方案:
AK/SK要配置创建该GID使用的AK/SK

10、
打印信息:
NettyClientPublicExecutor_3 - execute the pull request exception
com.aliyun.openservices.shade.com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 26 DESC: subscription group [CID_XXX] does not exist,
See http://rocketmq.apache.org/docs/faq/for further details.
说明:
订阅关系没有推送到MQ服务器上
解决方案:
subscription.json文件里直接添加GID对应的信息即可

11、
打印信息:
execute the pull request exception
com.aliyun.openservices.shade.com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 24 DESC: the consumer's subscription not exist
说明:
缺少订阅关系
解决方案:
暂无

12、
打印信息:
sendKernelImpl exception, resend at once, InvokeID: -4054089080884425405, RT: 7183ms, Broker: MessageQueue [topic=xxxx, brokerName=xxx, queueId=2]
com.aliyun.openservices.shade.com.alibaba.rocketmq.remoting.exception.RemotingTimeoutException: wait response on the channel










































image.png






image.png




image.png





image.png









image.png







image.png



















版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

云服务技术课堂,各类技术课程、最佳实践输出,来好好听课吧!

官方博客