#java #scala #apache-kafka
Вопрос:
Недавно я включил настройку jmx_exporter в lt;kafka_home_dirgt;/bin/kafka-server-start.sh на всех брокерах кафки. После перезапуска службы kafka показатели jmx kafka предоставляются экспортером jmx для prometheus, и я могу видеть показатели на prometheus.
Я также могу видеть показатели задержки потребителей, статистику недостаточной репликации в kafka manager.
Но я вижу эти странные ошибки в cmal/журналах/приложении kafka manager.файл журнала
2021-11-18 00:04:25,205 — [ОШИБКА] — из kafka.manager.jmx.KafkaJMX$ в пуле-114-поток-1 Не удалось подключиться к службе:jmx:rmi:// / jndi/rmi://пример.com:-1/jmxrmi java.lang.Исключение IllegalArgumentException: не выполнено требование: Нет порта jmx, но включен опрос jmx! в скале.Predef$.require(Predef.scala:281) в kafka.manager.jmx.KafkaJMX$.doWithConnection(KafkaJMX.scala:39) в кластере кафка.менеджер.актер.BrokerViewCacheActor.$anonfun$updateTopicMetrics$5(BrokerViewCacheActor.scala:327) в scala.runtime.java8.JFunction0$mcV$sp.применить(JFunction0$mcV$sp.java:23) в scala.параллельный.Будущие$.$анонфун$примените$1(Future.scala:659) в scala.util.Успех.$anonfun$карта$1(Попробуйте.scala:255) в scala.util.Карта успеха(Попробуйте.scala:213) в scala.одновременно.Future.$anonfun$карта$1(Future.scala:292) в scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:33) в scala.concurrent.impl.Promise.$anonfun$преобразование$1(Promise.scala:33) в scala.concurrent.impl.Обратный вызов.запуск(Promise.scala:64) в java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) на java.база/java.util.параллельный.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) в java.base/java.lang.Thread.run(поток.java:829)
2021-11-18 00:04:25,205 — [ОШИБКА] — из kafka.manager.jmx.KafkaJMX$ в пуле-114-поток-1 Не удалось подключиться к службе:jmx:rmi:// / jndi/rmi://пример.com:-1/jmxrmi java.lang.Исключение IllegalArgumentException: не выполнено требование: Нет порта jmx, но включен опрос jmx! в скале.Predef$.require(Predef.scala:281) в kafka.manager.jmx.KafkaJMX$.doWithConnection(KafkaJMX.scala:39) в кластере кафка.менеджер.актер.BrokerViewCacheActor.$anonfun$updateTopicMetrics$5(BrokerViewCacheActor.scala:327) в scala.runtime.java8.JFunction0$mcV$sp.применить(JFunction0$mcV$sp.java:23) в scala.параллельный.Будущие$.$анонфун$примените$1(Future.scala:659) в scala.util.Успех.$anonfun$карта$1(Попробуйте.scala:255) в scala.util.Карта успеха(Попробуйте.scala:213) в scala.одновременно.Future.$anonfun$карта$1(Future.scala:292) в scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:33) в scala.concurrent.impl.Promise.$anonfun$преобразование$1(Promise.scala:33) в scala.concurrent.impl.Обратный вызов.запуск(Promise.scala:64) в java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) на java.база/java.util.параллельный.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) в java.base/java.lang.Thread.run(поток.java:829)
Ниже приведена конфигурация брокера kafka после включения настройки экспортера jmx . Я прокомментировал это, export JMX_PORT=9999
прежде чем включить экспортер jmx :
export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=example.com -Djava.net.preferIPv4Stack=true" export KAFKA_HEAP_OPTS="-Xmx32g -Xms32g" export KAFKA_JVM_PERFORMANCE_OPTS="-server -XX: UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX: ExplicitGCInvokesConcurrent -Djava.awt.headless=true" #export JMX_PORT=9999 export KAFKA_OPTS='-javaagent:/data/kafka/libs/jmx_prometheus_javaagent-0.16.1.jar=9999:/data/kafka/config/kafka-2_0_0.yml' if [ $# -lt 1 ]; then echo "USAGE: $0 [-daemon] server.properties [--override property=value]*" exit 1 fi base_dir=$(dirname $0) if [ "x$KAFKA_LOG4J_OPTS" = "x" ]; then export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:$base_dir/../config/log4j.properties" fi if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" fi EXTRA_ARGS=${EXTRA_ARGS-'-name kafkaServer -loggc'} COMMAND=$1 case $COMMAND in -daemon) EXTRA_ARGS="-daemon "$EXTRA_ARGS shift ;; *) ;; esac exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$@"
Комментарии:
1. Вы не должны изменять класс запуска кафки или запуск сервера кафки… Вам нужно экспортировать свои переменные за пределы этих сценариев, а не внутри них. При этом порт RMI устанавливается в значение -1, что недопустимо