使jmx与spotify/kafka docker图像配合使用

bttbmeg0  于 2021-06-07  发布在  Kafka
关注(0)|答案(4)|浏览(366)

我想让jmx和我一起工作 spotify/kafka docker图像。
我有一个 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,以“kafka已进入运行状态,进程已停留超过1秒(startsecs)”结束。
在boot2docker中的docker中运行kafka时,使用jmx监视kafka有一个相关的问题,但我更愿意坚持 `spotify/kafka` 所以zk和Kafka住在同一个容器里。
von4xj4u

von4xj4u1#

你能试着指定主机地址吗(你正在运行 docker run )在属性中:

-Djava.rmi.server.hostname=xx.xx.xx.xx
5us2dqdw

5us2dqdw2#

docker容器在计算机中的ip集上运行。要查看这些,请运行: docker inspect docker_my-kafka_1 这将输出机器正在工作的ip,例如: "IPAddress": "172.17.0.2", 您需要将上述ip添加到: -Djava.rmi.server.hostname=$INSERT_IP_HERE

j8yoct9x

j8yoct9x3#

由于您更喜欢使用zk和kafka都位于同一容器中的解决方案,请看https://github.com/landoop/fast-data-dev
这个 Docker 专注于提供一个优秀的 Kafka Development Environment ,因此它公开了所有jmx

ws51t4hk

ws51t4hk4#

jmx选项已经存在于起始脚本中 /opt/kafka_2.11-0.10.1.0/bin/kafka-run-class.shspotify/kafka docker图像。你可以从容器里把它们挖出来

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

您可以在容器内jvm进程的java选项的开头看到它们

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

然后在开始一个新的容器,解决了我在你的主机Kafka, jconsole my-kafka:7203 将连接到容器的jmx端口。

相关问题