当前位置: 首页 > news >正文

RocketMQ Promethus Exporter

介绍​

Rocketmq-exporter 是用于监控 RocketMQ broker 端和客户端所有相关指标的系统,通过 mqAdmin 从 broker 端获取指标值后封装成 87 个 cache。

警告

过去版本曾是 87 个 concurrentHashMap,由于 Map 不会删除过期指标,所以一旦有 label 变动就会生成一个新的指标,旧的无用指标无法自动删除,久而久之造成内存溢出。而使用 Cache 结构可可以实现过期删除,且过期时间可配置。

Rocketmq-expoter 获取监控指标的流程如下图所示,Expoter 通过 MQAdminExt 向 MQ 集群请求数据,请求到的数据通过 MetricService 规范化成 Prometheus 需要的格式,然后通过 /metics 接口暴露给 Promethus。 

957681249485

Metric 结构​

Metric 类位于 org.apache.rocketmq.expoter.model.metrics 包下,实质上是一些实体类,每个实体类代表一类指标, 总共 14 个 Metric 类。这些类作为 87 个 Cache 的 key, 用不同的 label 值进行区分。

实体类中包含了 LABEL 的三个维度:BROKER、CONSUMER、PRODUCER

  • broker 相关 metric 类有: BrokerRuntimeMetric、BrokerMetric、DLQTopicOffsetMetric、TopicPutNumMetric

  • 消费者相关类有: ConsumerRuntimeConsumeFailedMsgsMetric 、ConsumerRuntimeConsumeFailedTPSMetric 、ConsumerRuntimeConsumeOKTPSMetric、ConsumerRuntimeConsumeRTMetric、ConsumerRuntimePullRTMetric、ConsumerRuntimePullTPSMetric、ConsumerCountMetric、ConsumerMetric、ConsumerTopicDiffMetric

  • 生产者相关 metric 类有: ProducerMetric

Prometheus 拉取 metrics 的过程​

RocketMQ-exporter 项目和 Prometheus 相当于服务器和客户端的关系,RocketMQ-exporter 项目引入了 Prometheus 的 client 包,该包中规定了需要获取的信息的类型即项目中的 MetricFamilySamples 类,Prometheus 向 expoter 请求 metrics,expoter 将信息封装成相应的类型之后返回给 Prometheus。

rocketmq-expoter 项目启动后,会获取 rocketmq 的各项 metrics 收集到 mfs 对象中,当浏览器或 Prometheus 访问相应的接口时,会通过 service 将 mfs 对象中的 samples 生成 Prometheus 所支持的格式化数据。主要包含以下步骤:

浏览器通过访问 ip:5557/metrics,会调用 RMQMetricsController 类下的 metrics 方法,其中 ip 为 rocketmq-expoter 项目运行的主机 ip

    private void metrics(HttpServletResponse response) throws IOException {StringWriter writer = new StringWriter();metricsService.metrics(writer);response.setHeader("Content-Type", "text/plain; version=0.0.4; charset=utf-8");response.getOutputStream().print(writer.toString());
}

通过新建 StringWriter 对象用于收集 metrics 指标,调用 MetricsService 类中的方法 metrics 将 expoter 中提取到的指标收集到 writer 对象中,最后将收集到的指标输出到网页上。

收集到的指标格式为:

<metric name>{<label name>=<label value>, ...} <metric value>

如:

rocketmq_group_diff{group="rmq_group_test_20220114",topic="fusion_console_tst",countOfOnlineConsumers="0",msgModel="1",} 23.0

MetricCollectTask 类中的 5 个定时任务​

