Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

EMQX と ClickHouse の統合

EMQX への接続

EMQX は、高性能なリアルタイムメッセージ処理エンジンを備えたオープンソースの MQTT ブローカーであり、大規模な IoT デバイス向けのイベントストリーミングを支えています。高いスケーラビリティを持つ MQTT ブローカーとして、EMQX はあらゆるデバイスを、どのような規模でも接続するのに役立ちます。IoT データをどこへでも移動して処理できます。

EMQX Cloud は、EMQ が提供する IoT 分野向けの MQTT メッセージングミドルウェア製品です。世界初の完全マネージド型 MQTT 5.0 クラウドメッセージングサービスとして、EMQX Cloud は MQTT メッセージングサービス向けに、ワンストップの運用・保守と独自の分離環境を提供します。あらゆるモノがつながる時代において、EMQX Cloud は IoT 分野向けの業界アプリケーションを迅速に構築し、IoT データを容易に収集、伝送、コンピュート、永続化できるよう支援します。

クラウドプロバイダーが提供するインフラストラクチャ上で、EMQX Cloud は世界中の数十の国と地域にサービスを提供しており、5G および Internet of Everything アプリケーション向けに、低コストで安全かつ信頼性の高いクラウドサービスを提供しています。

クラウドインフラストラクチャの構成要素を示す EMQX Cloud Architecture の図

前提条件

  • 非常に軽量な publish/subscribe 型メッセージ転送プロトコルとして設計された MQTT プロトコルに精通していること。
  • 大規模な IoT デバイスのイベントストリーミングを支えるリアルタイムメッセージ処理エンジンとして、EMQX または EMQX Cloud を使用していること。
  • デバイスデータを永続化するための ClickHouse Cloud インスタンスを準備していること。
  • MQTT データをパブリッシュするために、EMQX Cloud のデプロイメントへ接続する MQTT クライアントのテストツールとして MQTT X を使用します。なお、MQTT ブローカーに接続できる他の方法でも問題ありません。

ClickHouse Cloud サービスを取得する

このセットアップでは、ClickHouse インスタンスを AWS の N. Virginia (us-east-1) にデプロイし、EMQX Cloud インスタンスも同じリージョンにデプロイしました。

AWS リージョンの選択を示す ClickHouse Cloud サービスのデプロイ インターフェイス

セットアップ中は、接続設定にも注意する必要があります。このチュートリアルでは "Anywhere" を選択していますが、特定の場所に制限する場合は、EMQX Cloud のデプロイメントから取得した NAT ゲートウェイ の IP アドレスをホワイトリストに追加する必要があります。

IP アクセス設定を示す ClickHouse Cloud の接続設定

次に、後で使用するためにユーザー名とパスワードを保存します。

ユーザー名とパスワードを示す ClickHouse Cloud の認証情報画面

その後、稼働中の ClickHouse インスタンスが利用可能になります。ClickHouse Cloud インスタンスの接続先アドレスを取得するには、"Connect" をクリックします。

接続オプションを備えた ClickHouse Cloud の稼働中インスタンスのダッシュボード

EMQX Cloud とのインテグレーションのためのデータベースとテーブルを作成するには、"Connect to SQL Console" をクリックします。

ClickHouse Cloud の SQL Console インターフェイス

以下の SQL ステートメントを参照するか、実際の状況に応じて SQL を調整してください。

CREATE TABLE emqx.temp_hum
(
   client_id String,
   timestamp DateTime,
   topic String,
   temp Float32,
   hum Float32
)
ENGINE = MergeTree()
PRIMARY KEY (client_id, timestamp)
ClickHouse Cloud でのデータベースとテーブル作成用 SQL クエリの実行

EMQX Cloud 上で MQTT サービスを作成する

EMQX Cloud で専用の MQTT ブローカーを作成するのは、数回クリックするだけです。

アカウントを作成する

EMQX Cloud では、すべてのアカウントで、標準デプロイメントとプロフェッショナルデプロイメントの両方を 14 日間無料で試用できます。

EMQX Cloud を初めて利用する場合は、EMQX Cloud sign up ページにアクセスし、start free をクリックしてアカウントを登録します。

登録フォームが表示された EMQX Cloud のサインアップページ

MQTTクラスターを作成する

ログインしたら、アカウントメニューの「Cloud console」をクリックします。新しいデプロイメントを作成するための緑色のボタンが表示されます。

デプロイメントのオプションを示す EMQX Cloud のデプロイメント作成ステップ 1

