Top View


Author Junkins

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

2020/12/25

Table of Contents

はじめに

Azure Event Hubsとは

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

Apache Kafka(Kafka)とは

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

本記事の目的

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

具体的な手順

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

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

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

2. Kafka の準備

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

$ brew install kafka

バージョン確認

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

3. Azure CLI の準備

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

$ brew update && brew install azure-cli

バージョン確認

$ az --version
azure-cli                         2.14.0 *

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

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になりました。