为了账号安全,请及时绑定邮箱和手机立即绑定

Kafka+使用prometheus与kafka cli命令有冲突

Kafka+使用prometheus与kafka cli命令有冲突

天涯尽头无女友 2023-06-21 16:20:42
我们使用 Prometheus 一段时间并且非常享受它。关于什么是jmx-exporter 的几句话jmx-exporter 是一个从基于 JVM 的应用程序(例如 Java 和 Scala)读取 JMX 数据并通过 HTTP 以 Prometheus 理解并可以抓取的简单文本格式公开它的程序。因此,让我们开始解决我的问题……我们使用 jmx 导出器配置 kafka,如下所示export KAFKA_OPTS="-javaagent:/home/jmx_prometheus_javaagent-0.11.0.jar=7071:/home/kafka-2_0_0.yml"此配置在 kakfa config 下的 ambari 中设置设置配置后,我们重新启动所有 3 个 kafka 代理我们检查jmx-exporter HTTP 服务器是否正在监听:netstat -tlnp | grep 7071tcp6       0      0 :::7071                 :::*                    LISTEN      63872/java并抓取指标!curl -s localhost:7071 | grep -i kafka | head# HELP kafka_log_logcleanermanager_max_dirty_percent Attribute exposed for management (kafka.log<type=LogCleanerManager, name=max-dirty-percent><>Value)# TYPE kafka_log_logcleanermanager_max_dirty_percent gaugekafka_log_logcleanermanager_max_dirty_percent 0.0到现在为止一切都很酷但是当我们开始使用 kafka 命令时,例如打印我们得到的主题列表:/usr/hdp/current/kafka-broker/bin/kafka-topics.sh –zookeeper $zookeeper_server:2181 –listException in thread "main" java.lang.reflect.InvocationTargetException        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:498)        at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)        at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)Caused by: java.net.BindException: Address already in useFATAL ERROR in native method: processing of -javaagent failed注意——在我们添加以下行之前:export KAFKA_OPTS="-javaagent:/home/jmx_prometheus_javaagent-0.11.0.jar=7071:/home/kafka-2_0_0.yml "一切都好所以有什么建议——如何从这一点开始解决这个问题?
查看完整描述

4 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

在我找到的所有解决方案中,它帮助我将 KAFKA_OPTS 变量更改为 EXTRA_ARGS。但我还是不明白冲突的原因。Kafka 在一个端口上运行,javaagent 在另一个端口上运行。但尽管如此,在创建主题时却出现错误。我用来传递 Prometheus 指标的 Javaagent



查看完整回答
反对 回复 2023-06-21
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

Kafka CLI 脚本使用与代理使用的相同的环境变量(特别是KAFKA_OPTS和JMX_PORT)。这就是他们冲突的原因。我正在使用汇合容器(confluentinc/cp-server:5.5.1):


JMX_PORT: 9991

KAFKA_OPTS: "-javaagent:/usr/local/bin/jmx_prometheus_javaagent-0.13.0.jar=7071:/etc/jmx-exporter/kafka-2_0_0.yml"

volumes:

  - ./jmx_exporter/kafka-2_0_0.yml:/etc/jmx-exporter/kafka-2_0_0.yml

  - ./jmx_exporter/jmx_prometheus_javaagent-0.13.0.jar:/usr/local/bin/jmx_prometheus_javaagent-0.13.0.jar

很多线程都指向JMX_PORTonly 但这对我没有帮助。在能够运行 CLI 命令之前,我必须从容器内部取消设置两个环境变量。它的工作原理如下:


unset JMX_PORT

unset KAFKA_OPTS

kafka-run-class kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic your_topic

它不会破坏您的代理,因为这些变量是按会话设置的。


查看完整回答
反对 回复 2023-06-21
?
慕的地10843

TA贡献1785条经验 获得超8个赞

启用 JMX 时,kafka-topics.sh 和 kafka-console- Producer.sh 等工具会失败。这是由于 JMX_PORT 环境变量引起的。Kafka 帮助程序脚本 /opt/kafka/bin/kafka-run-class.sh 将尝试在 JMX 绑定到指定端口的新 JVM 中调用所需的命令。由于已在容器中运行的代理 JVM 绑定了此端口,因此该进程失败并错误退出。

解决方案是在命令前添加 JMX_PORT= 前缀或取消设置环境变量,即取消设置 JMX_PORT


查看完整回答
反对 回复 2023-06-21
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

您的 Kafka 实例正在端口 7071 上侦听舞会刮擦信息,这看起来不错。当您发出 Kafka 命令时,看起来您添加到 KAFKA_OPTS 的 javaagent 也在尝试侦听端口 7071。不确定为什么在那里需要 javaagent,但在那里尝试不同的端口。



查看完整回答
反对 回复 2023-06-21
  • 4 回答
  • 0 关注
  • 182 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信