RocketMQ常见问题及解决方案

这篇具有很好参考价值的文章主要介绍了RocketMQ常见问题及解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RocketMQ FAQ

1、消费组的消息的消费状态为NOT_CONSUME_YET

可能原因

1)消费端处理消息发生异常没有捕获或是因为其他原因,没有返回消费状态

解决方案:

消费端捕获异常,

如果需要重试,返回ConsumeConcurrentlyStatus.RECONSUME_LATER

如果不需要重试,返回ConsumeConcurrentlyStatus.RECONSUME_SUCCESS

可以在消费端增加重试次数判断,例如重试三次就返回成功

if (msgs.get(0).getReconsumeTimes() == 3) {

// 该条消息可以存储到DB或者LOG日志中,或其他处理方式

return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;// 成功

} else {

return ConsumeConcurrentlyStatus.RECONSUME_LATER;// 重试

}

2)不同的消费者consumer1,、consumer2配置了相同的单个消费组consumerGroup,订阅了多个topic和tags,此种场景下,消费端初始化消费者后,consumer1和consumer2与broker建立心跳连接是,会相互覆盖相同consumerGroup下消费的topic信息,导致部分消息消费不了

解决方案:

建议一个消费组订阅一个topic

若非要一个消费组定于多个topic,也只能初始化一个消费者实例,订阅多个topic和tags组合

eg :

 
DefaultMQPushConsumerconsumer = new DefaultMQPushConsumer("test_group", "secretId", "secretKey");

consumer.subscribe("topicA", "tagA||tagA1");

consumer.subscribe("topicB", "tagB||tagB1");

2、消息堆积

可能原因

1、消费消息速度赶不上生产消息速度

解决方案

消费速度慢的处理方式

1 提高消费并行度

绝大部分消息消费行为都属于 IO 密集型,即可能是操作数据库,或者调用 RPC,这类消费行为的消费速度在于后端数据库或者外系统的吞吐量,通过增加消费并行度,可以提高总的消费吞吐量,但是并行度增加到一定程度,反而会下降。所以,应用必须要设置合理的并行度。 如下有几种修改消费并行度的方法:

  • 同一个 ConsumerGroup 下,通过增加 Consumer 实例数量来提高并行度(需要注意的是超过订阅队列数的 Consumer 实例无效)。可以通过加机器,或者在已有机器启动多个进程的方式。
  • 提高单个 Consumer 的消费并行线程,通过修改参数 consumeThreadMin、consumeThreadMax实现。

2 批量方式消费

某些业务流程如果支持批量方式消费,则可以很大程度上提高消费吞吐量,例如订单扣款类应用,一次处理一个订单耗时 1 s,一次处理 10 个订单可能也只耗时 2 s,这样即可大幅度提高消费的吞吐量,通过设置 consumer的 consumeMessageBatchMaxSize 返个参数,默认是 1,即一次只消费一条消息,例如设置为 N,那么每次消费的消息数小于等于 N。

3 跳过非重要消息

发生消息堆积时,如果消费速度一直追不上发送速度,如果业务对数据要求不高的话,可以选择丢弃不重要的消息。例如,当某个队列的消息数堆积到100000条以上,则尝试丢弃部分或全部消息,这样就可以快速追上发送消息的速度。示例代码如下:

 
public ConsumeConcurrentlyStatus consumeMessage(

    List<MessageExt> msgs,

    ConsumeConcurrentlyContext context) {

    long offset = msgs.get(0).getQueueOffset();

    String maxOffset =

    msgs.get(0).getProperty(Message.PROPERTY_MAX_OFFSET);

    long diff = Long.parseLong(maxOffset) - offset;

    if (diff > 100000) {

        // TODO 消息堆积情况的特殊处理

        return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;

    }

    // TODO 正常消费过程

    return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;

}

4 优化每条消息消费过程

举例如下,某条消息的消费过程如下:

  • 根据消息从 DB 查询【数据 1】
  • 根据消息从 DB 查询【数据 2】
  • 复杂的业务计算
  • 向 DB 插入【数据 3】
  • 向 DB 插入【数据 4】

这条消息的消费过程中有4次与 DB的 交互,如果按照每次 5ms 计算,那么总共耗时 20ms,假设业务计算耗时 5ms,那么总过耗时 25ms,所以如果能把 4 次 DB 交互优化为 2 次,那么总耗时就可以优化到 15ms,即总体性能提高了 40%。所以应用如果对时延敏感的话,可以把DB部署在SSD硬盘,相比于SCSI磁盘,前者的RT会小很多。