MetricCollectTask 类中有 5 个定时任务,分别为 collectTopicOffset、collectConsumerOffset、collectBrokerStatsTopic、collectBrokerStats 和 collectBrokerRuntimeStats。用于收集消费位点信息以及 Broker 状态信息等。其 cron 表达式为:cron: 15 0/1 * * * ?,表示每分钟会收集一次。其核心功能是通过 mqAdminExt 对象从集群中获取 broker 中的信息,然后将其添加到对应的 87 个监控指标中,以 collectTopicOffset 为例:

  1. 首先初始化TopicList对象,通过mqAdminExt.fetchAllTopicList()方法获取到集群的所有topic信息。
    TopicList topicList = null;try {  topicList = mqAdminExt.fetchAllTopicList();
} catch (Exception ex) {log.error(String.format("collectTopicOffset-exception comes getting topic list from namesrv, address is %s",JSON.toJSONString(mqAdminExt.getNameServerAddressList())));return;}

  1. 将 topic 加入到 topicSet 中,循环遍历每一个 topic,通过 mqAdminExt.examineTopicStats(topic)函数来检查 topic 状态。
    Set < String > topicSet = topicList != null ? topicList.getTopicList() : null;for (String topic: topicSet) {TopicStatsTable topicStats = null;try {topicStats = mqAdminExt.examineTopicStats(topic);} catch (Exception ex) {log.error(String.format("collectTopicOffset-getting topic(%s) stats error. the namesrv address is %s",topic,JSON.toJSONString(mqAdminExt.getNameServerAddressList())));continue;}

  1. 初始化 topic 状态 set,用于用于按 broker 划分的 topic 信息位点的 hash 表 brokerOffsetMap,以及一个用于按 broker 名字为 key 的用于存储更新时间戳的 hash 表 brokerUpdateTimestampMap。
        Set<Map.Entry<MessageQueue, TopicOffset>> topicStatusEntries = topicStats.getOffsetTable().entrySet();HashMap<String, Long> brokerOffsetMap = new HashMap<>();HashMap<String, Long> brokerUpdateTimestampMap = new HashMap<>();for (Map.Entry<MessageQueue, TopicOffset> topicStatusEntry : topicStatusEntries) {MessageQueue q = topicStatusEntry.getKey();TopicOffset offset = topicStatusEntry.getValue();if (brokerOffsetMap.containsKey(q.getBrokerName())) {brokerOffsetMap.put(q.getBrokerName(), brokerOffsetMap.get(q.getBrokerName()) + offset.getMaxOffset());} else {brokerOffsetMap.put(q.getBrokerName(), offset.getMaxOffset());}if (brokerUpdateTimestampMap.containsKey(q.getBrokerName())) {if (offset.getLastUpdateTimestamp() > brokerUpdateTimestampMap.get(q.getBrokerName())) {brokerUpdateTimestampMap.put(q.getBrokerName(), offset.getLastUpdateTimestamp());}} else {brokerUpdateTimestampMap.put(q.getBrokerName(),offset.getLastUpdateTimestamp());}}

  1. 最后通过遍历 brokerOffsetMap 中的每一项,通过调用 metricsService 获取到 metricCollector 对象,调用 RMQMetricsCollector 类中的 addTopicOffsetMetric 方法,将相应的值添加到 RMQMetricsCollector 类中 87 个指标对应的其中一个指标的 cache 中。
 Set<Map.Entry<String, Long>> brokerOffsetEntries = brokerOffsetMap.entrySet();for (Map.Entry<String, Long> brokerOffsetEntry : brokerOffsetEntries) {metricsService.getCollector().addTopicOffsetMetric(clusterName, brokerOffsetEntry.getKey(), topic,brokerUpdateTimestampMap.get(brokerOffsetEntry.getKey()), brokerOffsetEntry.getValue());}}log.info("topic offset collection task finished...." + (System.currentTimeMillis() - start));
}

Rocketmq-exporter 收集指标流程图​

95680458234

快速开始​

配置 application.yml

application.yml 中重要的配置主要有:

  • server.port 设置 promethus 监听 rocketmq-exporter 的端口, 默认为 5557

  • rocketmq.config.webTelemetryPath 配置 promethus 获取指标的路径,默认为 /metrics ,使用默认值即可.

  • rocketmq.config.enableACL 如果 RocketMQ 集群开启了 ACL 验证,需要配置为 true, 并在 accessKey 和 secretKey 中配置相应的 ak, sk.

  • rocketmq.config.outOfTimeSeconds 用于配置存储指标和相应的值的过期时间,若超过该时间,cache 中的 key 对应的节点没有发生写更改,则会进行删除.一般配置为 60s 即可(根据 promethus 获取指标的时间间隔进行合理配置,只要保证过期时间大于等于 promethus 收集指标的时间间隔即可)

  • task..cron 配置 exporter 从 broker 拉取指标的定时任务的时间间隔,默认值为"15 0/1 * * ?" 每分钟的 15s 拉取一次指标.

启动 exporter 项目​

按照 promethus 官网配置启动​

配置 promethus 的 static_config: -targets 为 exporter 的启动 IP 和端口,如: localhost:5557

访问 promethus 页面​

本地启动默认为: localhost:9090 ,则可对收集到的指标值进行查看,如下图所示:

906876098423

提示

为了达到更好的可视化效果,观察指标值变化趋势, promethus 搭配 grafana 效果更佳哦!

可观测性指标​

可观测性指标主要包括两个大类: 服务端指标和客户端指标, 服务端指标由服务端直接生成, 客户端指标在客户端产生, 由服务端通过 rpc 请求客户端获取到. 客户端指标又可细分为生产端指标和消费端指标.所有 87 个可观测性指标及其主要含义如下:

服务端指标

服务端指标​

