Kafka Dockerを使ってKafkaの実行環境を作っていたが、コンテナに接続してtopic一覧を表示しようとした際に、チュートリアルにある環境変数 $KAFKA_HOME と $ZK がどこで設定できるのかわからず詰まってしまった。
$KAFKA_HOME/bin/kafka-topics.sh --describe --topic topic --zookeeper $ZK
まず $KAFKA_HOME だが、これは設定する必要がない。Kafka DockerのDockerfileを見てみると、ここで KAFKA_HOME=/opt/kafka という記述がある。
次に $ZK だが、これはGitHubレポジトリの start-kafka-shell.sh 経由でコンテナに接続した場合を想定した記法である。このシェルスクリプトの第2引数が、そのまま $ZK の値として設定される。
ここには 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 は使えないので直接指定する必要がある。