11.3. CloudEvents フォーマットでの Debezium 変更イベントレコードの出力

CloudEvents は、共通の方法でイベントデータを記述するための仕様です。その目的は、サービス、プラットフォーム、およびシステム間の相互運用性を提供することです。Debezium では、MongoDB、MySQL、PostgreSQL、または SQL Server コネクターを設定して、CloudEvents 仕様に準拠した変更イベントレコードを出力することができます。

重要

CloudEvents フォーマットでの変更イベントレコードの出力は、テクノロジープレビュー機能です。テクノロジープレビューの機能は、Red Hat の実稼働環境のサービスレベルアグリーメント (SLA) ではサポートされず、機能的に完全ではないことがあるため、Red Hat はテクノロジープレビュー機能を実稼働環境に実装することは推奨しません。テクノロジープレビューの機能は、最新の技術をいち早く提供して、開発段階で機能のテストやフィードバックの収集を可能にするために提供されます。サポート範囲の詳細は、「テクノロジプレビュー機能のサポート範囲」を参照してください。

CloudEvents 仕様は、以下の項目を定義します。

  • 標準化されたイベント属性のセット
  • カスタム属性を定義するためのルール
  • イベントフォーマットを JSON や Avro 等のシリアライズした表現にマッピングするためのエンコード規則
  • Apache Kafka、HTTP、または AMQP 等のトランスポート層のプロトコルバインディング

CloudEvents 仕様に準拠する変更イベントレコードを出力するように Debezium コネクターを設定するために、Debezium は Kafka Connect メッセージコンバーターである io.debezium.converters.CloudEventsConverter を提供します。

現時点では、構造化マッピングモードだけがサポートされています。CloudEvents 変更イベントエンベロープは JSON または Avro にすることができ、それぞれのエンベロープタイプは データ形式 として JSON または Avro をサポートします。今後の Debezium リリースでは、バイナリーマッピングモードがサポートされる計画です。

CloudEvents フォーマットでの変更イベントの出力に関する情報は、以下のように整理されます。

Avro 使用の詳細については、以下を参照してください。

11.3.1. CloudEvents フォーマットでの Debezium 変更イベントレコードの例

以下の例は、PostgreSQL コネクターから出力される CloudEvents 変更イベントレコードを示しています。この例では、PostgreSQL コネクターは CloudEvents フォーマットエンベロープ およびデータ 形式として JSON を使用するように設定されています。

{
  "id" : "name:test_server;lsn:29274832;txId:565",   1
  "source" : "/debezium/postgresql/test_server",     2
  "specversion" : "1.0",                             3
  "type" : "io.debezium.postgresql.datachangeevent", 4
  "time" : "2020-01-13T13:55:39.738Z",               5
  "datacontenttype" : "application/json",            6
  "iodebeziumop" : "r",                              7
  "iodebeziumversion" : "1.5.4.Final",        8
  "iodebeziumconnector" : "postgresql",
  "iodebeziumname" : "test_server",
  "iodebeziumtsms" : "1578923739738",
  "iodebeziumsnapshot" : "true",
  "iodebeziumdb" : "postgres",
  "iodebeziumschema" : "s1",
  "iodebeziumtable" : "a",
  "iodebeziumtxId" : "565",
  "iodebeziumlsn" : "29274832",
  "iodebeziumxmin" : null,
  "iodebeziumtxid": "565",                           9
  "iodebeziumtxtotalorder": "1",
  "iodebeziumtxdatacollectionorder": "1",
  "data" : {                                         10
    "before" : null,
    "after" : {
      "pk" : 1,
      "name" : "Bob"
    }
  }
}
1 1 1
変更イベントの内容に基づいてコネクターが変更イベントに生成する一意の ID。
2 2 2
イベントのソース。コネクター設定の database. server.name プロパティーで指定されたデータベースの論理名です。
3 3 3
CloudEvents 仕様のバージョン。
4 4 4
変更イベントを生成したコネクタータイプ。このフィールドの形式は io.debezium.CONNECTOR_TYPE.datachangeevent です。CONNECTOR_TYPE の値は mongodb、mysqlpostgresql または sqlserver です。
5 5
ソースデータベースの変更時刻。
6
データ 属性のコンテンツタイプ(この例では JSON)を記述します。それ以外には Avro のみ有効です。
7
操作の ID。許容値は、read、c (create )、update の u、または delete の d です。
8
Debezium 変更イベントから認識される すべてのソース 属性は、属性名に iodebezium 接頭辞 を使用して CloudEvents エクステンション属性にマッピングされます。
9
コネクターで有効にすると、Debezium 変更イベントから認識される 各トランザクション 属性は、属性名に iodebeziumtx 接頭辞を使用して CloudEvents エクステンション属性にマッピングされます。
10
実際のデータ変更。操作およびコネクターによっては、データに以前 または パッチ フィールドが含まれることがあります。

以下の例も、PostgreSQL コネクターから出力される CloudEvents 変更イベントレコードを示しています。この例では、PostgreSQL コネクターは CloudEvents フォーマットエンベロープとして JSON を使用するように設定されていますが、今回はコネクターは データ形式に Avro を使用するように設定されています。

{
  "id" : "name:test_server;lsn:33227720;txId:578",
  "source" : "/debezium/postgresql/test_server",
  "specversion" : "1.0",
  "type" : "io.debezium.postgresql.datachangeevent",
  "time" : "2020-01-13T14:04:18.597Z",
  "datacontenttype" : "application/avro",            1
  "dataschema" : "http://my-registry/schemas/ids/1", 2
  "iodebeziumop" : "r",
  "iodebeziumversion" : "1.5.4.Final",
  "iodebeziumconnector" : "postgresql",
  "iodebeziumname" : "test_server",
  "iodebeziumtsms" : "1578924258597",
  "iodebeziumsnapshot" : "true",
  "iodebeziumdb" : "postgres",
  "iodebeziumschema" : "s1",
  "iodebeziumtable" : "a",
  "iodebeziumtxId" : "578",
  "iodebeziumlsn" : "33227720",
  "iodebeziumxmin" : null,
  "iodebeziumtxid": "578",
  "iodebeziumtxtotalorder": "1",
  "iodebeziumtxdatacollectionorder": "1",
  "data" : "AAAAAAEAAgICAg=="                        3
}
1
data 属性に Avro バイナリーデータが含まれていることを示します。
2
Avro データが準拠するスキーマの URI。
3
data 属性には、base64 でエンコードされた Avro バイナリーデータが含まれます。

また、envelope および data 属性に Avro を使用することもできます。