指标名称含义对应Broker指标名
rocketmq_broker_tpsBroker级别的生产TPS
rocketmq_broker_qpsBroker级别的消费QPS
rocketmq_broker_commitlog_diffBroker组从节点同步落后消息size
rocketmq_brokeruntime_pmdt_0ms服务端开始处理写请求到完成写入的耗时(0ms)putMessageDistributeTime
rocketmq_brokeruntime_pmdt_0to10ms服务端开始处理写请求到完成写入的耗时(0~10ms)
rocketmq_brokeruntime_pmdt_10to50ms服务端开始处理写请求到完成写入的耗时(10~50ms)
rocketmq_brokeruntime_pmdt_50to100ms服务端开始处理写请求到完成写入的耗时(50~100ms)
rocketmq_brokeruntime_pmdt_100to200ms服务端开始处理写请求到完成写入的耗时(100~200ms)
rocketmq_brokeruntime_pmdt_200to500ms服务端开始处理写请求到完成写入的耗时(200~500ms)
rocketmq_brokeruntime_pmdt_500to1s服务端开始处理写请求到完成写入的耗时(500~1000ms)
rocketmq_brokeruntime_pmdt_1to2s服务端开始处理写请求到完成写入的耗时(1~2s)
rocketmq_brokeruntime_pmdt_2to3s服务端开始处理写请求到完成写入的耗时(2~3s)
rocketmq_brokeruntime_pmdt_3to4s服务端开始处理写请求到完成写入的耗时(3~4s)
rocketmq_brokeruntime_pmdt_4to5s服务端开始处理写请求到完成写入的耗时(4~5s)
rocketmq_brokeruntime_pmdt_5to10s服务端开始处理写请求到完成写入的耗时(5~10s)
rocketmq_brokeruntime_pmdt_10stomore服务端开始处理写请求到完成写入的耗时(> 10s)
rocketmq_brokeruntime_dispatch_behind_bytes到现在为止,未被分发(构建索引之类的操作)的消息bytesdispatchBehindBytes
rocketmq_brokeruntime_put_message_size_totalbroker写入消息size的总和putMessageSizeTotal
rocketmq_brokeruntime_put_message_average_sizebroker写入消息的平均大小putMessageAverageSize
rocketmq_brokeruntime_remain_transientstore_buffer_numbsTransientStorePool 中队列的容量remainTransientStoreBufferNumbs
rocketmq_brokeruntime_earliest_message_timestampbroker存储的消息最早的时间戳earliestMessageTimeStamp
rocketmq_brokeruntime_putmessage_entire_time_maxbroker自运行以来,写入消息耗时的最大值putMessageEntireTimeMax
rocketmq_brokeruntime_start_accept_sendrequest_time开始接受发送请求的时间startAcceptSendRequestTimeStamp
rocketmq_brokeruntime_putmessage_times_totalbroker写入消息的总次数putMessageTimesTotal
rocketmq_brokeruntime_getmessage_entire_time_maxbroker自启动以来,处理消息拉取的最大耗时getMessageEntireTimeMax
rocketmq_brokeruntime_pagecache_lock_time_millspageCacheLockTimeMills
rocketmq_brokeruntime_commitlog_disk_ratiocommitLog所在磁盘的使用比例commitLogDiskRatio
rocketmq_brokeruntime_dispatch_maxbufferbroker没有计算,一直为0dispatchMaxBuffer
rocketmq_brokeruntime_pull_threadpoolqueue_capacity处理拉取请求线程池队列的容量pullThreadPoolQueueCapacity
rocketmq_brokeruntime_send_threadpoolqueue_capacity处理发送请求线程池队列的容量sendThreadPoolQueueCapacity
rocketmq_brokeruntime_query_threadpool_queue_capacity处理查询请求线程池队列的容量queryThreadPoolQueueCapacity
rocketmq_brokeruntime_pull_threadpoolqueue_size处理拉取请求线程池队列的实际sizepullThreadPoolQueueSize
rocketmq_brokeruntime_query_threadpoolqueue_size处理查询请求线程池队列的实际sizequeryThreadPoolQueueSize
rocketmq_brokeruntime_send_threadpool_queue_size处理send请求线程池队列的实际sizesendThreadPoolQueueSize
rocketmq_brokeruntime_pull_threadpoolqueue_headwait_timemills处理拉取请求线程池队列的队头任务等待时间pullThreadPoolQueueHeadWaitTimeMills
rocketmq_brokeruntime_query_threadpoolqueue_headwait_timemills处理查询请求线程池队列的队头任务等待时间queryThreadPoolQueueHeadWaitTimeMills
rocketmq_brokeruntime_send_threadpoolqueue_headwait_timemills处理发送请求线程池队列的队头任务等待时间sendThreadPoolQueueHeadWaitTimeMills
rocketmq_brokeruntime_msg_gettotal_yesterdaymorning到昨晚12点为止,读取消息的总次数msgGetTotalYesterdayMorning
rocketmq_brokeruntime_msg_puttotal_yesterdaymorning到昨晚12点为止,写入消息的总次数msgPutTotalYesterdayMorning
rocketmq_brokeruntime_msg_gettotal_todaymorning到今晚12点为止,读取消息的总次数msgGetTotalTodayMorning
rocketmq_brokeruntime_msg_puttotal_todaymorning到昨晚12点为止,写入消息的总次数putMessageTimesTotal
rocketmq_brokeruntime_msg_put_total_today_now每个broker到现在为止,写入的消息次数msgPutTotalTodayNow
rocketmq_brokeruntime_msg_gettotal_today_now每个broker到现在为止,读取的消息次数msgGetTotalTodayNow
rocketmq_brokeruntime_commitlogdir_capacity_freecommitLog所在目录的可用空间commitLogDirCapacity
rocketmq_brokeruntime_commitlogdir_capacity_totalcommitLog所在目录的总空间
rocketmq_brokeruntime_commitlog_maxoffsetcommitLog的最大offsetcommitLogMaxOffset
rocketmq_brokeruntime_commitlog_minoffsetcommitLog的最小offsetcommitLogMinOffset
rocketmq_brokeruntime_remain_howmanydata_toflushremainHowManyDataToFlush
rocketmq_brokeruntime_getfound_tps600600s内getMessage时get到消息的平均TPSgetFoundTps
rocketmq_brokeruntime_getfound_tps6060s内getMessage时get到消息的平均TPS
rocketmq_brokeruntime_getfound_tps1010s内getMessage时get到消息的平均TPS
rocketmq_brokeruntime_gettotal_tps600600s内getMessage次数的平均TPSgetTotalTps
rocketmq_brokeruntime_gettotal_tps6060s内getMessage次数的平均TPS
rocketmq_brokeruntime_gettotal_tps1010s内getMessage次数的平均TPS
rocketmq_brokeruntime_gettransfered_tps600getTransferedTps
rocketmq_brokeruntime_gettransfered_tps60
rocketmq_brokeruntime_gettransfered_tps10
rocketmq_brokeruntime_getmiss_tps600600s内getMessage时没有get到消息的平均TPSgetMissTps
rocketmq_brokeruntime_getmiss_tps6060s内getMessage时没有get到消息的平均TPS
rocketmq_brokeruntime_getmiss_tps1010s内getMessage时没有get到消息的平均TPS
rocketmq_brokeruntime_put_tps600600s内写入消息次数的平均TPSputTps
rocketmq_brokeruntime_put_tps6060s内写入消息次数的平均TPS
rocketmq_brokeruntime_put_tps1010s内写入消息次数的平均TPS

