【问题标题】:Using JMX Exporter on Kafka Connect Confluent image throw a NoSuchFieldException at agent loading time在 Kafka Connect Confluent 图像上使用 JMX Exporter 在代理加载时抛出 NoSuchFieldException
【发布时间】:2022-11-02 20:58:53
【问题描述】:

我目前正在尝试公开 Kafka Connect Workers JMX :

使用这个泊坞窗图像:

FROM cnfldemos/cp-server-connect-datagen:0.5.3-7.1.0
ADD --chown=1000:1000 exporterConfig.yml /opt/prometheus-exporter/prom-jmx-agent-config.yml
ADD --chown=1000:1000 jmx_prometheus_javaagent-0.17.0.jar /opt/prometheus-exporter/agent.jar

JMX Exporter 版本是从 0 开始的最后一个

这是连接工作程序启动时的结果日志:

PS D:\env\confluent-platform> docker logs connect -f
===> User
uid=1000(appuser) gid=1000(appuser) groups=1000(appuser)
===> Configuring ...
===> Running preflight checks ...
===> Check if Kafka is healthy ...
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:513)
        at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:525)
Caused by: java.lang.NoSuchFieldError: UNKNOWN
        at io.prometheus.jmx.JmxCollector$Rule.<init>(JmxCollector.java:57)
        at io.prometheus.jmx.JmxCollector.loadConfig(JmxCollector.java:214)
        at io.prometheus.jmx.JmxCollector.<init>(JmxCollector.java:91)
        at io.prometheus.jmx.JavaAgent.premain(JavaAgent.java:29)
        ... 6 more
*** java.lang.instrument ASSERTION FAILED ***: "result" with message agent load/premain call failed at src/java.instrument/share/native/libinstrument/JPLISAgent.c line: 422
FATAL ERROR in native method: processing of -javaagent failed, processJavaStart failed

这个 java.lang.NoSuchFieldError 让我想到依赖冲突问题,

我通过了 JMX Exporter 及其 simpleclient dependency 的代码

实际上 Collector.java 类中 simpleclient 依赖项的 UNKNOWN Type 枚举值只出现在版本 10 之后,而 14 是 JMX Exporter 中的依赖项版本号。

但是我获取了 cnfldemos/cp-server-connect-datagen 的源代码,但我找不到任何对这个依赖包的引用。

欢迎任何建议!

【问题讨论】:

    标签: apache-kafka-connect jmx-exporter


    【解决方案1】:

    如果你检查源代码 confluent kafka-connect images

    您会注意到,您必须设置以下环境变量才能启用 JMX

    1. KAFKA_JMX_OPTS
    2. KAFKA_JMX_HOSTNAME(可选,如果未指定,它将采用当前主机名)
    3. KAFKA_JMX_PORT

      您面临的问题是,当您指定KAFKA_JMX_OPTS 时,默认情况下jmx 身份验证为enabled。要禁用它,请使用此标志 -Dcom.sun.management.jmxremote.authenticate=false

      我通过以下配置解决了这个问题:

        KAFKA_JMX_OPTS: -javaagent:/usr/share/java/kafka-connect-sample/jmx_prometheus_javaagent-0.17.2.jar=8080:/usr/share/java/kafka-connect-sample/prometheus-kafka-connect.yml -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
      

    【讨论】:

      猜你喜欢
      • 2020-11-04
      • 2020-09-13
      • 2021-05-21
      • 2017-06-08
      • 2020-08-15
      • 2020-01-21
      • 1970-01-01
      • 2021-09-22
      • 2022-12-04
      相关资源
      最近更新 更多