Schema Registry のチュートリアル

Looking for Schema Management Confluent Cloud docs? You are currently viewing Confluent Platform documentation. If you are looking for Confluent Cloud docs, check out Schema Management on Confluent Cloud.

概要

これらのチュートリアルでは、オンプレミスおよび Confluent Cloud で Confluent Schema Registry を使用するためのステップバイステップのワークフローを紹介しています。Avro データの読み取りと書き込み、進化するスキーマの互換性チェックができるようにクライアントアプリケーションを設定する方法について見ていきましょう。

Schema Registry の利点

Apache Kafka® プロデューサーは Kafka のトピックにデータを書き込み、Kafka コンシューマーは Kafka のトピックからデータを読み取ります。そこには、コンシューマーが読み取ることのできるスキーマを使ってプロデューサーはデータを書き込むこと、そしてプロデューサーとコンシューマーのスキーマが進化したとしてもその状態が保たれる、という暗黙の "契約" があります。Schema Registry は互換性チェックを使用して、この契約が確実に満たされるようにする役割を担います。

スキーマは API のようなものと考えるとわかりやすいでしょう。アプリケーションは API に依存し、API に加えられるどのような変更も互換性が確保され、その後の動作に支障がないことを想定しています。同様に、ストリーミングアプリケーションはスキーマに依存し、スキーマに加えられるどのような変更も互換性が確保され、その後の動作に支障がないことを想定しています。プロデューサーとコンシューマーとの間で契約違反が生じないよう、スキーマの進化には互換性チェックが欠かせません。その役割を担うもの、つまり一元化されたスキーマ管理と、進化するスキーマの互換性チェックの機能を提供するのが、Schema Registry なのです。

対象読者

対象読者は、Kafka のストリーミングアプリケーションを作成する開発者です。Avro データと Schema Registry を活用して堅牢なアプリケーションの構築を目指す方を対象としています。このチュートリアルの原則は、Schema Registry とやり取りするあらゆる Kafka クライアントに当てはまります。

用語の復習

まず、いくつかの用語についておさらいしておきましょう。トピックスキーマサブジェクト について説明します。

Kafka の "トピック" はメッセージを格納します。また、それぞれのメッセージはキー/値ペアになっており、そのキーと値のどちらかまたは両方を Avro、JSON、Protobuf のいずれかにシリアル化することができます。データフォーマットの構造は、"スキーマ" によって定義されます。Kafka のトピックとスキーマには別々の名前を使用できます。Schema Registry は、スキーマが進化できる範囲を定義しますが、その範囲にあたるのが "サブジェクト" です。サブジェクトの名前は、構成されている サブジェクト命名方法 によって決まり、デフォルトではトピック名からサブジェクト名を得る設定になっています。

Confluent Platform 5.5.0 以降では、トピックごとにサブジェクト命名方法を変更することができます。詳細については、「トピックのサブジェクト命名方法を変更する」を参照してください。

実践的な例として、ある小売業者が transactions という Kafka のトピックで取引をストリーミングしているとします。プロデューサーは、Payment というスキーマを使って、Kafka のトピック transactions にデータを書き込みます。プロデューサーがメッセージの値を Avro としてシリアル化している場合、Schema Registry には、transactions-value というサブジェクトが存在します。プロデューサーがメッセージのキーも Avro としてシリアル化していれば、Schema Registry には、transactions-key というサブジェクトが存在することになるでしょう。ただし単純化するため、このチュートリアルではメッセージの値にのみ注目します。Schema Registry のサブジェクト transactions-value には、Payment という、少なくとも 1 つのスキーマが存在します。サブジェクト transactions-value は、そのスキーマが進化できる範囲を定義し、その範囲内で Schema Registry が互換性チェックを行います。このシナリオで開発者が Payment スキーマを進化させて、transactions トピックに新しいメッセージを生成した場合、Schema Registry は、それらの進化した新しいスキーマに、transactions-value サブジェクトに登録されている以前のスキーマとの互換性があるかどうかをチェックしたうえで、それらの新しいスキーマをそのサブジェクトに登録します。

デプロイの選択

Schema Registry のチュートリアルは 2 つあります。次のどちらかを選択してください。

  1. オンプレミス Schema Registry のチュートリアル: Kafka のオンプレミスデプロイとセルフマネージド型の Confluent Schema Registry 向け
  2. Confluent Cloud Schema Registry のチュートリアル: Confluent Cloud デプロイとフルマネージド型の Confluent Cloud Schema Registry 向け

参考

この構成の動作例については、Confluent Platform デモ を参照してください。構成リファレンスについては、デモの docker-compose.yml ファイル を参照してください。