「[[マイクロソフト系技術情報 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]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS