Raspberry Piのカメラやセンサーなどで取得したデータを、ViewerやZabbix/Grafanaなどの可視化ツールとの間で受け渡す役割を果たすKafkaブローカを構築します。
flowchart LR
subgraph R[Raspberry Pi]
WR(SINETStream)
end
subgraph S[Server]
B[Kafka Broker]
end
V1["VideoViewer"]
V2["Zabbix"]
V3["Grafana+Elasticsearch"]
WR==>B
B-.->V1
B-.->V2
B-.->V3
ここで示す手順で構築されるKafkaブローカは以下の構成となっています。
- 通信路の暗号化なし
- ブローカでの認証なし
- 1ノード構成
Kafkaブローカは Docker コンテナで実行します。そのため Docker Engine などを事前にインストールしておく必要があります。
「Install Docker Engine」などを参考に Docker Engine のインストールを行ってください。Dockerのバージョンは 19.03.0 以上が必要となります。
複数のコンテナをまとめて管理するためにDocker Composeを利用します。Docker Composeはコンテナの起動パラメータなどを設定ファイルdocker-compose.yml
に記述することでコンテナの管理を容易にするツールです。「Where to get Docker Compose - Linux」などを参考にインストールを行ってください。Docker Compose のバージョンは 1.27.1 以上が必要となります。
このディレクトリにあるファイルをKafkaブローカを構築するノードに配置してください。
Kafkaブローカのパラメータはコンテナの環境変数として設定を行います。コンテナの環境変数はdocker-compose.yml
と同じディレクトリに .env
を作成し、そのファイルの記述により設定が行われます。
.env
は各行が「(パラメータ名)=(値)」の形式になっているファイルとなります。記述例を以下に示します。
BROKER_HOSTNAME=kafka.example.org
KAFKA_MESSAGE_MAX_BYTES=20971520
この例ではBROKER_HOSTNAME
, KAFKA_MESSAGE_MAX_BYTES
というパラメータに対して、それぞれ kafka.example.org
, 20971520
を値として指定しています。
.env
のフォーマットの詳細についてはDocker Compose/Environment File#Syntax rulesを参照してください。
KAFKAブローカのアドレスとしてクライアントに知らせるホスト名またはIPアドレスを指定します。
クライアントからはここで指定した値でアクセスできる必要があります。IPアドレスを指定した場合は、そクライアントからそのIPアドレスでアクセス可能となっている必要があります。ホスト名を指定した場合はDNSまたはクライアント環境の /etc/hosts
などで名前解決できアクセス可能となっている必要があります。
Kafkaブローカに対する設定パラメータは Kafka Documentation - 3.1 Broker Configs に記されているものを指定することができます。ここで利用するConfluentのKafkaコンテナでは、コンテナの環境変数によりKafkaブローカのプロパティを設定することができます。この際に指定する環境変数名は、以下のようなルールでKafkaブローカに設定するプロパティ名を変換したものになります。
- 環境変数名のプレフィックスに
KAFKA_
をつける - 全て大文字に変換する
- ピリオド
.
を アンダースコア_
に置き換える - ハイフン
-
を 2文字のアンダースコア__
に置き換える - アンダースコア
_
を 3文字のアンダースコア___
に置き換える
例えば、プロパティmessage.max.bytes
は環境変数KAFKA_MESSAGE_MAX_BYTES
として指定します。
環境変数の指定方法の詳細についてはConfluent Kafka configurationを参照してください。
docker-compose.yml
を配置したディレクトリで以下のコマンドを実行してください。
docker compose up -d
ここでは Docker Compose v2 の実行例を示しています。v1を利用している場合は
docker compose
のかわりにdocker-compose
を用いてください。
コンテナの状態を確認します。
$ docker compose ps
NAME COMMAND SERVICE STATUS PORTS
broker "/etc/confluent/dock…" broker running
zookeeper "/etc/confluent/dock…" zookeeper running
broker
コンテナzookeeper
コンテナの状態(STATUS)がいずれもrunning
となっていることを確認してください。
STATUSの値がrunning
となっていない場合はコンテナのログなどを確認することによりエラーの原因を調査してください。
docker compose logs