Apache RocketMQ:一个奇怪的现象

Posted 你是小KS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache RocketMQ:一个奇怪的现象相关的知识,希望对你有一定的参考价值。

当前版本:rocketmq4.9

1. 声明

当前内容主要为本人学习和记录使用Apache RocketMQ的问题

2. 问题描述

问题描述如下:
昨天关闭了rocketmq今天再次启动rocketmq且rocketmq也启动了

  1. 无法使用生产者向TestTopic发送消息,生产者无法启动
  2. 消费者可以正常的启动并订阅TestTopic
  3. 昨天获取所有Topic时为正常显示,且可以访问系统的Topic,今天却直接返回空集合
  4. 通过topicConfigTable可以看到TestTopic存在

执行生产者和查询TestTopic的路由信息均出现一个错误:DESC: No topic route info in name server for the topic: TopicTest

通过错误提示找到官方解释

官方的解释就是:

  1. 确保你的生产者能够连接到名称服务器,且可以获取到路由元数据
  2. 确定你的名称服务器包含这个topic的路由元数据信息,你可以通过admintools使用topicRoute查询
  3. 确定你的broker还在发送心跳到名称服务器,你的生产者也是连接的同样的名称服务器
  4. 确定的topic的访问权限是rw-或至少为-w-(权限问题)

结果发现官方文档的帮助没有用,原因:通过topicConfigTable得到权限是rw-,消费者可以连接到名称服务器,且可以订阅topic,表示应该是正确的

3. 解决办法

通过按照顺序方式关闭rocketmq,然后按照顺序启动rocketmq可以解决该问题(本人的问题不是官方文档中描述的)

  1. 关闭broker
  2. 关闭namesrv
  3. 启动namesrv
  4. 启动broker
    结果发现好了,前面出现的问题都解决了

本人怀疑,可能是启动的时候出现了问题,导致看似可以操作但是却不可操作的问题,导致topicConfigTable和获取的不一致,又或者是rocketmq本身存在的bug

以上是关于Apache RocketMQ:一个奇怪的现象的主要内容,如果未能解决你的问题,请参考以下文章

RocketMQ部分数据消费不了问题排查

RocketMQ简单实现

30 RocketMQ事务消息的代码实现细节

Apache RocketMQ + Hudi 快速构建 Lakehouse

一个关于ExecutorService shutdownNow时很奇怪的现象

一文讲透Apache RocketMQ技术精华