生产端指标

生产端指标​

指标名称含义
rocketmq_producer_offsettopic当前时间的最大offset
rocketmq_topic_retry_offset重试Topic当前时间的最大offset
rocketmq_topic_dlq_offset死信Topic当前时间的最大offset
rocketmq_producer_tpsTopic在一个Broker组上的生产TPS
rocketmq_producer_message_sizeTopic在一个Broker组上的生产消息大小的TPS
rocketmq_queue_producer_tps队列级别生产TPS
rocketmq_queue_producer_message_size队列级别生产消息大小的TPS

消费端指标### 消费端指标

指标名称含义
rocketmq_group_diff消费组消息堆积消息数
rocketmq_group_retrydiff消费组重试队列堆积消息数
rocketmq_group_dlqdiff消费组死信队列堆积消息数
rocketmq_group_count消费组内消费者个数
rocketmq_client_consume_fail_msg_count过去1h消费者消费失败的次数
rocketmq_client_consume_fail_msg_tps消费者消费失败的TPS
rocketmq_client_consume_ok_msg_tps消费者消费成功的TPS
rocketmq_client_consume_rt消息从拉取到被消费的时间
rocketmq_client_consumer_pull_rt客户端拉取消息的时间
rocketmq_client_consumer_pull_tps客户端拉取消息的TPS
rocketmq_consumer_tps每个Broker组上订阅组的消费TPS
rocketmq_group_consume_tps订阅组当前消费TPS(对rocketmq_consumer_tps按broker聚合)
rocketmq_consumer_offset订阅组在一个broker组上当前的消费Offset
rocketmq_group_consume_total_offset订阅组当前消费的Offset(对rocketmq_consumer_offset按broker聚合)
rocketmq_consumer_message_size订阅组在一个broker组上消费消息大小的TPS
rocketmq_send_back_nums订阅组在一个broker组上消费失败,写入重试消息的次数
rocketmq_group_get_latency_by_storetime消费组消费延时,exporter get到消息后与当前时间相减
指标名称含义对应Broker指标名
rocketmq_broker_tpsBroker级别的生产TPS
rocketmq_broker_qpsBroker级别的消费QPS
rocketmq_broker_commitlog_diffBroker组从节点同步落后消息size
rocketmq_brokeruntime_pmdt_0ms服务端开始处理写请求到完成写入的耗时(0ms)putMessageDistributeTime
rocketmq_brokeruntime_pmdt_0to10ms服务端开始处理写请求到完成写入的耗时(0~10ms)
rocketmq_brokeruntime_pmdt_10to50ms服务端开始处理写请求到完成写入的耗时(10~50ms)
rocketmq_brokeruntime_pmdt_50to100ms服务端开始处理写请求到完成写入的耗时(50~100ms)
rocketmq_brokeruntime_pmdt_100to200ms服务端开始处理写请求到完成写入的耗时(100~200ms)
rocketmq_brokeruntime_pmdt_200to500ms服务端开始处理写请求到完成写入的耗时(200~500ms)
rocketmq_brokeruntime_pmdt_500to1s服务端开始处理写请求到完成写入的耗时(500~1000ms)
rocketmq_brokeruntime_pmdt_1to2s服务端开始处理写请求到完成写入的耗时(1~2s)
rocketmq_brokeruntime_pmdt_2to3s服务端开始处理写请求到完成写入的耗时(2~3s)
rocketmq_brokeruntime_pmdt_3to4s服务端开始处理写请求到完成写入的耗时(3~4s)
rocketmq_brokeruntime_pmdt_4to5s服务端开始处理写请求到完成写入的耗时(4~5s)
rocketmq_brokeruntime_pmdt_5to10s服务端开始处理写请求到完成写入的耗时(5~10s)
rocketmq_brokeruntime_pmdt_10stomore服务端开始处理写请求到完成写入的耗时(> 10s)
rocketmq_brokeruntime_dispatch_behind_bytes到现在为止,未被分发(构建索引之类的操作)的消息bytesdispatchBehindBytes
rocketmq_brokeruntime_put_message_size_totalbroker写入消息size的总和putMessageSizeTotal
rocketmq_brokeruntime_put_message_average_sizebroker写入消息的平均大小putMessageAverageSize
rocketmq_brokeruntime_remain_transientstore_buffer_numbsTransientStorePool 中队列的容量remainTransientStoreBufferNumbs
rocketmq_brokeruntime_earliest_message_timestampbroker存储的消息最早的时间戳earliestMessageTimeStamp
rocketmq_brokeruntime_putmessage_entire_time_maxbroker自运行以来,写入消息耗时的最大值putMessageEntireTimeMax
rocketmq_brokeruntime_start_accept_sendrequest_time开始接受发送请求的时间startAcceptSendRequestTimeStamp
rocketmq_brokeruntime_putmessage_times_totalbroker写入消息的总次数putMessageTimesTotal
rocketmq_brokeruntime_getmessage_entire_time_maxbroker自启动以来,处理消息拉取的最大耗时getMessageEntireTimeMax
rocketmq_brokeruntime_pagecache_lock_time_millspageCacheLockTimeMills
rocketmq_brokeruntime_commitlog_disk_ratiocommitLog所在磁盘的使用比例commitLogDiskRatio
rocketmq_brokeruntime_dispatch_maxbufferbroker没有计算,一直为0dispatchMaxBuffer
rocketmq_brokeruntime_pull_threadpoolqueue_capacity处理拉取请求线程池队列的容量pullThreadPoolQueueCapacity
rocketmq_brokeruntime_send_threadpoolqueue_capacity处理发送请求线程池队列的容量sendThreadPoolQueueCapacity
rocketmq_brokeruntime_query_threadpool_queue_capacity处理查询请求线程池队列的容量queryThreadPoolQueueCapacity
rocketmq_brokeruntime_pull_threadpoolqueue_size处理拉取请求线程池队列的实际sizepullThreadPoolQueueSize
rocketmq_brokeruntime_query_threadpoolqueue_size处理查询请求线程池队列的实际sizequeryThreadPoolQueueSize
rocketmq_brokeruntime_send_threadpool_queue_size处理send请求线程池队列的实际sizesendThreadPoolQueueSize
rocketmq_brokeruntime_pull_threadpoolqueue_headwait_timemills处理拉取请求线程池队列的队头任务等待时间pullThreadPoolQueueHeadWaitTimeMills
rocketmq_brokeruntime_query_threadpoolqueue_headwait_timemills处理查询请求线程池队列的队头任务等待时间queryThreadPoolQueueHeadWaitTimeMills
rocketmq_brokeruntime_send_threadpoolqueue_headwait_timemills处理发送请求线程池队列的队头任务等待时间sendThreadPoolQueueHeadWaitTimeMills
rocketmq_brokeruntime_msg_gettotal_yesterdaymorning到昨晚12点为止,读取消息的总次数msgGetTotalYesterdayMorning
rocketmq_brokeruntime_msg_puttotal_yesterdaymorning到昨晚12点为止,写入消息的总次数msgPutTotalYesterdayMorning
rocketmq_brokeruntime_msg_gettotal_todaymorning到今晚12点为止,读取消息的总次数msgGetTotalTodayMorning
rocketmq_brokeruntime_msg_puttotal_todaymorning到昨晚12点为止,写入消息的总次数putMessageTimesTotal
rocketmq_brokeruntime_msg_put_total_today_now每个broker到现在为止,写入的消息次数msgPutTotalTodayNow
rocketmq_brokeruntime_msg_gettotal_today_now每个broker到现在为止,读取的消息次数msgGetTotalTodayNow
rocketmq_brokeruntime_commitlogdir_capacity_freecommitLog所在目录的可用空间commitLogDirCapacity
rocketmq_brokeruntime_commitlogdir_capacity_totalcommitLog所在目录的总空间
rocketmq_brokeruntime_commitlog_maxoffsetcommitLog的最大offsetcommitLogMaxOffset
rocketmq_brokeruntime_commitlog_minoffsetcommitLog的最小offsetcommitLogMinOffset
rocketmq_brokeruntime_remain_howmanydata_toflushremainHowManyDataToFlush
rocketmq_brokeruntime_getfound_tps600600s内getMessage时get到消息的平均TPSgetFoundTps
rocketmq_brokeruntime_getfound_tps6060s内getMessage时get到消息的平均TPS
rocketmq_brokeruntime_getfound_tps1010s内getMessage时get到消息的平均TPS
rocketmq_brokeruntime_gettotal_tps600600s内getMessage次数的平均TPSgetTotalTps
rocketmq_brokeruntime_gettotal_tps6060s内getMessage次数的平均TPS
rocketmq_brokeruntime_gettotal_tps1010s内getMessage次数的平均TPS
rocketmq_brokeruntime_gettransfered_tps600getTransferedTps
rocketmq_brokeruntime_gettransfered_tps60
rocketmq_brokeruntime_gettransfered_tps10
rocketmq_brokeruntime_getmiss_tps600600s内getMessage时没有get到消息的平均TPSgetMissTps
rocketmq_brokeruntime_getmiss_tps6060s内getMessage时没有get到消息的平均TPS
rocketmq_brokeruntime_getmiss_tps1010s内getMessage时没有get到消息的平均TPS
rocketmq_brokeruntime_put_tps600600s内写入消息次数的平均TPSputTps
rocketmq_brokeruntime_put_tps6060s内写入消息次数的平均TPS
rocketmq_brokeruntime_put_tps1010s内写入消息次数的平均TPS

