OpenShift多Kafka消费者绑定Prometheus指标出现meter注册失败告警
问题根因
报错本质是同一个Prometheus CollectorRegistry中重复注册了同名称的指标采集器,核心原因是给多个Kafka消费者绑定指标时,没有为不同消费者的指标配置唯一的区分标签,或是使用的Micrometer版本存在多消费者指标绑定的已知缺陷:
从日志可以看出只有第一个消费者成功绑定了指标,后续3个消费者绑定相同名称的指标时因没有唯一区分标签,被Prometheus Registry判定为重复注册直接失败,因此你只能看到1个消费者的指标。
解决方案
1. 为每个Kafka消费者配置唯一的client.id参数
KafkaClientMetrics默认会自动将client.id作为指标标签,初始化4个消费者时,给每个消费者的配置中传入全局唯一的client.id即可,示例配置:
// 消费者1配置示例 Properties props1 = new Properties(); props1.put(ConsumerConfig.CLIENT_ID_CONFIG, "consumer-topic-1"); // 每个消费者的client.id全局唯一 // 其他消费者依次设置为consumer-topic-2、consumer-topic-3、consumer-topic-4 KafkaConsumer<String, String> consumer1 = new KafkaConsumer<>(props1);
2. 绑定指标时追加自定义公共标签区分不同消费者
如果已经配置了唯一client.id还是报错,可以在绑定KafkaClientMetrics时手动给每个消费者的指标追加唯一的公共标签,示例代码:
// 给每个消费者的指标添加唯一的consumer_tag标签 new KafkaClientMetrics(consumer, Tags.of("consumer_tag", "consumer-1")).bindTo(promRegistry); new KafkaClientMetrics(consumer2, Tags.of("consumer_tag", "consumer-2")).bindTo(promRegistry); // 剩余消费者依次类推
3. 升级Micrometer依赖版本
如果你使用的Micrometer版本低于1.8.0,存在多Kafka客户端指标绑定的已知缺陷,直接升级到1.8.0及以上的稳定版本即可解决该问题,Maven依赖示例:
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-core</artifactId> <version>1.11.5</version> <!-- 选最新稳定版即可 --> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.11.5</version> </dependency>
4. 验证修复结果
修复完成后访问Prometheus端点,查询kafka_consumer_fetch_manager_records_lag_max指标,可以看到4条对应不同client.id/consumer_tag标签的指标数据,分别对应4个消费者。
内容的提问来源于stack exchange,提问作者hermanjakobsen
相关产品推荐
相关产品推荐

