WindowsでKafka+Node red(動作確認)

前回Windows上でKafka+Node redのセットアップを行ったので、今回は動作確認を行った。

起動

前回作成したKafkaとNode redのコンテナを起動する。Docker for windowsを起動して、左のほうの「Containers/App」からKafkaとNode redのStartボタンを押す。コンテナ名の下に「RUNNING」と表示されればOK。 Dockerがなかなか起動しない場合は、1度WSLを立ち上げるとDockerも起動する。

Kafkaの準備

コンテナを起動した状態で以下にアクセスすると、Kafaの管理画面に入ることができる。

http://localhost:9000/

上部のAdd Clusterをクリックすると、クラスタ作成画面に入る。

ここでCluster Nameに好きな名前、Cluster Zookeeper Hostsに自身のIPアドレス、または「localhost」と入力しSaveを押すとクラスタが作成される。この時、自身のIPアドレスを設定していれば同一LANの別PCからも、このKafkaにアクセス可能だが、「localhost」だと基本的に外部からアクセス不可となる(ポートフォワーディングなどやる方法はあるが、それはまた別のお話)。もちろん自身のIPアドレスを設定する場合は、IPアドレスを固定しておくこと。

Node redの準備

コンテナを起動した状態で以下にアクセスすると、Node redの管理画面に入ることができる。

http://localhost:1880/

Node redはノードと呼ばれる各機能をつなげてアプリケーションを作成することのできるツールである。本来Webアプリケーションを作成するには、HTMLやJavaScriptを書いたり超面倒だが、Node redだとちょちょいのチョイでWebアプリケーションを作成できる優れものである。 ノードは先人たちが作成してくれたものが公開されているので、それを使うことができる。今回はKafkaのノードをインストールする。

右上のΞ→パレットの管理→ノードの検索から「node-red-contrib-kafka-manager」を検索しインストールする。インストールが完了すると、Kafka用のノードが左のパレット(ノードがたくさん置いてあるところ)に追加される。

Node redフローの作成

「inject」→「Kafka Producer」と「Kafuka Consumer」→「Debug」となるように接続する。ここで、「inject」は適当なデータ(初期設定だとタイムスタンプ)を送信するノード、「Debug」は受け取ったデータをデバッグログに出力するノード、「Kafka Producer」は受け取ったノードをKafkaの指定したTopicに送信するノード、「Kafuka Consumer」はKafkaの指定したTopicからデータを取り出すノードである。

つまり、タイムスタンプのデータをいったんKafkaに送信して、そのデータを取り出しデバッグログに出力する、というフローになる。

Node red設定

Kafkaとやり取りを行うために、以下のよウニ設定を行う。

  • 「Kafka Producer」をダブルクリックし、Brokerを編集する。IPアドレスをCluster Zookeeper Hostsで設定したIPアドレスに設定する。またTopicを作成したTopic名にする。
  • 「Kafuka Consumer」をダブルクリックし、Topicを作成したTopic名にする。

以上が終了したら、右上のデプロイを押す。

Kafka動作確認

右上の虫のようなマークを押し、デバッグログを表示しておく。「inject」ノードの左にあるボタンを押すと、データが送信される。デバッグログに何かしら数字が表示されていればOK。(タイムスタンプを送信しているので、時間が表示されるんじゃないの?と思うが、Kafkaとはメッセージ=文字列でやり取りを行っている。対してタイムスタンプはオブジェクトデータである。そのため時間を表示したいのであれば、受信したメッセージを時間に変換する処理が必要である。)