紹介したいこと
- ローコードでMQTTを送受信する方法を紹介します。
- HopにはMQTTをPublish, Subscribeする部品がある。
- HopでのETLの定義の雰囲気を伝えたい for Beginner。
対象者
- Apache Hop (データ統合プラットフォーム) 、ETLを試してみたい方。
- ローコードでMQTTを送受信してETL処理に連携させたい方。
前提
- Dockerを動かすことができる(MQTT Broker)。
- Apache Hopをインストールしている、HOP GUIを操作できる、簡単な変換処理を定義できる。
- MQTT部品は標準部品に含まれてない。EXTERNAL PLUGINSのため、以下のサイトの手順沿ってビルドして配置する必要がある。
全体構成
MQTTの送受信の動きを確認するため、以下の全体構成、データの流れを考えて、試してみた。
MQTTとは
https://kfep.jp/solution/iot-mqtt/mqtt
手順の流れ
- MQTT Brokerを起動する
- MQTTをPublishするPipelineを作成する
- MQTTをSubscribeするPipelineを作成する
- 動作確認する
MQTT Brokerを起動する
以下のDocker Composeを定義して、docker-compose up -dでBrokerを起動する。
mosquittoをMQTTサーバとして使う。
version: "3"
services:
broker:
image: eclipse-mosquitto
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
user: "1000:1000"
ports:
- 1883:1883
MQTTをPublishするPipelineを作成する
-
Generate rows
Never stop generating rows: チェックをいれる
Interbal in ms: 5000 5秒周期で行を生成しつづける -
Add sequence
Name of value: valuename → このフィールド名でデータがながれる
Start at Value: 1 : 1から開始
Increment by: 1 : 1ずつインクリメント
Maximum value: 100 : 1~100までインクリメントでまた1にもどる -
MQTT Publisher
Broker URL: 環境にあわせて設定すること。
Credentials, SSLは、環境にあわせて設定すること。
Incoming message filed: valuename: 流れてきたデータをmessageとしてPublishする
MQTTをSubscribeするPipelineを作成する
動作確認する
Publishする側は、以下のインクリメントしたデータを送信し続ける。定周期 5秒ごとに。
送信されたデータは、 MQTT Brokerを介してSubscriberに配信される。
Subscribeする側は、以下のようにデータが受信される。
まとめ
- このようにMQTT部品を利用して、MQTTのデータをPublisher, Subscribeできることを確認できた。IoTデータなどがMQTT経由でApacheHopでデータを受信できそう。
- ApacheHopには、mongoDB、PostgerSQL、neo4j, splunkとの連携する機能がある。MQTTで受信したデータを変換して保存することができるかもしれない。
- Kafka部品もあるので、MQTTのデータをKafkaに連携させることもできそう。MQTTのデータをKSQLなどで集計することもできるかもしれない。
注意事項
- データ量が増加したり、データの送信頻度が増えたときに、どのくらいスループットが保証できるかは、要件にあわせて試してみてる必要があると思う。
- 1Pipelineにどのくらい定義できるのか?何個最大でうごかせるか?などはマシンスペック、ネットワークなど環境によりそう。
- MQTT部品でセキュリティの設定したときの動作は未確認。それも要件によって確認が必要だと思う。
参考
Streaming Apache Hop and MQTT
https://diethardsteiner.github.io/hop/2021/02/08/Apache-Hop-An-introduction-to-MQTT.html