このチュートリアルでは、Professional デプロイメントを使用します。MQTT データをコードを1行も書かずに ClickHouse へ直接送信できるデータインテグレーション機能を提供しているのは、Pro バージョンだけだからです。

Pro バージョンを選択し、N.Virginial リージョンを選んで Create Now をクリックします。数分で、完全マネージド型の MQTT ブローカーが利用可能になります。

リージョンの選択を示す EMQX Cloud のデプロイメント作成ステップ 2

次に、パネルをクリックしてクラスター画面に移動します。このダッシュボードでは、MQTT ブローカーの概要を確認できます。

ブローカーのメトリクスを示す EMQX Cloud の概要ダッシュボード

クライアント認証情報を追加する

EMQX Cloud ではデフォルトで匿名接続が許可されていないため、MQTT クライアントツールでこのブローカーにデータを送信できるように、クライアント認証情報を追加する必要があります。

左側のメニューで 'Authentication & ACL' をクリックし、サブメニューで 'Authentication' をクリックします。右側の 'Add' ボタンをクリックして、後で MQTT 接続に使用するユーザー名とパスワードを設定します。ここでは、ユーザー名とパスワードに emqxxxxxxx を使用します。

認証情報を追加するための EMQX Cloud Authentication Setup インターフェイス

'Confirm' をクリックすると、完全マネージド型の MQTT ブローカーを使用する準備は完了です。

NAT ゲートウェイを有効にする

ClickHouse 連携の設定を開始する前に、まず NAT ゲートウェイを有効にする必要があります。デフォルトでは、MQTT ブローカーはプライベート VPC にデプロイされているため、パブリックネットワーク経由でサードパーティのシステムにデータを送信できません。

概要ページに戻り、ページの最下部までスクロールすると、NAT ゲートウェイのウィジェットが表示されます。Subscribe ボタンをクリックし、案内に従ってください。NAT ゲートウェイ は付加価値サービスですが、14 日間の無料トライアルも利用できます。

EMQX Cloud NAT Gateway 設定パネル

作成が完了すると、ウィジェット内にパブリック IP アドレスが表示されます。ClickHouse Cloud の設定時に Connect from a specific location を選択した場合は、この IP アドレスをホワイトリストに追加する必要がある点に注意してください。

EMQX Cloud と ClickHouse Cloud のインテグレーション

EMQX Cloud Data Integrations は、EMQX のメッセージフローやデバイスイベントを処理し、それらに応答するためのルールを設定する際に使用されます。Data Integrations は、明確で柔軟な「設定可能な」アーキテクチャを提供するだけでなく、開発プロセスを簡素化し、ユーザビリティを向上させ、業務システムと EMQX Cloud の結合度を低減します。さらに、EMQX Cloud 固有の機能をカスタマイズするための優れたインフラストラクチャも提供します。

利用可能なコネクタを示す EMQX Cloud Data Integration のオプション

EMQX Cloud は、一般的なデータシステム向けに 30 を超えるネイティブインテグレーションを提供しています。ClickHouse もその 1 つです。

EMQX Cloud の ClickHouse Data Integration コネクタの詳細

ClickHouse リソースを作成する

左側のメニューで「Data Integrations」をクリックし、「View All Resources」をクリックします。Data Persistence セクションにある ClickHouse を選ぶか、検索して ClickHouse を探します。

ClickHouse のカードをクリックして、新しいリソースを作成します。

  • Note: このリソース用のメモを追加します。
  • Server address: ClickHouse Cloud サービスのアドレスです。ポート番号も忘れずに含めてください。
  • Database name: 上の手順で作成した emqx です。
  • User: ClickHouse Cloud サービスへの接続に使用するユーザー名です。
  • Key: 接続用のパスワードです。
接続の詳細を含む EMQX Cloud の ClickHouse リソース設定フォーム

新しいルールを作成する

リソースの作成中にポップアップが表示され、'New' をクリックすると、ルール作成ページに移動します。

EMQX には強力な ルールエンジン が用意されており、生の MQTT メッセージをサードパーティシステムに送信する前に、変換やデータの拡充を行えます。

このチュートリアルで使用するルールは次のとおりです。

SELECT
   clientid AS client_id,
   (timestamp div 1000) AS timestamp,
   topic AS topic,
   payload.temp AS temp,
   payload.hum AS hum
FROM
"temp_hum/emqx"

temp_hum/emqx トピックからメッセージを読み取り、client_id、topic、timestamp の情報を追加して JSONオブジェクトを拡充します。

