Rocket运维常见问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rocket运维常见问题相关的知识,希望对你有一定的参考价值。

参考技术A 问题描述:有时候在部署完RocketMQ集群后,尝试执行“mqadmin”一些运维命令,会出现下面的异常信息:

解决方法:可以在部署RocketMQ集群的虚拟机上执行 export NAMESRV_ADDR=ip:9876 (ip指的是集群中部署NameServer组件的机器ip地址)命令之后再使用“mqadmin”的相关命令进行查询,即可得到结果。

问题描述:同一个生产端发出消息,A消费端可消费,B消费端却无法消费,rocketMQ Console中出现:

解决方案:RocketMQ 的jar包:rocketmq-client等包应该保持生产端,消费端使用相同的version。

问题描述:当同一个topic的新增消费组启动时,消费的消息是当前的offset的消息,并未获取历史消息。
解决方案:rocketmq默认策略是从消息队列尾部,即跳过历史消息。如果想消费历史消息,则需要设置:
org.apache.rocketmq.client.consumer.DefaultMQPushConsumer#setConsumeFromWhere 。常用的有以下三种配置:
默认配置,一个新的订阅组第一次启动从队列的最后位置开始消费,后续再启动接着上次消费的进度开始消费,即跳过历史消息;

一个新的订阅组第一次启动从队列的最前位置开始消费,后续再启动接着上次消费的进度开始消费,即消费Broker未过期的历史消息;

一个新的订阅组第一次启动从指定时间点开始消费,后续再启动接着上次消费的进度开始消费,和consumer.setConsumeTimestamp()配合使用,默认是半个小时以前;

在某些情况下,Consumer需要将消费位点重置到1-2天前,这时在内存有限的Master Broker上,CommitLog会承载比较重的IO压力,影响到该Broker的其它消息的读与写。可以开启slaveReadEnable=true ,当Master Broker发现Consumer的消费位点与CommitLog的最新值的差值的容量超过该机器内存的百分比( accessMessageInMemoryMaxRatio=40% ),会推荐Consumer从Slave Broker中去读取数据,降低Master Broker的IO。

异步刷盘建议使用自旋锁,同步刷盘建议使用重入锁,调整Broker配置项useReentrantLockWhenPutMessage ,默认为false;异步刷盘建议开启TransientStorePoolEnable ;建议关闭transferMsgByHeap,提高拉消息效率;同步刷盘建议适当增大 sendMessageThreadPoolNums ,具体配置需要经过压测。

使用RocketMQ完成生产者客户端消息发送后,通常会看到如下日志打印信息:

msgId,对于客户端来说msgId是由客户端producer实例端生成的,具体来说,调用方法MessageClientIDSetter.createUniqIDBuffer() 生成唯一的Id;

offsetMsgId,offsetMsgId是由Broker服务端在写入消息时生成的(采用”IP地址+Port端口” 与“CommitLog的物理偏移量地址”做了一个字符串拼接),其中offsetMsgId就是在RocketMQ控制台直接输入查询的那个messageId。

以上是关于Rocket运维常见问题的主要内容,如果未能解决你的问题,请参考以下文章

diesel.rs 和rocket.rs:不明白为啥它需要一个数据库表

Rocket.Chat 传入 Webhook:以特定响应回答(用于 facebook 集成)

如何使用带有 Rocket 的 abonander/multipart 解析多部分表单?

使用 Rocket Chat React Native 为 ios 实现推送通知的问题

如何在生产中使用 Rocket 运行 Diesel 迁移?

推送通知在自定义应用程序中无法正常工作 [Rocket.chat]