相关文章:

RocketMQ Promethus Exporter

介绍​ Rocketmq-exporter 是用于监控 RocketMQ broker 端和客户端所有相关指标的系统&#xff0c;通过 mqAdmin 从 broker 端获取指标值后封装成 87 个 cache。 警告 过去版本曾是 87 个 concurrentHashMap&#xff0c;由于 Map 不会删除过期指标&#xff0c;所以一旦有 la…...

Kafka收发消息核心参数详解

文章目录 1、从基础的客户端说起1.1、消息发送者主流程1.2、消息消费者主流程 2、从客户端属性来梳理客户端工作机制2.1、消费者分组消费机制 1、从基础的客户端说起 Kafka提供了非常简单的客户端API。只需要引入一个Maven依赖即可&#xff1a; <dependency><groupId…...

Springboot中Aop的使用

Springboot中使用拦截器、过滤器、监听器-CSDN博客 相比较于拦截器&#xff0c;Spring 的aop则功能更强大&#xff0c;封装的更细致&#xff0c;需要单独引用 jar包。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-b…...

创建vue3项目、链式调用、setup函数、ref函数、reactive函数、计算和监听属性、vue3的生命周期、torefs的使用、vue3的setup写法

1 创建vue3项目 # 两种方式- vue-cli&#xff1a;vue脚手架---》创建vue项目---》构建vue项目--》工具链跟之前一样- vite &#xff1a;https://cn.vitejs.dev/-npm create vuelatest // 或者-npm create vitelatest一路选择即可# 运行vue3项目-vue-cli跟之前一样-vite 创建的…...