3、消费组不在线 NOT_ONLINE

可能原因

1)消费者未启动

解决方案

启动消费者服务

2)网络未打通,可使用telnet命令测试,ping命令可能会不准确(服务器可能会禁ping)

解决方案

联系运维打通网络文章来源地址https://www.toymoban.com/news/detail-404190.html

到了这里,关于RocketMQ常见问题及解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RabbitMQ详解与常见问题解决方案

    RabbitMQ 是一个开源的消息中间件,使用 Erlang 语言开发。这种语言天生非常适合分布式场景,RabbitMQ 也就非常适用于在分布式应用程序之间传递消息。RabbitMQ 有非常多显著的特点: 消息传递模式 :RabbitMQ 支持多种消息传递模式,包括发布/订阅、点对点和工作队列等,使其更

    2024年03月15日
    浏览(72)
  • vlc option以及常见问题解决方案

    2024年02月08日
    浏览(264)
  • 常见后端数据存储问题解决方案

    1、mysql数据准确性        常见电商系统中,如订单服务、现金券服务、活动类服务等,这类服务中经常会出现一些并发更新数据的情况,如何保证数据准确性。虽然有些操作可通过\\\"状态\\\"字段做了类似乐观锁的处理。但理论上还是会出现ABA的问题,而且规则不够统一,不同

    2023年04月18日
    浏览(37)
  • SpringBoot —— 整合RabbitMQ常见问题及解决方案

    企业中最常用的消息中间件既不是RocketMQ,也不是Kafka,而是RabbitMQ。 RocketMQ很强大,但主要是阿里推广自己的云产品而开源出来的一款消息队列,其实中小企业用RocketMQ的没有想象中那么多。 至于Kafka,主要还是用在大数据和日志采集方面,除了一些公司有特定的需求会使用

    2023年04月12日
    浏览(86)
  • HBase实际应用中常见的问题 解决方案

    HBase 是一个分布式的、面向列的开源数据库,通常用于处理大规模数据。在实际应用中,可能会遇到一些常见问题,以下是一些常见问题及其解决方案: 性能问题 : 问题 :HBase 性能下降,读写延迟增加。 解决方案 :可以通过增加 Region Server、优化 HDFS、调整 HBase 配置参数

    2024年01月19日
    浏览(39)
  • 微信小程序:小程序常见问题及解决方案

    在小程序中使用原生的表单组件时,在有弹出框出现的情况下,原生表单组件会出现在遮罩层上面,且会造成事件穿透的情况。 解决方案一: 使用cover-view,cover-view比原生组件的层级更高,或者说也是一种原生组件,不过在cover-view的子组件只能是coveri-view、cover-image,对于包

    2024年02月10日
    浏览(70)
  • BurpSuite【安装配置、使用细节、常见问题解决方案等】

    问题描述 使用某博客所述方法安装BurpSuite后,当天使用正常,但过几天后发现无法打开。 可能原因 JAVA安装路径下的文件夹名(父级文件夹)被修改过,但是系统环境变量中的路径值没有相应修改。 解决方案 检查系统环境变量中JAVA_HOME和Path的路径值(根据个人安装时的配置

    2024年02月11日
    浏览(40)
  • 在Mac上安装SQLsever,常见问题及解决方案

    前言: 最近入手了新的Mac M2 arm 框架的 苹果电脑,公司新项目采用SQLsever2019版本,在Mac上安装SQLsever千难万阻,查阅很多资料最后寻求的解决方案,记录如下,供大家参考。 说下大致的安装步骤和里面踩的坑, 通篇阅读后再动手 首先Mac想要安装SQLsever,通过docker去拉去镜像

    2024年02月10日
    浏览(43)
  • 【大数据安全-Kerberos】Kerberos常见问题及解决方案

    可以用来帮助诊断 Kerberos 相关问题的原因并实施解决方案的指南。 javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)] 此消息表明一个操作尝试要求以 Kerberos 的 user/host@realm 身份认证的操作,但票据 cac

    2024年02月05日
    浏览(52)
  • 运行 `npm install` 时的常见问题与解决方案

    描述: 运行 npm install 时,可能会遇到网络连接问题,导致无法正常下载依赖包。 报错示例: npm ERR! network connection timed out npm ERR! connect ETIMEDOUT npm ERR! getaddrinfo EAI_AGAIN 解决方案: 确保你的计算机已连接到互联网。可以尝试打开浏览器,访问其他网页来确认网络连接正常。 检

    2024年02月07日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包