#はじめに
Confluent(Kafka)の開発環境をDockerを使って10分で構築する方法を記載します。
(開発環境と限定しているのは、冗長化や分散化を行っておらずデータの欠損を招く恐れがあるからです。)
##前提条件
- Dockerが動作する環境がある事
- Dockerホストのメモリが8GB以上あること(満たなくても動くことがありますが、私が使った感覚ではよく落ちました)
- 環境構築を行うDockerホストがインターネットと接続している事
- Docker-Composeをインストールしている事
- gitコマンドのインストールしていること
※ 前提手順の環境構築する手順記載していませんので、必要に応じて他の人の記事を参照してください。"Docker-Compose 導入"などのキーワードで出てきます。
環境構築手順と簡易解説
(1) githubからdocker-compose.yamlファイルの入手
# git clone https://github.com/confluentinc/examples
# cd examples
# git checkout 5.3.1-post
# cd cp-all-in-one
- ブランチ名
5.3.1-post
の数値はConfluentのバージョン番号を指しています。2019年10月現在のLatestで記載しています。
(2) Dockerイメージのダウンロードとコンテナの起動
# docker-compose up -d --build
- コマンドが終了してもバックグラウンドで各デーモンが起動中の場合があります。GUI[
http://localhost:9021
]でステータスを確認してください。
(3) 稼働状況の確認
# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------
broker /etc/confluent/docker/run Up 0.0.0.0:29092->29092/tcp,
0.0.0.0:9092->9092/tcp
connect /etc/confluent/docker/run Up 0.0.0.0:8083->8083/tcp,
9092/tcp
control-center /etc/confluent/docker/run Up 0.0.0.0:9021->9021/tcp
ksql-cli ksql http://localhost:8088 Up
ksql-datagen bash -c echo Waiting for K ... Up
ksql-server /etc/confluent/docker/run Up 0.0.0.0:8088->8088/tcp
rest-proxy /etc/confluent/docker/run Up 0.0.0.0:8082->8082/tcp
schema-registry /etc/confluent/docker/run Up 0.0.0.0:8081->8081/tcp
zookeeper /etc/confluent/docker/run Up 0.0.0.0:2181->2181/tcp,
2888/tcp, 3888/tcp
- Steteが全てUpである事を確認します。
ブラウザから、http://(DockerホストのIPアドレス):9092/ へアクセスしてステータスを確認
[確認項目]
- クラスタがrunning
- Brokers が 1 (動作しているブローカーノードの数)
- KSQL Clusters が 1 (動作しているKSQLサーバの数)
- Connect Clueters が 1 (動作しているKafka Connectサーバの数)
※ Docker上のステータスがUPしてからそれぞれのノード(サーバ)がRADYになるまで時間がかかります。
もし0の場合は数分待っててからブラウザのページを読み込みしてください
以上で、テスト環境の構築が終わりました。簡単でしたでしょうか?
起動停止と再起動、削除方法
起動停止
# docker-compose stop
再起動
# docker-compose start
環境の削除
# docker-compose down
※ Docker イメージは残ります。
補足
Docker環境は開発やテストやデモを行うときに非常に便利です。
Confluent社がデモシナリオをGITHUBに公開しています。
これらのシナリオを実行する時にも利用できるので環境を用意するだけでも面白いと思います。