搭建好自己的PyPi服务器后怎么使用

当您成功搭建好自己的 PyPI 服务器后&#xff0c;您可以使用以下步骤来发布和使用您的包&#xff1a; 打包您的代码&#xff1a; 首先&#xff0c;将您的 Python 项目打包成一个发布包。确保您已经在项目根目录下创建了 setup.py 文件&#xff0c;并按照正确的格式填写了项目信…...

Vue3 中使用provide和reject

1、provide 和reject 可以实现一条事件线上的 父传子&#xff0c;父传孙等&#xff1b;相比较 props emits 仅限与父子传参更方便&#xff0c;相较于pinia书写更简单&#xff0c;但是需要注意使用响应式&#xff0c;如果是非响应式的会导致页面更新不及时 父组件 <templat…...

大数据flink篇之一-基础知识

一、起源 2010至2014年间&#xff0c;由柏林工业大学、柏林洪堡大学和哈索普拉特纳研究所联合发起名Stratosphere的研究项目。2014年4月&#xff0c;项目贡献给Apache基金会&#xff0c;成为孵化项目。更名为Flink2014年12月&#xff0c;成为基金会顶级项目2015年9月&#xff…...

No140.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...

Oracle 11g_FusionOS_安装文档

同事让安装数据库&#xff0c;查询服务器信息发现操作系统是超聚变根据华为openEuler操作系统更改的自研操作系统&#xff0c;安装过程中踩坑不少&#xff0c;最后在超聚变厂商的技术支持下安装成功&#xff0c;步骤可参数该文。 一、 安装环境准备 1.1 软件下载 下载地址:…...

