2017-01-15 4 views
1

Я пытаюсь заставить JMX работать с spotify/kafka Изображение докеров.Сделать JMX работать с spotify/kafka Docker image

У меня есть docker-compose.yml с:

version: '2' 
services: 
    my-kafka: 
    image: spotify/kafka # Using this instead of wurstmeister's because it didn't work with /var/run/docker.sock on Windows while this one has integrated ZK and works 
    hostname: my-kafka 
    restart: unless-stopped 
    ports: 
     - "9092:9092" # Kafka 
     - "2181:2181" # Zookeeper 
     - "7203:7203" # JMX 
    environment: 
     KAFKA_ADVERTISED_HOST_NAME: my-kafka 
     KAFKA_ADVERTISED_PORT: 9092 
     KAFKA_OPTS: "-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.rmi.port=7203 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=my-kafka" 

Я затем попытаться проверить его с помощью jconsole my-kafka:7203 и получить «Не удалось установить соединение: ошибка во время установления соединения JRMP; Вложенное исключение: java.io.EOFException. ' немедленно. Напротив, использование несуществующего узла приводит к «Неизвестному хосту» и другому порту «Соединение отказано».

docker ps показывает:

692eb6659aba  spotify/kafka     "supervisord -n"   10 minutes ago  Up 10 minutes    0.0.0.0:2181->2181/tcp, 0.0.0.0:7203->7203/tcp, 0.0.0.0:9092->9092/tcp      docker_my-kafka_1 

ps aux внутри контейнер показывает:

root  11 1.8 3.3 5718844 274608 ?  Sl 06:16 0:12 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true -Xloggc:/opt/kafka_2.11-0.10.1.0/bin/../logs/kafkaServer-gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false ...offtopic skipped... -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.rmi.port=7203 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=my-kafka kafka.Kafka /opt/kafka_2.11-0.10.1.0/config/server.properties 

Бревно контейнера скучное без JMX быть даже упомянута, заканчивается «Кафка Введенного RUNNING состояния, процесс остался для> менее 1 секунды (startecs) ".

Существует связанный с этим вопрос kafka monitoring using JMX when running kafka in docker in boot2docker, но я бы предпочел придерживаться spotify/kafka, так что ZK & Kafka живет в том же контейнере.

ответ

0

Вы можете попытаться указать адрес хоста (где вы работаете в docker run) в собственности:

-Djava.rmi.server.hostname=xx.xx.xx.xx 
+0

Результат точно такой же, как и раньше: Ошибка подключения: ошибка во время установления соединения JRMP; Вложенное исключение: java.io.EOFException. Если бы это сработало, получение этого файла docker-compose.yml также было бы проблемой. –

0

варианты JMX уже присутствуют в исходном сценарии /opt/kafka_2.11-0.10.1.0/bin/kafka-run-class.sh из spotify/kafka Docker изображения. Вы можете вычленить их из внутри контейнера

grep jmx /opt/kafka_2.11-0.10.1.0/bin/kafka-run-class.sh 

, и вы увидите их в начале вариантов ява процесса Jvm внутри контейнера

ps -ef java 

Итак, достаточно установить JMX_PORT переменную среды в docker-compose.yml, и вы удаляете дополнительные (повторные) KAFKA_OPTS.

version: '2' 
services: 
    my-kafka: 
    image: spotify/kafka # Using this instead of wurstmeister's because it didn't work with /var/run/docker.sock on Windows while this one has integrated ZK and works 
    hostname: my-kafka 
    restart: unless-stopped 
    ports: 
     - "9092:9092" # Kafka 
     - "2181:2181" # Zookeeper 
     - "7203:7203" # JMX 
    environment: 
     KAFKA_ADVERTISED_HOST_NAME: my-kafka 
     KAFKA_ADVERTISED_PORT: 9092 
     JMX_PORT: 7203 

Затем после запуска нового контейнера и разрешив мой-Кафка в своем хозяине, jconsole my-kafka:7203 будет подключаться к JMX порту контейнера.

+0

Вы совершенно правы в отношении дублированных параметров, но по какой-то причине «jconsole» по-прежнему не подключается - теперь он просто зависает при подключении: /. –

+0

Я пробовал на своем компьютере (Ubuntu Linux + Oracle JDK v. 1.8), и он работает. Проверьте версию jconsole/jdk. Контейнер работает 1.8.x. – gile

+0

'1.8.0_112-b16' Oracle JDK на MacOS X, где я запускаю' jconsole', OpenJDK '1.8.0_111-8u111-b14-2 ~ bpo8 + 1-b14' в контейнере. Как вы запускаете 'jconsole' и что вы заполняете? Мне не нужно имя пользователя/пароль, не так ли? –

0

Контейнеры докеров работают на IP-сетях внутри вашей машины.Чтобы увидеть их, запустите:

docker inspect docker_my-kafka_1

Это выведет IP-что машина работает на что-то вроде:

"IPAddress": "172.17.0.2",

Вам нужно будет добавить Ip найдено выше:

-Djava.rmi.server.hostname=$INSERT_IP_HERE

+0

Это означает, что каждый раз, когда я переключаю среды разработки, регенерирует файл docker-compose.yml. Это не очень хороший подход. –

+0

К сожалению, так вы должны это сделать, если у вас нет управления конфигурацией. –

0

Как вы предпочитаете использовать решение, где и ZK & Кафка живут в том же контейнере, взгляните на https://github.com/Landoop/fast-data-dev

Этот Докер сосредотачивается на обеспечении отличный Kafka Development Environment, поэтому среди других он подвергает все JMXs

Смежные вопросы