Kafka Dockerで$KAFKA_HOMEと$ZKの値を設定する

Kafka Dockerを使ってKafkaの実行環境を作っていたが、コンテナに接続してtopic一覧を表示しようとした際に、チュートリアルにある環境変数 $KAFKA_HOME$ZK がどこで設定できるのかわからず詰まってしまった。

$KAFKA_HOME/bin/kafka-topics.sh --describe --topic topic --zookeeper $ZK

wurstmeister.github.io

まず $KAFKA_HOME だが、これは設定する必要がない。Kafka DockerのDockerfileを見てみると、ここで KAFKA_HOME=/opt/kafka という記述がある。

hub.docker.com

次に $ZK だが、これはGitHubレポジトリの start-kafka-shell.sh 経由でコンテナに接続した場合を想定した記法である。このシェルスクリプトの第2引数が、そのまま $ZK の値として設定される。

github.com

ここには docker-compose.yml で設定した KAFKA_ZOOKEEPER_CONNECT の値を入れれば良い。 wurstmeister/zookeeper を併用している場合、ホスト名は当該コンテナの hostname を参照、ポートはデフォルトでは2181になる。

zookeeper:
    image: wurstmeister/zookeeper
    hostname: zookeeper
kafka:
    ....
    environment:
        KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

なお、 start-kafka-shell.sh はあくまでラッパースクリプトにすぎないので、 docker exec で直接コンテナに接続しても問題ない。その場合、 $KAFKA_HOME は使えるが $ZK は使えないので直接指定する必要がある。