Linux驱动实现IO模型

在Linux系统分为内核态和用户态&#xff0c;CPU会在这两个状态之间进行切换。当进行IO操作时&#xff0c;应用程序会使用系统调用进入内核态&#xff0c;内核操作系统会准备好数据&#xff0c;把IO设备的数据加载到内核缓冲区。 然后内核操作系统会把内核缓冲区的数据从内核空…...

wsl2 更新报错问题解决记录

1、问题 win10 中安装的 wsl2&#xff0c;启动 docker desktop 时提示 wsl2 有问题&#xff1a; 于是点击推荐的地址连接到微软&#xff0c;下载 wsl2 的更新文件。之后运行&#xff0c;又报错&#xff1a; 更新被卡住。 2、解决方法 WinR 输入 cmd 打开命令行窗口&#x…...

突破算法迷宫:精选50道-算法刷题指南

前言 在计算机科学和编程领域&#xff0c;算法和数据结构是基础的概念&#xff0c;无论你是一名初学者还是有经验的开发者&#xff0c;都需要掌握它们。本文将带你深入了解一系列常见的算法和数据结构问题&#xff0c;包括二分查找、滑动窗口、链表、二叉树、TopK、设计题、动…...

玩转Mysql系列 - 第26篇:聊聊mysql如何实现分布式锁?

这是Mysql系列第26篇。 本篇我们使用mysql实现一个分布式锁。 分布式锁的功能 分布式锁使用者位于不同的机器中&#xff0c;锁获取成功之后&#xff0c;才可以对共享资源进行操作 锁具有重入的功能&#xff1a;即一个使用者可以多次获取某个锁 获取锁有超时的功能&#xff…...

linux 解压缩命令tar

Tar tar 命令的选项有很多(用 man tar 可以查看到)&#xff0c;但常用的就那么几个选项&#xff0c;下面来举例说明一下&#xff1a; tar -cf all.tar *.jpg 这条命令是将所有.jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包&#xff0c;-f 指 定包的文件名。 …...

OpenAI ChatGPT API 文档之 Embedding

译者注&#xff1a; Embedding 直接翻译为嵌入似乎不太恰当&#xff0c;于是问了一下 ChatGPT&#xff0c;它的回复如下&#xff1a; 在自然语言处理和机器学习领域&#xff0c;"embeddings" 是指将单词、短语或文本转换成连续向量空间的过程。这个向量空间通常被称…...

Java常用类(二)

好久不见&#xff0c;因工作原因&#xff0c;好久没发文了&#xff0c;OldWang 回来了&#xff0c;持续更新Java内容&#xff01;⭐ 不可变和可变字符序列使用陷阱⭐ 时间处理相关类⭐ Date 时间类(java.util.Date)⭐ DateFormat 类和 SimpleDateFormat 类⭐ Calendar 日历类 ⭐…...

Java获取给定月份的前N个月份和前N个季度

描述&#xff1a; 在项目开发过程中&#xff0c;遇到这样一个需求&#xff0c;即&#xff1a;给定某一月份&#xff0c;得到该月份前面的几个月份以及前面的几个季度。例如&#xff1a;给定2023-09&#xff0c;获取该月份前面的前3个月&#xff0c;即2023-08、2023-07、2023-0…...

网页资源加载过程

网页资源加载是指在浏览器中访问一个网页时&#xff0c;浏览器如何获取和显示网页内容的过程。这个过程通常分为以下几个步骤&#xff1a; DNS 解析&#xff1a; 当用户在浏览器中输入一个网址&#xff08;例如&#xff0c;https://www.example.com&#xff09;&#xff0c;浏览…...

使用git config --global设置用户名和邮件,以及git config的全局和局部配置

文章目录 1. 文章引言2. 全局配置2.1 命令方式2.2 配置文件方式 3. 局部配置3.1 命令方式3.2 配置文件方式 4. 总结 1. 文章引言 我们为什么要设置设置用户名和邮件&#xff1f; 我们在注册github&#xff0c;gitlab等时&#xff0c;一般使用用户名或邮箱&#xff1a; 这个用户…...