したがって、トピックに送信する生の JSON は次のとおりです。

{"temp": 28.5, "hum": 0.68}
SQLクエリを表示する EMQX Cloud Data Integration Rule Creation Step 1

SQL テストを使用して、結果を確認できます。

テスト結果を表示する EMQX Cloud Data Integration Rule Creation Step 2

次に、"NEXT" ボタンをクリックします。このステップでは、加工したデータを ClickHouse データベースにどのように挿入するかを EMQX Cloud に指定します。

レスポンスアクションを追加する

リソースが 1 つしかない場合は、'Resource' と 'Action Type' を変更する必要はありません。 SQL テンプレートを設定するだけです。このチュートリアルで使用する例を以下に示します。

INSERT INTO temp_hum (client_id, timestamp, topic, temp, hum) VALUES ('${client_id}', ${timestamp}, '${topic}', ${temp}, ${hum})
SQL Template を使用した EMQX Cloud Data Integrationルールアクションの設定

これは ClickHouse にデータを挿入するためのテンプレートで、ここでは変数が使われています。

ルールの詳細を表示する

「Confirm」と「View Details」をクリックします。これで設定は完了です。ルールの詳細ページで、Data Integrationが正しく動作していることを確認できます。

構成の概要を示す EMQX Cloud Data Integrationのルール詳細

temp_hum/emqx トピックに送信されたすべての MQTT メッセージは、ClickHouse Cloud のデータベースに永続化されます。

データを ClickHouse に保存する

温度と湿度のデータをシミュレートし、まず MQTT X 経由で EMQX Cloud に送信します。その後、EMQX Cloud の Data Integrations を使って、そのデータを ClickHouse Cloud に保存します。

データフローを示す、EMQX Cloud から ClickHouse へのワークフロー図

EMQX Cloud に MQTT メッセージをパブリッシュする

メッセージのパブリッシュには、任意の MQTT クライアントまたは SDK を使用できます。このチュートリアルでは、EMQ が提供する使いやすい MQTT クライアントアプリケーション MQTT X を使用します。

クライアントのインターフェイスを示す MQTTX の概要

MQTTX で "New Connection" をクリックし、接続フォームに入力します。

  • Name: 接続名。任意の名前を指定します。
  • Host: MQTT ブローカーの接続先アドレス。EMQX Cloud の概要ページで確認できます。
  • Port: MQTT ブローカーの接続ポート。EMQX Cloud の概要ページで確認できます。
  • Username/Password: 上で作成した認証情報を使用します。このチュートリアルでは emqxxxxxxx です。
接続情報を入力する MQTTX の New Connection 設定フォーム

右上の "Connect" ボタンをクリックすると、接続が確立されます。

これで、このツールを使って MQTT ブローカーにメッセージを送信できます。 入力内容:

  1. ペイロードのフォーマットを "JSON" に設定します。
  2. トピックを temp_hum/emqx に設定します (先ほどルールで設定したトピックです)
  3. JSON 本文:
{"temp": 23.1, "hum": 0.68}

右側の送信ボタンをクリックします。温度の値を変更して、MQTT ブローカーにさらにデータを送信できます。

EMQX Cloud に送信されたデータは、ルールエンジンで処理され、ClickHouse Cloud に自動的に挿入されます。

メッセージ作成画面を示す MQTTX の MQTT メッセージ公開インターフェイス

ルール監視を表示

ルール監視を確認し、成功数が1増えていることを確認します。

メッセージ処理メトリクスが表示されたEMQX Cloudのルール監視ダッシュボード

永続化されたデータを確認する

それでは、ClickHouse Cloud 上のデータを確認してみましょう。理想的には、MQTTX で送信したデータは EMQX Cloud に送られ、native データインテグレーションによって ClickHouse Cloud のdatabaseに永続化されます。

ClickHouse Cloud のパネルにある SQL Console に接続するか、任意のクライアントツールを使用して ClickHouse からデータを取得できます。このチュートリアルでは、SQL Console を使用します。 次の SQL を実行します。

SELECT * FROM emqx.temp_hum;
永続化されたIoTデータを示すClickHouseのクエリ結果

概要

コードを一切書かずに、MQTT データを EMQX Cloud から ClickHouse Cloud へ転送できるようになりました。EMQX Cloud と ClickHouse Cloud を使えば、インフラを管理する必要はなく、データを ClickHouse Cloud に安全に保存しながら、IoT アプリケーションの開発に集中できます。

Navigation