Yes, Ruibin confirmed in a private message that using the factory class
works. But thanks for digging into it once more Yanfei. I missed to
consider in my previous message that the plugin classes are loaded using
their own class loaders which, indeed, can result in a
ClassNotFoundException being thrown.

Best,
Matthias

On Tue, Jan 3, 2023 at 4:45 AM Yanfei Lei <fredia...@gmail.com> wrote:

> Hi Ruibin,
>
> "metrics.reporter.prom.class" is deprecated in 1.16, maybe "
> metrics.reporter.prom.factory.class"[1] can solve your problem.
> After reading the related code[2], I think the root cause is that  "
> metrics.reporter.prom.class" would load the code via flink's classpath
> instead of MetricReporterFactory, due to "Plugins cannot access classes
> from other plugins or from Flink that have not been specifically
> whitelisted"[3], so ClassNotFoundException is thrown.
>
> [1]
> https://nightlies.apache.org/flink/flink-docs-release-1.16/docs/deployment/metric_reporters/#prometheus
> [2]
> https://github.com/apache/flink/blob/release-1.16/flink-runtime/src/main/java/org/apache/flink/runtime/metrics/ReporterSetup.java#L457
> [3]
> https://nightlies.apache.org/flink/flink-docs-stable/docs/deployment/filesystems/plugins/
>
> Matthias Pohl via user <user@flink.apache.org> 于2023年1月2日周一 20:27写道:
>
>> Hi Ruibin,
>> could you switch to using the currently supported way for instantiating
>> reporters using the factory configuration parameter [1][2]?
>>
>> Based on the ClassNotFoundException, your suspicion might be right that
>> the plugin didn't make it onto the classpath. Could you share the
>> startup logs of the JM and TMs. That might help getting a bit more context
>> on what's going on. Your approach on integrating the reporter through the
>> plugin system [3] sounds about right as far as I can see.
>>
>> Matthias
>>
>> [1]
>> https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/metric_reporters/#factory-class
>> [2]
>> https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/metric_reporters/#prometheus
>> [3]
>> https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/filesystems/plugins/
>>
>> On Fri, Dec 30, 2022 at 11:42 AM Ruibin Xing <xingro...@gmail.com> wrote:
>>
>>> Hi community,
>>>
>>> I am having difficulty understanding the Flink plugin system. I am
>>> attempting to enable the Prometheus exporter with the official Flink image
>>> 1.16.0, but I am experiencing issues with library dependencies. According
>>> to the plugin documentation (
>>> https://nightlies.apache.org/flink/flink-docs-stable/docs/deployment/filesystems/plugins/),
>>> as long as the library is located in the /opt/flink/plugins/<plugin-name>
>>> directory, Flink should automatically load it, similar to how it loads
>>> libraries in the /opt/flink/lib directory. However, Flink does not seem to
>>> detect the plugin.
>>>
>>> Here is the directory structure for /opt/flink:
>>> > tree /opt/flink
>>> .
>>> ....
>>> ├── plugins
>>> │   ├── metrics-prometheus
>>> │   │   └── flink-metrics-prometheus-1.16.0.jar
>>> ...
>>>
>>> And here is the related Flink configuration:
>>> > metrics.reporter.prom.class:
>>> org.apache.flink.metrics.prometheus.PrometheusReporter
>>>
>>> The error logs in the task manager show the following:
>>> 2022-12-30 10:03:55,840 WARN
>>>  org.apache.flink.runtime.metrics.ReporterSetup               [] - The
>>> reporter configuration of 'prom' configures the reporter class, which is a
>>> deprecated approach to configure reporters. Please configure a factory
>>> class instead: 'metrics.reporter.prom.factory.class: <factoryClass>' to
>>> ensure that the configuration continues to work with future versions.
>>> 2022-12-30 10:03:55,841 ERROR
>>> org.apache.flink.runtime.metrics.ReporterSetup               [] - Could not
>>> instantiate metrics reporter prom. Metrics might not be exposed/reported.
>>> java.lang.ClassNotFoundException:
>>> org.apache.flink.metrics.prometheus.PrometheusReporter
>>> at jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
>>> ~[?:?]
>>> at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown
>>> Source) ~[?:?]
>>> at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
>>> at java.lang.Class.forName0(Native Method) ~[?:?]
>>> at java.lang.Class.forName(Unknown Source) ~[?:?]
>>> at
>>> org.apache.flink.runtime.metrics.ReporterSetup.loadViaReflection(ReporterSetup.java:456)
>>> ~[flink-dist-1.16.0.jar:1.16.0]
>>> at
>>> org.apache.flink.runtime.metrics.ReporterSetup.loadReporter(ReporterSetup.java:409)
>>> ~[flink-dist-1.16.0.jar:1.16.0]
>>> at
>>> org.apache.flink.runtime.metrics.ReporterSetup.setupReporters(ReporterSetup.java:328)
>>> ~[flink-dist-1.16.0.jar:1.16.0]
>>> at
>>> org.apache.flink.runtime.metrics.ReporterSetup.fromConfiguration(ReporterSetup.java:209)
>>> ~[flink-dist-1.16.0.jar:1.16.0]
>>>
>>> The Java commands for Flink process:
>>> flink          1  3.0  4.6 2168308 765936 ?      Ssl  10:03   1:08
>>> /opt/java/openjdk/bin/java -XX:+UseG1GC -Xmx697932173 -Xms697932173
>>> -XX:MaxDirectMemorySize=300647712 -XX:MaxMetaspaceSize=268435456
>>> -Dlog.file=/opt/flink/log/flink--kubernetes-taskmanager-0-checkpoint-ha-example-taskmanager-1-1.log
>>> -Dlog4j.configuration=file:/opt/flink/conf/log4j-console.properties
>>> -Dlog4j.configurationFile=file:/opt/flink/conf/log4j-console.properties
>>> -Dlogback.configurationFile=file:/opt/flink/conf/logback-console.xml
>>> -classpath
>>> /opt/flink/lib/flink-cep-1.16.0.jar:/opt/flink/lib/flink-connector-files-1.16.0.jar:/opt/flink/lib/flink-csv-1.16.0.jar:/opt/flink/lib/flink-json-1.16.0.jar:/opt/flink/lib/flink-scala_2.12-1.16.0.jar:/opt/flink/lib/flink-shaded-hadoop-2-uber-2.4.1-10.0.jar:/opt/flink/lib/flink-shaded-zookeeper-3.5.9.jar:/opt/flink/lib/flink-table-api-java-uber-1.16.0.jar:/opt/flink/lib/flink-table-planner-loader-1.16.0.jar:/opt/flink/lib/flink-table-runtime-1.16.0.jar:/opt/flink/lib/log4j-1.2-api-2.17.1.jar:/opt/flink/lib/log4j-api-2.17.1.jar:/opt/flink/lib/log4j-core-2.17.1.jar:/opt/flink/lib/log4j-slf4j-impl-2.17.1.jar:/opt/flink/lib/flink-dist-1.16.0.jar::::
>>> org.apache.flink.kubernetes.taskmanager.KubernetesTaskExecutorRunner
>>> --configDir /opt/flink/conf -Djobmanager.rpc.address=172.17.0.7
>>> -Dpipeline.classpaths= -Djobmanager.memory.off-heap.size=134217728b
>>> -Dweb.tmpdir=/tmp/flink-web-57b9e638-f313-4389-a75b-988509697edb
>>> -Djobmanager.rpc.port=6123
>>> -D.pipeline.job-id=ffffffffa6f1c9fb0000000000000000
>>> -Drest.address=172.17.0.7 -Djobmanager.memory.jvm-overhead.max=214748368b
>>> -Djobmanager.memory.jvm-overhead.min=214748368b
>>> -Dtaskmanager.resource-id=checkpoint-ha-example-taskmanager-1-1
>>> -Dexecution.target=embedded
>>> -Dpipeline.jars=file:/opt/flink/examples/streaming/StateMachineExample.jar
>>> -Djobmanager.memory.jvm-metaspace.size=268435456b
>>> -Djobmanager.memory.heap.size=1530082096b -D
>>> taskmanager.memory.network.min=166429984b -D taskmanager.cpu.cores=1.0 -D
>>> taskmanager.memory.task.off-heap.size=0b -D
>>> taskmanager.memory.jvm-metaspace.size=268435456b -D external-resources=none
>>> -D taskmanager.memory.jvm-overhead.min=214748368b -D
>>> taskmanager.memory.framework.off-heap.size=134217728b -D
>>> taskmanager.memory.network.max=166429984b -D
>>> taskmanager.memory.framework.heap.size=134217728b -D
>>> taskmanager.memory.managed.size=665719939b -D
>>> taskmanager.memory.task.heap.size=563714445b -D
>>> taskmanager.numberOfTaskSlots=1 -D
>>> taskmanager.memory.jvm-overhead.max=214748368b
>>>
>>> It seems that I must be missing something. Could someone please help me
>>> clarify this issue?
>>>
>>> Thank you,
>>>
>>> Ruibin
>>>
>>
>
> --
> Best,
> Yanfei
>

Reply via email to