「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>Azure Event Hubs]] * 目次 [#z9ee8325] #contents *概要 [#z6d99652] ここでは、C#で、IoTデバイス → Azure Event Hubs → [[Azure Databricks]]と繋いでみる。 *詳細 [#x02d777e] **契約 [#gaa4007d] ***[[Azureの契約>AzureのPoC環境を契約する]] [#f39bae70] ***Event Hubsの契約 [#jced0ea9] Basic レベル、Standard レベルを選択できるらしい。 **Event Hubsの構築 [#f1eb5620] **構築 [#f1eb5620] 取り敢えず、[[Kafka>Azure Event Hubs#mb379986]]エンドポイントを持つEvent Hubsを構築してみる。 ***Kafkaエンドポイント [#od841821] -SKU --Basic レベルではサポートされていない。 --Standard レベルを選択すれば利用可能である模様。 -マッピング |Event Hubs|Kafka|h |名前空間|クラスター| |イベントハブ|トピック| |Partition|Partition| |コンシューマーグループ|コンシューマーグループ| |Offset|Offset| -圧縮/メッセージフォーマットは現在サポートしていない。 -[[認証>#v6c350bf]]機構としてSASL認証をサポートしている。~ が、その場合(≒IoTデバイスから接続する場合)、~ 推奨は、標準の[[接続文字列(SASトークン)>#y03d6018]]の利用らしい。 -[[コンシューマ・グループ>Azure Event Hubs#z68588e4]]は別モノ(完全に区別される)。 -追加の制限事項 --group.id プロパティの最大長は 256 文字 --offset.metadata.max.bytes の最大サイズは 1024 バイト ***Event Hubsの作成 [#d5ec211f] -ポータルから --リソース グループを作成~ データ・パープライン系は「West US 2」辺りが良いかも。 --Event Hubs 名前空間を作成 --Event Hubs を作成 -IaC化 --[[Azure CLI]]で ---リソース・グループがない場合、作成 az group create --name [ResourceGroupName] --location [Location] 例:az group create --name EventHubsRG --location "Japan East" ---Event Hubs 名前空間を作成 az eventhubs namespace create --name [EventHubsNamespace] --resource-group [既存のRG名] -l [Location] 例:az eventhubs namespace create --name osscjpdevinfra --resource-group EventHubsRG -l "Japan East" ※ 省略してある--skuの既定値はStandardになっている。 ---イベント ハブの作成 az eventhubs eventhub create --name [EventHubsName] --resource-group [既存のRG名] --namespace-name [EventHubs名前空間] 例:az eventhubs eventhub create --name OsscJpDevInfra --resource-group EventHubsRG --namespace-name osscjpdevinfra ---IPアドレス制限 az eventhubs namespace network-rule add --resource-group [ResourceGroupName] --namespace-name [EventHubs名前空間] --ip-address xxx.xxx.xxx.xxx/24 --action Allow 例:az eventhubs namespace network-rule add --resource-group EventHubsRG --namespace-name osscjpdevinfra --ip-address xxx.xxx.xxx.xxx/24 --action ---参考:~ ・https://opentouryo.osscons.jp/index.php?%E9%83%A8%E4%BC%9A%E3%83%A1%E3%83%A2%EF%BC%882021%E5%B9%B4%EF%BC%89#vc306769~ ・https://github.com/OpenTouryoProject/DataPipeline/tree/develop/Gateway/EventHubs/IaC *送受信 [#t3ac11a3] **[[純正 Kafkaクライアント>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Kafka%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB]]で送受信 [#saca433a] -先ずは、正しく構築できたことを確認するために送受信を行う。 -参考:https://github.com/Azure/azure-event-hubs-for-kafka/tree/master/quickstart/kafka-cli ***環境構築 [#q706ba8e] -[[純正 Kafkaクライアント>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Kafka%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB]] -[[Event Hubs>#d5ec211f]] ***接続文字列の取得 [#jc1302cd] -primaryConnectionStringを取得する。 -参考: --https://github.com/Azure/azure-event-hubs-for-kafka/tree/master/quickstart/kafka-cli --https://github.com/OpenTouryoProject/DataPipeline/tree/develop/Gateway/EventHubs/IaC ***コマンドで送受信 [#s999fb00] WSL2で実行する。 -準備 --取得 git clone https://github.com/Azure/azure-event-hubs-for-kafka.git cd azure-event-hubs-for-kafka/quickstart/kafka-cli --編集([[参考>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?vi#ebf62194]])~ password部分にprimaryConnectionString値を埋める。 $ dir README.md client_common.properties jaas.conf $ vi jaas.conf -送受信 kafkaInstallHome=/usr/local/kafka export KAFKA_OPTS="-Djava.security.auth.login.config=jaas.conf" echo $kafkaInstallHome echo $KAFKA_OPTS --受信 $kafkaInstallHome/bin/kafka-console-consumer.sh --topic test_topic --bootstrap-server $eventhubsNameSpace.servicebus.windows.net:9093 --consumer.config client_common.properties --送信 $kafkaInstallHome/bin/kafka-console-producer.sh --topic test_topic --broker-list $eventhubsNameSpace.servicebus.windows.net:9093 --producer.config client_common.properties > ※ $eventhubsNameSpaceは、[[コチラ>#q706ba8e]]で設定した値。 **[[Kafka .NET クライアント]]で送受信 [#f1a3a29f] -先ずは、正しく構築できたことを確認するために送受信を行う。 -参考:https://github.com/Azure/azure-event-hubs-for-kafka/tree/master/quickstart/dotnet ***接続文字列の取得 [#y03d6018] ポータルの「共有アクセス ポリシー」から取得する。 Endpoint=sb://[EventHubsNamespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ※ 内部的には、[[SASトークン>トークン#w01b1c2d]]を使用する。 ***サンプルをクローンして実行 [#m4346c39] -設定値 --環境に合わせて設定する。 ---EH_FQDN ---EH_CONNECTION_STRING --必要に応じて設定する。 ---EH_NAME:test(トピック名) ---CONSUMER_GROUP:$Default(既定の[[コンシューマ・グループ>Azure Event Hubs#z68588e4]]) --CA_CERT_LOCATION ---そのままでも動作する(また、設定しなくても動作する) ---パラメタとしては、Confluent.KafkaのSslCaLocation。 ---Azure Event Hubsの[[Kafkaエンドポイント>#od841821]]は既定でSSLらしい。 ---必要であれば、このパラメタで、認証局の証明書をポイントする。 -実行結果の例 Initializing Producer Sending 10 messages to topic: test, broker(s): osscjpdevinfra.servicebus.windows.net:9093 Message 0 sent (value: 'Sample message #0 sent at 2021-07-23_18:19:22.9101') Message 1 sent (value: 'Sample message #1 sent at 2021-07-23_18:19:23.3055') Message 2 sent (value: 'Sample message #2 sent at 2021-07-23_18:19:23.3599') Message 3 sent (value: 'Sample message #3 sent at 2021-07-23_18:19:23.4080') Message 4 sent (value: 'Sample message #4 sent at 2021-07-23_18:19:23.4652') Message 5 sent (value: 'Sample message #5 sent at 2021-07-23_18:19:23.5150') Message 6 sent (value: 'Sample message #6 sent at 2021-07-23_18:19:23.5784') Message 7 sent (value: 'Sample message #7 sent at 2021-07-23_18:19:23.6300') Message 8 sent (value: 'Sample message #8 sent at 2021-07-23_18:19:23.6865') Message 9 sent (value: 'Sample message #9 sent at 2021-07-23_18:19:23.7695') Initializing Consumer Consuming messages from topic: test, broker(s): osscjpdevinfra.servicebus.windows.net:9093 Received: 'Sample message #0 sent at 2021-07-23_18:19:22.9101' Received: 'Sample message #1 sent at 2021-07-23_18:19:23.3055' Received: 'Sample message #2 sent at 2021-07-23_18:19:23.3599' Received: 'Sample message #3 sent at 2021-07-23_18:19:23.4080' Received: 'Sample message #4 sent at 2021-07-23_18:19:23.4652' Received: 'Sample message #5 sent at 2021-07-23_18:19:23.5150' Received: 'Sample message #6 sent at 2021-07-23_18:19:23.5784' Received: 'Sample message #7 sent at 2021-07-23_18:19:23.6300' Received: 'Sample message #8 sent at 2021-07-23_18:19:23.6865' Received: 'Sample message #9 sent at 2021-07-23_18:19:23.7695' **Apache Spark系 [#g5224a9a] ***[[.NET for Apache Sparkで送受信>.NET for Apache Sparkのデータ接続#g36a8526]] [#j8bca1d2] ***[[Scalaで送受信>https://docs.microsoft.com/ja-jp/azure/event-hubs/event-hubs-kafka-spark-tutorial]] [#r7220b0e] ***[[PySparkで送受信>Azure Databricksチュートリアル#l13d0540]] [#t863cf1c] ***[[Azure Databricks]]から接続 [#v1eb2538] [[上記の受信処理>#g5224a9a]]を[[Azure Databricks>Azure Databricksチュートリアル]]上で実行する。 *参考 [#l9f00083] -Azure Event HubsをApache Kafkaのブローカーとして利用したメッセージの送受信 - Fusic Tech Blog~ https://tech.fusic.co.jp/posts/2020-12-22-azure-event-hub-as-kafka/ **Qiita [#za166413] https://qiita.com/tags/eventhubs -dz_~ Check! ESP-WROOM-02 から Azure Event Hubs にデータを送り、Power BI で可視化する --(1) ~ 構成編~ https://qiita.com/dz_/items/7093ec21802d1dc03464 --(2) ~ クラウド準備編~ https://qiita.com/dz_/items/a6fc28699e3b63c93c61 --(3) ~ データ送信編~ https://qiita.com/dz_/items/edf96e7f852b62600848 **GitHub [#cef117e9] ***confluent-kafka-dotnet [#af8ccc9e] -https://github.com/confluentinc/confluent-kafka-dotnet -https://github.com/mhowlett/confluent-kafka-dotnet/ ***Azure Event Hubs for Apache Kafka Ecosystems [#n286999e] https://github.com/Azure/azure-event-hubs-for-kafka -quickstart/dotnet~ https://github.com/Azure/azure-event-hubs-for-kafka/tree/master/quickstart/dotnet -tutorials/spark~ https://github.com/Azure/azure-event-hubs-for-kafka/tree/master/tutorials/spark **Microsoft Docs [#f99281c8] ***クイック スタート [#wa52cbf3] -XXXXを使用したイベント ハブの作成 --Azure portal~ https://docs.microsoft.com/ja-jp/azure/event-hubs/event-hubs-create --Azure CLI~ https://docs.microsoft.com/ja-jp/azure/event-hubs/event-hubs-quickstart-cli -イベントの送受信 --古い ---.NET Framework:~ https://docs.microsoft.com/ja-jp/azure/event-hubs/event-hubs-dotnet-framework-getstarted-send~ ---.NET Core:~ https://docs.microsoft.com/ja-jp/azure/event-hubs/event-hubs-dotnet-standard-get-started-send-legacy --新しい~ .NET Core:~ https://docs.microsoft.com/ja-jp/azure/event-hubs/event-hubs-dotnet-standard-getstarted-send~ -Kafka プロトコルを使用した Azure Event Hubs によるデータ ストリーミング~ https://docs.microsoft.com/ja-jp/azure/event-hubs/event-hubs-quickstart-kafka-enabled-event-hubs -Azure portal を使用した Event Hubs 専用クラスターの作成~ https://docs.microsoft.com/ja-jp/azure/event-hubs/event-hubs-dedicated-cluster-create-portal ***チュートリアル [#s9768ca7] -Event Hubs を使用してデータを Azure Databricks にストリーム配信する~ https://docs.microsoft.com/ja-jp/azure/databricks/scenarios/databricks-stream-from-eventhubs -Azure Synapse Analytics にイベント データを移行する~ https://docs.microsoft.com/ja-jp/azure/event-hubs/store-captured-data-data-warehouse -Stream Analytics を使用して...Apache Kafka イベントを処理する~ https://docs.microsoft.com/ja-jp/azure/event-hubs/event-hubs-kafka-stream-analytics ***操作方法ガイド [#u8673045] -開発 --接続文字列を取得する~ https://docs.microsoft.com/ja-jp/azure/event-hubs/event-hubs-get-connection-string -Kafkaエンドポイント --Apache Kafka アプリからイベント ハブを使用する~ https://docs.microsoft.com/ja-jp/azure/event-hubs/event-hubs-for-kafka-ecosystem-overview --Apache Kafkaとの統合 > Event Hubs 用 Kafka ---開発者ガイド~ https://docs.microsoft.com/ja-jp/azure/event-hubs/apache-kafka-developer-guide ---移行ガイド~ https://docs.microsoft.com/ja-jp/azure/event-hubs/apache-kafka-migration-guide --Apache Kafka 用 Azure Event Hubs に関する問題をトラブルシューティングする~ https://docs.microsoft.com/ja-jp/azure/event-hubs/apache-kafka-troubleshooting-guide --よく寄せられる質問 - Apache Kafka 用 Azure Event Hubs~ https://docs.microsoft.com/ja-jp/azure/event-hubs/apache-kafka-frequently-asked-questions **ナレコムAzureレシピ [#pc51e29f] https://azure-recipe.kc-cloud.jp/category/azure-event-hubs/ ***概要とパフォーマンス [#y282a117] -Azure Event Hubs の概要とパフォーマンスについて~ https://azure-recipe.kc-cloud.jp/2016/06/ebent-hubs/ ***触ってみた [#if38f391] -Azure Event Hubsを触ってみた --① 作成編~ https://azure-recipe.kc-cloud.jp/2015/09/eventhubs-1/ --② メッセージ送信編~ https://azure-recipe.kc-cloud.jp/2015/09/eventhubs-2/ --③ メッセージ送受信編~ https://azure-recipe.kc-cloud.jp/2015/09/eventhubs-3/ --③ メッセージ送受信編~ https://azure-recipe.kc-cloud.jp/2015/09/eventhubs-3/ --④ REST API送信編~ https://azure-recipe.kc-cloud.jp/2015/12/eventhubs-4/ **内部リンク [#d4f378da] ***[[Apache Kafka>Azure Event Hubs#mb379986]] [#v8bc4f84] ***[[Azure Databricks]] [#hd16e240] ***[[.NET for Apache Spark]] [#wf9a91c8] ---- Tags: [[:クラウド]], [[:ビッグデータ]], [[:Azure]]