【C语言】21-指针-3

目录 1. 指针数组1.1 什么是指针数组1.2 如何定义指针数组1.3 如何使用指针数组2. 多重指针2.1 二重指针的定义2.2 二重指针的初始化与赋值2.3 二重指针的使用3. 指针常量、常量指针、指向常量的常指针3.1 概念3.2 const pointer3.3 pointer to a constant3.3.1 (pointer to a …...

别再只会用t检验了!用Python的statsmodels库做单因素方差分析,5分钟搞定A/B测试结果解读

用Python实现单因素方差分析&#xff1a;A/B测试中的多组比较实战指南 当产品经理同时测试三种新按钮颜色对转化率的影响时&#xff0c;连续做了三次t检验对比各组差异——这个在互联网公司会议室里反复上演的场景&#xff0c;实际上犯了一个统计学上的典型错误。就像用三把尺…...

Windows风扇控制神器FanControl:告别噪音困扰,打造个性化散热方案

Windows风扇控制神器FanControl&#xff1a;告别噪音困扰&#xff0c;打造个性化散热方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.…...

如何一站式破解Widevine DRM加密视频:智能解密工具完全指南

如何一站式破解Widevine DRM加密视频&#xff1a;智能解密工具完全指南 【免费下载链接】video_decrypter Decrypt video from a streaming site with MPEG-DASH Widevine DRM encryption. 项目地址: https://gitcode.com/gh_mirrors/vi/video_decrypter 还在为付费视频…...

别再到处找激活码了!手把手教你用vlmcsd在Windows Server上自建KMS服务器(附全版本密钥)

企业级Windows系统激活解决方案&#xff1a;私有化部署KMS服务实战指南 在IT基础设施管理中&#xff0c;系统激活常常被忽视却至关重要。想象一下这样的场景&#xff1a;当50台办公电脑同时弹出激活警告&#xff0c;或新采购的服务器因未激活导致功能受限时&#xff0c;传统的人…...

基于MCP协议与Playwright的AI智能体网页抓取工具部署与实战

1. 项目概述&#xff1a;一个为AI智能体打造的“网页抓取工具箱” 如果你正在开发或使用基于MCP&#xff08;Model Context Protocol&#xff09;的AI智能体&#xff0c;并且经常需要让它们从网页上获取结构化数据&#xff0c;那么你很可能已经遇到了一个核心痛点&#xff1a; …...

别再硬写QMenu的width和height了!Qt样式表实战:用盒模型思维搞定菜单尺寸

用CSS盒模型思维重构Qt菜单尺寸控制逻辑 在Qt开发中&#xff0c;QMenu的尺寸控制一直是让开发者头疼的问题。许多从Web前端转过来的开发者会习惯性地直接设置width和height属性&#xff0c;却发现这些设置在QMenu上完全不起作用。这背后其实涉及到Qt样式表(QSS)与CSS在渲染逻辑…...

AI助手状态可视化:像素风办公室看板的设计、部署与集成指南

1. 项目概述&#xff1a;一个像素风的AI办公室看板如果你和我一样&#xff0c;日常工作中重度依赖AI助手&#xff0c;比如OpenClaw&#xff0c;那你可能也遇到过这样的困惑&#xff1a;当AI在后台默默执行一个长任务时&#xff0c;你完全不知道它进行到哪一步了。是卡住了&…...

OpenClaw工作空间管理工具:自动化文件治理与优化实践

1. 项目概述&#xff1a;一个专为OpenClaw设计的本地化工作空间管理工具如果你和我一样&#xff0c;深度使用过OpenClaw这套开源AI智能体框架&#xff0c;那你一定对那几个核心的Markdown配置文件又爱又恨。AGENTS.md里定义着你的数字员工&#xff0c;SOUL.md是它们的“灵魂”与…...

MMEE框架:矩阵编码与符号剪枝优化深度学习数据流

1. MMEE框架概述&#xff1a;重新定义注意力融合数据流优化在深度学习硬件加速器领域&#xff0c;数据流优化一直是提升计算效率的核心挑战。传统方法在处理Transformer等模型的注意力融合操作时&#xff0c;往往面临搜索空间爆炸和优化效率低下的问题。MMEE框架的提出&#xf…...

ComfyUI MixLab节点库:提升AI图像工作流控制与自动化能力

1. 项目概述&#xff1a;一个为ComfyUI注入新活力的节点库如果你和我一样&#xff0c;是个深度依赖ComfyUI进行AI图像工作流搭建的创作者&#xff0c;那你一定经历过这样的时刻&#xff1a;面对一个复杂的创意想法&#xff0c;却发现官方节点或者现有社区节点库的功能组合起来总…...