Как включить удаленный JMX на брокерах Kafka (для JmxTool)?

Я включил JMX на брокерах Kafka, добавив

KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true
                -Dcom.sun.management.jmxremote.authenticate=false
                -Dcom.sun.management.jmxremote.ssl=false
                -Djava.rmi.server.hostname=<server_IP>
                -Djava.net.preferIPv4Stack=true"

Однако, когда я использую kafka.tools.JmxTool для получения метрик JMX, он выводит только метки времени Unix. Почему?

./bin/kafka-run-class.sh kafka.tools.JmxTool \
  --object-name 'kafka.server:type=BrokerTopicMetrics,name=AllTopicsMessagesInPerSec' \
  --jmx-url "service:jmx:rmi:///jndi/rmi://<server_IP>:9111/jmxrmi"

Как я могу распечатать метрики?

Ответ 1

Измените bin/kafka-run-class.sh и установите переменную KAFKA_JMX_OPTS

KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=your.kafka.broker.hostname -Djava.net.preferIPv4Stack=true"

Обновить bin/kafka-server-start.sh добавить строку ниже

export JMX_PORT=PORT

Ответ 2

Вы должны установить переменную "JMX_PORT" или добавить следующую строку в bin/kafka-server-start.sh.

export JMX_PORT=${JMX_PORT:-9999}

то вы сможете подключиться к метрикам Kafka JMX. Я использую инструмент jconsole и адрес localhost: 9999.

Ответ 3

Настройка JMX_PORT внутри bin/kafka-run-class.sh столкнется с Zookeeper, если вы используете Zookeeper в том же node. Лучше всего установить JMX порт отдельно в соответствующих сценариях server-start:

  • Вставить строку "export JMX_PORT=${JMX_PORT:-9998}" перед последней строкой в ​​файле $KAFKA_HOME/bin/zookeeper-server-start.sh.
  • Перезапустите сервер Zookeeper.
  • Повторите шаги 1 и 2 для всех узлов zookeeper в кластере.
  • Вставить строку "export JMX_PORT=${JMX_PORT:-9999}" перед последней строкой в ​​файле $KAFKA_HOME/bin/kafka-server-start.sh.
  • Перезапустите брокера Kafka.
  • Повторите шаги 4 и 5 для всех брокеров в кластере.

Ответ 4

Если вы работаете через systemd:

  1. изменить /etc/systemd/system/multi-user.target.wants/kafka.service
  2. в разделе "[service]" добавьте строку:
    • Environment = JMX_PORT = 9989
  3. перезагрузить: systemctl daemon-reload
  4. перезагрузка: systemctl restart kafka
  5. наслаждайтесь бобами: echo 'beans' | java -jar jmxterm-1.0-alpha-4-uber.jar -l localhost:9989 -n 2>&1

Ответ 5

vim kafka_2.11-0.10.1.1/bin/kafka-run-class.sh

а затем добавьте первые две строки и комментарии, как я сделал для других строк (Примечание: после выполнения этого сценария Kafka не могут использоваться для операций клиента для публикации тем. Для ваших операций с клиентом вам нужно использовать отдельные сценарии, загрузите снова в разных местах и ​​используйте)

export JMX_PORT=9096
KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=<ipaddress> -Dcom.sun.management.jmxremote.port=$JMX_PORT -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"



# JMX settings
#if [ -z "$KAFKA_JMX_OPTS" ]; then
# KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false "

#fi

# JMX port to use
#if [  $JMX_PORT ]; then
#  KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
#fi

Ответ 6

Используйте kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec

Префикс AllTopics использовался в более старых версиях. Вы можете указать тему, используя kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec,topic=<topic-name>

src: http://grokbase.com/t/kafka/users/164ksnhff0/enable-jmx-on-kafka-brokers

Ответ 7

Это Кафка 2.3.0.

Использование jconsole для доступных MBeans

Сначала вы должны использовать jconsole, чтобы узнать имена доступных MBeans.

Правильное имя MBean, для которого вы хотите запросить метрики, - kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec (префикс AllTopics использовался в старых версиях). Спасибо AndyTheEntity.

jconsole

Включение удаленного JMX (без аутентификации или SSL)

Как описано в Мониторинге и управлении с использованием технологии JMX, вы должны установить определенные системные свойства при запуске Java VM брокера Kafka.

Сценарий оболочки Kafka bin/kafka-run-class.sh делает настройку безболезненной, поскольку она делает для вас основы и устанавливает KAFKA_JMX_OPTS.

# JMX settings
if [ -z "$KAFKA_JMX_OPTS" ]; then
  KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false "
fi

Для удаленного JMX вы должны установить com.sun.management.jmxremote.port, который устанавливает сценарий оболочки Kafka bin/kafka-run-class.sh, используя переменную среды JMX_PORT.

# JMX port to use
if [  $JMX_PORT ]; then
  KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
fi

С этим включить удаленный JMX так же просто, как следующую команду:

JMX_PORT=9999 ./bin/kafka-server-start.sh config/server.properties

Использование JmxTool

С учетом вышесказанного запустите JmxTool:

$ ./bin/kafka-run-class.sh kafka.tools.JmxTool \
  --object-name 'kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec'
Trying to connect to JMX url: service:jmx:rmi:///jndi/rmi://:9999/jmxrmi.
"time","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:Count","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:EventType","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:FifteenMinuteRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:FiveMinuteRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:MeanRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:OneMinuteRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:RateUnit"
1567586728595,0,messages,0.0,0.0,0.0,0.0,SECONDS
1567586730597,0,messages,0.0,0.0,0.0,0.0,SECONDS
...

Вы можете использовать опцию --one-time для печати метрик JMX только один раз.

$ ./bin/kafka-run-class.sh kafka.tools.JmxTool \
    --object-name 'kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec' \
    --one-time true
Trying to connect to JMX url: service:jmx:rmi:///jndi/rmi://:9999/jmxrmi.
"time","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:Count","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:EventType","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:FifteenMinuteRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:FiveMinuteRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:MeanRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:OneMinuteRate","kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec:RateUnit"
1567586898459,0,messages,0.0,0.0,0.0,0.0,SECONDS