Apache Kafka(AMQ Streams on OpenShift)で Apache Avro with Service Registry を使う#1

Kenta Kosugi
8 min readApr 21, 2021

--

Apicurio Registry

Red Hat Integration には Service Registry という Apache Kafka で利用可能なスキーマを管理する仕組みが備わっています。
https://access.redhat.com/documentation/en-us/red_hat_integration/2020-q4/html/getting_started_with_service_registry/

Service Registry は Apicurio Registry がアップストリームのプロジェクトです。Apicurio Registry の Web サイトにおいて「Schema Registry」のユースケースとして紹介されています。

メッセージングやイベントストリーミングの世界では、トピックやキューに公開されるデータは、しばしばスキーマ(Apache Avro、JSON スキーマ、Google プロトコルバッファなど)を使用してシリアライズまたは検証されなければなりません。スキーマは各アプリケーションでパッケージ化することができますが、代わりに外部システムに登録し、各アプリケーションから参照する方がより良いアーキテクチャパターンであることが多いです。これにより、以下のようなことが可能になります。

生産者と消費者からのスキーマのデカップリング
消費者をアップグレードせずに生産者をアップグレードする可能性
生産に使用されるすべてのスキーマを一元管理
各トピック/キューに必要なデータ形式を文書化する
データフォーマット(スキーマ)の進化を一元管理

Red Hat Integration Service Registry

Apicurio Registry をエンタープライズレディにしたものが Red Hat Integration Service Registry になります。

Service Registry では Kafka のプロデューサーとコンシューマーでのデータのシリアライズ / デシリアライズのためにスキーマを登録、管理することが可能となります。その際、利用可能なストレージはいくつかの選択肢から選択することができます。今回は Red Hat Integration 2020-Q4 バージョンを利用しますが、このバージョンで利用可能なストレージは以下3タイプになります。

  1. Kafka Streams based storage in AMQ Streams (General Available)
  2. JPA based storage in PostgreSQL (Tech Preview)
  3. Cache based storage in embedded Infinispan (Tech Preview)

今回は AMQ Streams を使ってみます(他は Tech Preview なので)。

Red Hat Integration Operator のインストール

Operator Hub から「Red Hat Integration Operator」をインストールします。

「Red Hat Integration」

「Install」を選択します。

「Install」を選択
「Install」を選択
「Installed Operators」から「Installation」を選択

Red Hat Integration の Operator 一覧が表示されます。 「>」ボタンを押下して展開してみると、デフォルトではすべての Operator がインストールされるような設定になっていることがわかります。

「Create」を選択

「Red Hat Integration」Operator の「Status」が「Succeeded」になるまで待ちます。

「Status」が「Succeeded」に

「status」が「Succeeded」になると「rhi-service-registry」という OpenShift のプロジェクトに「Red Hat Integration Service Registry」Operator がデプロイされています。

事前準備 AMQ Streams (Kafka Broker)のデプロイ

OpenShift で「my-project」というプロジェクトを作成してください。このプロジェクトに Kafka Broker をデプロイします。

作成できたら、「Project」を「my-project」に設定して「Installed Operators」 → 「Kafka」の順に選択します。「my-project」を使わない場合は「Service Registry」の設定で Kafka Bootstrap Server の設定する箇所で適宜読み替えてください。

遷移した画面で「Create Kafka」を選択します。

今回はとりあえず試すだけなので、そのまま「Create」を押しましょう。

デフォルト設定では Kafka Broker 3台、Zookeeper 3台が起動します。

Condition: Ready を確認

AMQ Streams Operator の画面から以下二つのトピックを作成しておきます。いずれも Service Registry から利用されるので、名前の打ち間違いや作成忘れにご注意ください。Service Registry の起動でエラーになります。

topic 作成へ遷移する画面
  1. storage-topic
  2. global-id-topic
2 つのトピックを生成しておく

Service Registry のデプロイ

OpenShift のプロジェクトを「rhi-service-registry」に変更します。「Installed Operators」から「ApicurioRegistry」を選択します。

Apicurio Registry を選択

遷移した画面で「Create ApicurioRegistry」を選択します。

以下の画面に遷移するのでラジオボタンの「YAML View」を選択します。

YAML エディターが開きますので、次のコードをコピー & ペーストしてください。

my-project を変更している人はここを置き換えてください

YAML で指定している bootstrapServers の項目は “クラスター名-kafka-bootstrap.プロジェクト名.svc:9092” になります。Kafka クラスター名を変更している場合は合わせて bootstrapServers を変更しておきましょう。

「Create」を押してデプロイしましょう。デプロイが完了すると、「example-apicurioregistry-deployment-xxxx-deploy」という Pod が起動し、しばらくすると「example-apicurioregistry-deployment-yyyy」という Pod が起動します。

Service Registry と Operator の Pod

Web Console 用の Route も作成されるので、アクセス可能か確認しておきます。

Service Registry アクセス用 URL

上記の URL にアクセスすると下記の画面が表示されます。

Service Registry の Web UI

今回はここまでになります。次回は Service Registry を使用して Kafka クライアント(コンシューマー & プロデューサー)を開発していきます。

--

--

Kenta Kosugi
Kenta Kosugi

Written by Kenta Kosugi

Javaアプリケーションサーバーの開発からCORBA製品のサポート、QA、証券外務員(第一種免許)、ストレージ屋、アーキテクト、SaaS屋と一貫性のない道を歩んでいます。Red Hatに復帰しました。

No responses yet