Rocketmq5.1.1的版本的k8s部署proxy和broker一起启动,这个时候broker?[阿里云消息队列MQ]

Rocketmq5.1.1的版本的k8s部署proxy和broker一起启动,这个时候broker还没启动完成 nameserver里面没有topic信息 也无法创建topic 然后proxy会报如下错误, 然后会重启(k8s重新拉起):

2023-06-16 16:08:42 WARN main – get Topic [DefaultHeartBeatSyncerTopic] RouteInfoFromNameServer is not exist value 2023-06-16 16:08:42 WARN main – get Topic [DefaultHeartBeatSyncerTopic] RouteInfoFromNameServer is not exist value 2023-06-16 16:08:42 WARN main – get Topic [rocketmq-standalone] RouteInfoFromNameServer is not exist value 2023-06-16 16:08:42 ERROR main – create topic DefaultHeartBeatSyncerTopic failed. org.apache.rocketmq.client.exception.MQClientException: CODE: 17 DESC: No topic route info in name server for the topic这个感觉不太合理 如果创建不了topic也不应该让程序直接宕掉,麻烦帮忙看下 我觉得这个地方应该有重试机制好点 不要直接宕掉,刚试了下metricsExporterType=PROM 默认端口是5557 但是我把它在Prometheus的配置里面,并没有任何连接信息,显示的是连接拒绝 这个是还需要配置什么参数吗 我开启了broker的acl

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
8 条回复 A 作者 M 管理员
  1. 根据您提供的信息,问题可能出现在 RocketMQ 5.1.1 版本的 K8s 部署中。以下是对您遇到的问题的解释和建议:

    1. 关于 Proxy 报错和重启:在启动 Proxy 的过程中,如果 Broker 还没有完全启动完成,可能会导致 Proxy 无法获取 RouteInfo(路由信息)并创建 Topic,从而报错并重启。这是因为 Proxy 需要获取 Topic 的路由信息才能正常工作。

    为了解决这个问题,您可以尝试增加 Proxy 的重试机制,使其在获取不到路由信息时进行重试,而不是直接宕掉。您可以检查 Proxy 配置文件中的相关参数,如 namesrvAddr(NameServer 的地址)和 retryTimesWhenSendFailed(发送失败时的重试次数),并进行适当的调整。

    1. 关于 Metrics Exporter(指标导出器):根据您的描述,您已经将 Metrics Exporter 的类型设置为 Prometheus,并配置了默认的端口为 5557。但是在 Prometheus 的配置中,连接被拒绝,这可能是由于未正确配置 Metrics Exporter 的参数导致的。

    为了解决这个问题,您需要确保在 Prometheus 的配置文件中正确指定了 Metrics Exporter 的地址和端口。您可以检查 Prometheus 的配置文件,找到与 RocketMQ 相关的配置项,并确认其正确性。

    此外,如果您已经启用了 Broker 的 ACL(访问控制列表),还需要确保 Metrics Exporter 在连接时具有足够的权限。您可以根据 RocketMQ 的文档或联系阿里云的技术支持,获取有关 Metrics Exporter 的详细配置和权限设置的指导。

    如果问题

  2. 在RocketMQ 5.1.1的版本中,Proxy和Broker是可以一起部署的,但是在启动时,Broker需要先于Proxy启动。因为Proxy是通过访问NameServer获取Topic信息,而NameServer是通过向Broker注册获取Topic信息的,因此如果Broker还未启动完成,NameServer中就无法获取到Topic信息,导致Proxy启动时无法获取到Topic信息,从而无法为消费者提供服务。

    解决这个问题的方法是,在启动Proxy之前,先启动Broker并等待Broker启动完成后再启动Proxy。可以通过在Kubernetes中使用livenessProbe和readinessProbe探针来实现这一点,以确保Broker启动完成后再启动Proxy。

    至于Proxy报错的问题,可以考虑增加重试机制,例如在获取Topic信息时出现错误时,可以等待一段时间后再次尝试获取,直到成功为止。另外,也可以考虑在程序出现异常时进行捕获和处理,避免程序直接宕掉。

  3. 楼主你好,这个问题可能是由于proxy启动的过早,导致nameserver还没有准备好topic信息。建议增加一个等待时间,在proxy启动之前等待nameserver准备好topic信息。

    你可以尝试在proxy容器中执行以下命令来等待nameserver准备好:

    while true; do nslookup nameserver && break; done

    这个命令会一直执行nslookup命令,直到能够成功解析出nameserver。在此期间,proxy会一直等待。当nameserver准备好后,proxy才会启动,并且可以成功访问nameserver上的topic信息。

  4. 这个错误可能是因为在启动k8s上的RocketMQ集群时,没有设置正确的NameServer地址,导致在初始化阶段无法解析到对应的Topic信息。为了避免程序直接宕掉,您可以考虑加入重试机制。您可以在创建Topic失败后,添加一段等待时间,然后再次尝试创建。例如,可以将等待时间设置为5秒钟。 关于MetricsExporter,它是用于将RocketMQ集群的性能指标(如队列、队列监控、路由、连接等)输出到Prometheus上的工具。在配置MetricsExporter时,需要指定一个Prometheus的地址。如果您没有配置,则默认端口是5557,这意味着默认情况下MetricsExporter会监听该端口。如果您在Prometheus上没有任何连接信息,可能是MetricsExporter没有正常运行,您可以检查一下MetricsExporter的配置是否正确。

  5. 在您的部署环境中,因为 Proxy 与 Broker 同时启动,导致 Proxy 连接 NameServer 时可能会出现 Topic 不存在的错误。这是因为在 RocketMQ 中,Topic 的路由信息需要在 NameServer 注册后才能被查找到。而在您使用的部署方式下,Broker 可能还未完成启动和注册到 NameServer 上,因此无法获取到相应 Topic 的路由信息。

    针对这种情况,建议您可以通过以下方法来解决:

    1. 将 Broker 和 Proxy 分开部署,并分别启动:将 Broker 和 Proxy 分开部署并分别启动,以便确保 Broker 能够正常启动和注册到 NameServer 上,然后再启动 Proxy。

    2. 增加重试机制:在 Proxy 启动时增加一个重试机制,在连接 NameServer 时如果出现 Topic 不存在的错误,可以尝试进行多次重试,直至成功连接或者达到最大重试次数。

    至于 Metrics Exporter 的问题,可以检查一下防火墙是否有限制,或者是检查配置文件是否正确。具体的问题需要根据实际情况进行排除和解决。

  6. 这个问题主要是由于在启动proxy时,所需的topic信息还没有在nameserver中注册。这意味着proxy会一直查询nameserver以查找必要的路由信息,直到它找到了或者达到了重试次数限制。

    这种情况下,您可以考虑在proxy的配置文件中添加一个重试机制,以在等待nameserver中的topic信息注册完成之前,尝试初始化程序。这样即使topic信息还没有完全注册到nameserver中,也不会导致程序宕机。

    另外,关于metricsExporterType=PROM的问题,请确保您的Prometheus配置中已经正确配置了该端口,并且broker的防火墙也允许该端口的流量通过。如果所有这些都已经配置正确,那么您可以尝试重新启动broker来确保metricsExporterType=PROM设置已成功应用。如果您开启了broker的acl,还需要确保Prometheus可以通过acl进行访问。

    最后,建议您升级RocketMQ到最新版本,以便充分利用改进和修复的特性,同时可以避免旧版本可能存在的错误和问题。

  7. prome上可以看看这个target的状态,还要prome和broker网络要通,exporter应该不用acl验证的,可以设置下启动顺序, 先启动broker,再启动proxy, 避免不必要的异常日志,此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”