Fusic Tech Blog

Fusion of Society, IT and Culture

Azure Event HubsをApache Kafkaのブローカーとして利用したメッセージの送受信
2020/12/25

Azure Event HubsをApache Kafkaのブローカーとして利用したメッセージの送受信

この記事はFusic Advent Calenderの25日目の記事です。メリークリスマスです。

はじめに

Azure Event Hubsとは

Azure Event Hubs は、ビッグデータのストリーミングプラットフォームとなるイベントインジェストサービスです。

Apache Kafka(Kafka)とは

Apache Kafka(以降、Kafka)はスケーラビリティに優れた分散メッセージキューです。

本記事の目的

今回はAzure Event HubsをKafkaのBrokerとしてメッセージのやりとりを試します。 「1. Azure Event HubsをKafkaのBrokerにする手順(簡単)」と「2. 認証関係」をまとめたいと思います。

具体的な手順

手順 タスク
1 Kafka Brokerの準備 (Azure Event Hubs)
2 Kafka の準備
3 Azure CLI の準備
4 Kafka CLI の準備
5 Azure Event Hubsのリソース情報の確認
6 共有アクセスポリシーの取得
7 接続文字列の取得
8 jaas.conf のパス指定
9 jaas.conf の設定(接続文字列の書き込み)
10 Producer 接続
11 Consumer 接続
12 メッセージの送信

1. Kafka Brokerの準備 (Azure Event Hubs)

通常のEvent Hubsの作成と特に何も変わりません。 価格レベルをStandardレベルにすると、Kafkaエンドポイントが自動的に有効になります。

参考記事 チュートリアル:Stream Analytics を使用して Event Hubs イベントの Apache Kafka を処理する

2. Kafka の準備

Homebrew を利用してインストール

$ brew install kafka

バージョン確認

$ kafka-topics --version
2.5.0 (Commit:66563e712b0b9f84)

参考記事 今更ながらKafkaを触ってみた

3. Azure CLI の準備

Homebrew を利用してインストール

$ brew update && brew install azure-cli

バージョン確認

$ az --version
azure-cli                         2.14.0 *

参考記事 Install Azure CLI on macOS

4. Kafka CLI の準備

Azure/azure-event-hubs-for-kafkaをcloneする

$ git clone https://github.com/Azure/azure-event-hubs-for-kafka.git
$ cd azure-event-hubs-for-kafka/quickstart/kafka-cli

参考記事 Use the Kafka CLI to Send and Receive Messages to/from Azure Event Hubs for Apache Kafka Ecosystem

5. Azure Event Hubsのリソース情報の確認

作業の前に、リソースグループとネームスペースを確認する。

6. 共有アクセスポリシーの取得

Azure CLIでサインイン

$ az login

この後、ブラウザの認証画面に画面遷移します。

共有アクセスポリシーの取得

$ az eventhubs namespace authorization-rule list --resource-group {リソースグループ} --namespace-name {ネームスペース}

結果

name が共有アクセスポリシー名になります。

[
  {
    "id": "**********************************",
    "location": "Japan East",
    "name": "**********************************",
    "resourceGroup": "**********************************",
    "rights": [
      "Listen",
      "Manage",
      "Send"
    ],
    "type": "Microsoft.EventHub/Namespaces/AuthorizationRules"
  }
]

7. 接続文字列の取得

接続文字列の取得

$ az eventhubs namespace authorization-rule keys list --resource-group {リソースグループ} --namespace-name {ネームスペース} --name {共有アクセスポリシー名}

結果

primaryConnectionString が接続文字列情報

{
  "aliasPrimaryConnectionString": null,
  "aliasSecondaryConnectionString": null,
  "keyName": "***************************",
  "primaryConnectionString": "***************************",
  "primaryKey": "***************************",
  "secondaryConnectionString": "***************************",
  "secondaryKey": "***************************"
}

8. jaas.confのパス指定

Apache Kafukaの認証用ファイルのパスを指定する。

# ローカルのjaas.confのパスを設定してください。
$ export KAFKA_OPTS="-Djava.security.auth.login.config=***/azure-event-hubs-for-kafka/quickstart/kafka-cli/jaas.conf"

9. jaas.confの設定(接続文字列の書き込み)

接続文字列情報(primaryConnectionString)をjaas.confに書き込む。

# passwordの先に接続文字列情報を記載する
KafkaClient { 
    org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="****";
};

10. Producer 接続

Producer起動してメッセージを送信

せっかくなので、クリスマスっぽいメッセージを。

$ kafka-console-producer --topic {トピック名} --broker-list {ネームスペース}.servicebus.windows.net:9093 --producer.config client_common.properties
>雨は夜更け過ぎに〜雪へと変わるだろう〜
>Silent night〜Holy night〜
>きっと君は来ない〜ひとりきりのクリスマス・イブ
>Silent night〜Holy night〜

11. Consumer 接続

$ kafka-console-consumer --topic {トピック名} --bootstrap-server {ネームスペース}.servicebus.windows.net:9093 --consumer.config client_common.properties

雨は夜更け過ぎに〜雪へと変わるだろう〜
Silent night〜Holy night〜
きっと君は来ない〜ひとりきりのクリスマス・イブ
Silent night〜Holy night〜

12. メッセージの送信

Event Hubsのメトリクスを確認する。

送信確認ができました。

Kafka Brokerの準備が非常に楽でしたね。

最後までありがとうござました。良いクリスマスをです。

Junkins

Junkins

JenkinsじゃないよJunkinsです。紛らわしくてすいません。 元々PHPerでしたが、最近Rubyistになりました。