Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

_{HOSTNAME_COMMAND} does not work with KAFKA_JMX_OPTS #650

Open
mdedetrich opened this issue Apr 13, 2021 · 0 comments
Open

_{HOSTNAME_COMMAND} does not work with KAFKA_JMX_OPTS #650

mdedetrich opened this issue Apr 13, 2021 · 0 comments

Comments

@mdedetrich
Copy link

mdedetrich commented Apr 13, 2021

So I currently I have a usecase where I need to set up a kafla cluster with multiple brokers (i.e. at least 2) to diagnose a performance issue with reassigning partitions. Since I am setting up multiple brokers I need to use the HOSTNAME_COMMAND to manually set the hostname for each broker.

This is the initial docker-compose.yaml that I used

version: '2'

services:
  zookeeper:
    image: wurstmeister/zookeeper:latest
    ports:
      - "2181:2181"

  kafka:
    image: wurstmeister/kafka:latest
    ports:
      - "9092"
    depends_on:
      - zookeeper
    environment:
      # See https://stackoverflow.com/a/42729826
      HOSTNAME_COMMAND: "route -n | awk '/UG[ \t]/{print $$2}'"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
      KAFKA_DELETE_TOPIC_ENABLE: 'true'
      KAFKA_HEAP_OPTS: "-Xmx2G -Xms2G"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Now I need to actually set up a JMX port so that I can connect to the the broker instances using visualvm so I adjusted the docker-compose.yaml to look like the following

version: '2'

services:
  zookeeper:
    image: wurstmeister/zookeeper:latest
    ports:
      - "2181:2181"

  kafka:
    image: wurstmeister/kafka:latest
    ports:
      - "9092"
      - "1099"
    depends_on:
      - zookeeper
    environment:
      # See https://stackoverflow.com/a/42729826
      HOSTNAME_COMMAND: "route -n | awk '/UG[ \t]/{print $$2}'"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
      KAFKA_DELETE_TOPIC_ENABLE: 'true'
      KAFKA_HEAP_OPTS: "-Xmx2G -Xms2G"
      KAFKA_JMX_OPTS: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=_{HOSTNAME_COMMAND} -Dcom.sun.management.jmxremote.rmi.port=1099"
      JMX_PORT: 1099
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

The main issue here is using the _{HOSTNAME_COMMAND} in -Djava.rmi.server.hostname for the KAFKA_JMX_OPTS. With these changes and using docker-compose up -d --scale kafka=2 there seems to be some interpolation error when kafka tries to start, I get the following error

/usr/bin/start-kafka.sh: line 59: export: `-Dcom.sun.management.jmxremote.authenticate=false': not a valid identifier
/usr/bin/start-kafka.sh: line 59: export: `-Dcom.sun.management.jmxremote.ssl=false': not a valid identifier
/usr/bin/start-kafka.sh: line 59: export: `-Djava.rmi.server.hostname=192.168.160.1': not a valid identifier
/usr/bin/start-kafka.sh: line 59: export: `-Dcom.sun.management.jmxremote.rmi.port=1099': not a valid identifier

so the actual substitution for _{HOSTNAME_COMMAND} seems to work since 192.168.160.1 is in the error but it appears that the substitution method is somehow breaking the -D java settings that get sent to kafka. Note that if I manually put in 192.168.160.1 into the docker-compose, i.e.

version: '2'

services:
  zookeeper:
    image: wurstmeister/zookeeper:latest
    ports:
      - "2181:2181"

  kafka:
    image: wurstmeister/kafka:latest
    ports:
      - "9092"
      - "1099"
    depends_on:
      - zookeeper
    environment:
      # See https://stackoverflow.com/a/42729826
      HOSTNAME_COMMAND: "route -n | awk '/UG[ \t]/{print $$2}'"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
      KAFKA_DELETE_TOPIC_ENABLE: 'true'
      KAFKA_HEAP_OPTS: "-Xmx2G -Xms2G"
      KAFKA_JMX_OPTS: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.160.1 -Dcom.sun.management.jmxremote.rmi.port=1099"
      JMX_PORT: 1099
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

The cluster works fine but I then have issues to the host using visualvm, i.e. after a run of docker-compose up -d --scale kafka=2 and then doing docker ps -a I get

a5c10f9bd8bb   wurstmeister/kafka:latest       "start-kafka.sh"         25 seconds ago   Up 24 seconds   0.0.0.0:49222->1099/tcp, 0.0.0.0:49221->9092/tcp     docker-compose_kafka_1
beec603b54cc   wurstmeister/kafka:latest       "start-kafka.sh"         25 seconds ago   Up 24 seconds   0.0.0.0:49220->1099/tcp, 0.0.0.0:49219->9092/tcp     docker-compose_kafka_2
d414d7e5d557   wurstmeister/zookeeper:latest   "/bin/sh -c '/usr/sb…"   26 seconds ago   Up 25 seconds   22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp   docker-compose_zookeeper_1

The first brokers JXM host should be localhost:49220 however in visualvm I don't seem to be able to connect to this

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant