使JMX与spotify / kafka Docker镜像一起工作
我试图让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
进行testing,并在JRMP连接build立期间收到“连接失败:错误; 嵌套的exception是: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进入RUNNING状态,进程已经停留超过1秒(startsecs)”结束。
在boot2docker的Docker中运行kafka时,有一个相关的问题使用JMX进行监视,但是我更愿意坚持使用spotify/kafka
以便ZK和Kafka能够在同一个容器中。
你可以尝试在属性中指定主机地址(你在哪里运行docker run
):
-Djava.rmi.server.hostname=xx.xx.xx.xx
jmx选项已经存在于spotify/kafka
/opt/kafka_2.11-0.10.1.0/bin/kafka-run-class.sh
的启动脚本/opt/kafka_2.11-0.10.1.0/bin/kafka-run-class.sh
中。 你可以从容器内grep他们
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
设置JMX_PORT
环境variables就足够了,并且删除了额外的(重复的) 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端口。
Docker容器运行在您的机器内部的IP地址上。 要看到这些,运行:
docker inspect docker_my-kafka_1
这将输出机器正在工作的IP,如下所示:
"IPAddress": "172.17.0.2",
您需要将上面find的IP添加到:
-Djava.rmi.server.hostname=$INSERT_IP_HERE
如果您喜欢使用ZK和Kafka都在同一容器中的解决scheme,请查看https://github.com/Landoop/fast-data-dev
这个docker专注于提供一个优秀的Kafka Development Environment
,所以其中包括所有的JMX
- 使用Kafka代理的Dockerized Spring Cloud Stream服务无法连接到Zookeeper
- 无法在openwhisk设置中列出kafka主题
- 为wurstmeister / kafka docker图像定义Zookeeper znode
- 卡夫卡连接logindocker集装箱
- 有没有办法从使用kafkacat在Docker容器中运行的kafka节点读取消息?
- 通过kafka进行无限日志logging
- 是否有可能使用卡夫卡与docker组成一个单一的主机,而不暴露动物园pipe理员和卡夫卡端口到公共互联网?
- 如何在Docker中设置Zookeeper的dataDir(fig.yml)
- 从docker集装箱向外部的卡夫卡经纪人发布信息