2

明確にするために言うと、イベント ソーシングのデータ ストアとして Kafka を使用しようとしているのではなく、単にイベントをレプリケートするためです。

KafkaのConfluent Schema Registryは、プロデューサーからトピックに送信されたメッセージのスキーマを検証できるという点で非常に興味深いようです。ただし、私が理解していることから、各トピックをコンテナー ファイルのように扱います (トピックごとに 1 つのスキーマ)。

この制限は、File複数のメッセージ スキーマを持つイベントソース ストリームでは機能しません。これらを個別のトピックに入れると、複雑になり、エラーが発生しやすくなります。FileCreatedFileMovedFileCopiedFileDeleted

同じトピックに対して複数のスキーマをサポートする Schema Registry のようなツールはありますか?

アップデート

明確にするために、上記の各メッセージには異なるスキーマがあります。例えば:

FileCreated:

{
  type: "record",
  name: "FileCreated",
  fields: [
    { name: "id", type: "string" },
    { name: "name", type: "string" },
    { name: "path", type: "string" },
    { name: "size", type: "string" },
    { name: "mimeType", type": "string" },
    { name: "user", type: "string" },
    { name: "date", type: "long" }
  ]
}

FileMoved:

{
  type: "record",
  name: "FileMoved",
  fields: [
    { name: "id", type: "string" },
    { name: "from", type: "string" },
    { name: "to", type: "string" },
    { name: "date", type: "long" },
    { naem: "user", type: "string" }
  ]
}

FileDeleted:

{ 
  type: "record",
  name: "FileDeleted",
  fields: [
    { name: "id", type: "string" },
    { name: "date", type: "long" },
    { name: "user", type: "string" }
  ]
}
4

1 に答える 1

3

実際、 Confluent Schema Registryは、同じトピックに対して複数のスキーマをサポートしています。

とはいえ、ベスト プラクティスは、異なる種類のデータに同じトピックを使用しないことです。たとえば、通常、ページ ビュー イベントとユーザー プロファイルの更新を同じトピックに書き込むべきではありません。

同じトピックに複数のスキーマを使用する一般的な例は、スキーマの進化を可能にすることです。たとえば、ユーザー プロファイルの基本的なスキーマ (たとえば、ユーザー名と年齢のみ) から開始し、その後、ユーザーのより本格的なスキーマに拡張します。プロファイル (ユーザー名、年齢、地域、優先言語、最終訪問日など)。

FileCreatedFileMoved、を同じトピックに格納するかどうかはFileCopied、あなた次第です。FileDeletedいずれの場合も、Confluent Schema Registry を使用すると、対応するスキーマを管理できます ( docs を参照)。

より具体的なドキュメント ポインタ:

  • 新しいスキーマを登録します。同じ件名で新しい/複数のスキーマを登録するには、対応する API 呼び出しを介してそれらを登録する必要があります。Avro 互換性設定によっては、新しいスキーマの登録 (つまり、最初のスキーマが既にサブジェクトに登録されている場合) が失敗する可能性があることに注意してください。次のポイントを参照してください。
  • スキーマの Avro 互換性設定の定義(グローバル、または同じ主題/トピックに登録されているスキーマ)。たとえばGET /config/(string: subject)、サブジェクトの (Avro スキーマ) 互換性レベルを返す を参照してください。

引用:

スキーマは、構成された互換性レベルに従って、以前に登録されたスキーマ (存在する場合) と互換性がある必要があります。構成された互換性レベルは、GET /config/(string: subject). それが null を返す場合、GET /config.

また、有効な (Avro スキーマ) 互換性設定は次のとおりNONE, FULL, FORWARD, BACKWARDです。したがって、たとえばまったく異なるデータ型を同じ Kafka トピックに本当に格納したい場合は、(a) 対応するサブジェクト/トピックの Avro スキーマ互換性を設定しNONE、(b) 関連する Avro スキーマを登録する必要があります。その主題/トピックの下の各データ型。

于 2016-07-01T09:05:54.740 に答える