Gluesync 2.3 の新機能:Redis Streams ターゲットエージェント

Gluesync 2.3 では、新しい Redis Streams ターゲットエージェントが追加されました。すべてのスナップショット行および CDC 変更は、スタンドアロンまたはクラスタの Redis Stream に XADD コマンドで追加され、フラットフィールドまたは JSON 形式で出力されます。また、オプションで「before」イメージやストリームのトリミングも可能です。

Gluesync 2.3 では、新しい Redis Streams ターゲットエージェント が追加されました。ソースから渡されるすべてのスナップショット行および CDC 変更は、XADDを使用して、スタンドアロンまたはクラスタの Redis Stream に、フラットフィールドまたはエントリごとに 1 つの JSON ドキュメントとして追加され、オプションでストリームのトリミングを行うことができます。既存の Redis エージェントはそのまま残ります。このエージェントは、イベントストリーミング用に構築された独立したターゲットです。

Redis StreamsはGluesyncのターゲット機能です。サポートされているソースであればどれでも、Core Hub内のパイプラインを通じてデータを供給し、下流のコンシューマーは既に使用しているツールでストリームを読み取ることができます。ストリームは事前に存在している必要はありません。最初のXADDによって作成されます。

エージェントの動作

  • ・挿入、更新、削除ごとに1つのXADDエントリを追加し、切り捨てまたはスナップショット削除ごとに1つのマーカーエントリを追加します
  • ・Lettuceクライアントを介して、スタンドアロンのRedisまたはクラスタに接続します
  • ・エントリをフラットレイアウト(デフォルト)またはJSONレイアウトで書き込みます
  • ・更新および削除時に「before」イメージを含めることができます
  • ・MAXLENまたはMINIDを指定すると、ストリームをトリムします
  • ・Gluesyncの全16種類のデータ型に対応しています

ストリームを利用する理由

ストリームは、すべての変更を時系列順に記録します。各エントリには、何が起こったか(insert、update、delete、またはtruncate)、どのエンティティとキーに対して行われたか、そしていつ行われたかが記録されます。コンシューマーは、自身のペースで再実行、ファンアウト、または状態の再構築を行うことができ、エージェントは常に末尾に追加するだけです。古いエントリがストリームから削除されるのは、XADD自体に指定されたオプションのMAXLENまたはMINID句を通じてのみです。

OperationWhat is appended
Insertop insert, the row columns
Updateop update, the row columns, plus the old values when Include before image is on
Deleteop delete, the key columns, plus the row the source sent when Include before image is on
Truncateone marker, op truncate, when Emit truncate marker events is on (default)
Snapshot deletionthe same marker with snapshot true

スナップショット行は、ソースから受け取った操作を保持し、snapshotをtrueに設定します。RedisがエントリIDを割り当てます。

フラット形式またはJSON形式のエントリ

フラット形式(デフォルト): メタデータフィールドが先頭に配置され、各フィールドにはデフォルトでプレフィックス_が付与されます。その後、行ごとに1つのフィールドが配置されます:

  • _op、_snapshot、_entity、_ts_msがすべてのエントリに含まれます
  • _key(ドキュメントID)および_keys(キー列のJSONオブジェクト)が行エントリに含まれます
  • _source_ts_msおよび_transactionが、ソースから提供されている場合に含まれます
  • _beforeが、前のイメージが存在する場合に含まれます
  • _nullsには、NULLだった列のJSON配列、または必要に応じてNULL列ごとのセンチネル値が含まれます
XADD customers * \
  _op insert \
  _snapshot false \
  _entity customers \
  _key customers::7 \
  _keys {"id":7} \
  _ts_ms 1700000000000 \
  id 7 \
  full_name Ada \
  _nulls ["age"]

JSONのレイアウト: 1つのフィールドpayload(デフォルト)で、op、snapshot、entity、key、ts_ms、source_ts_ms、transaction、keys、after、およびbeforeを含む1つのJSONドキュメントを保持します。NULL値はJSONのNULLとして扱われ、数値は数値のまま保持され、BIG_DECIMALはJSON文字列として扱われるため、桁が失われることはありません。

ストリームキー

各エンティティのストリームは、優先順位の高い順に以下の通りです:

  1. エンティティの ストリームキーのオーバーライド(そのまま使用)
  2. {prefix}、{scope}、{collection}、および{entity}
  3. それ以外の場合は<streamKeyPrefix>:<scope>:<collection>となり、空白部分は省略されます

プレフィックスもスコープもない場合、ストリームキーはコレクション名となります。エンティティ内では、Key namespaceがオプションのスコープであり、Streamがコレクションとなります。

配信とスループット

  • 書き込みは、1つの接続上でXADDコマンドをパイプライン処理します。パイプラインのバッチサイズは、デフォルトで1往復あたり1000ですが、エンティティごとに上書き可能です。
  • 1 つのストリームキーは 1 つのノードが所有しているため、バッチは順番に送信され、クラスタモードでも次々と待機されます。
  • 配信は「少なくとも 1 回」行われます。コマンドのタイムアウトや接続エラーは、その場で再試行されます。障害発生前に Redis が部分的に受け入れたバッチは、再試行時に再度追加されます。
  • コマンドのタイムアウトは、デフォルトで 60 秒です。

トリミング

トリミング戦略は、デフォルトでNONEです。MAXLENは、ストリームごとに最新のN件のエントリを保持します。MINIDは、指定された保持期間(秒単位)より新しいエントリを保持します。近似トリミング(~)は、デフォルトで有効になっています。

データ型

このエージェントは、Gluesyncの全16種類のデータ型を受け入れます。フラットレイアウトでは、すべての値がテキストとして扱われます。数値とブール値は10進数またはtrue/false、日付と時刻はISO-8601形式、BIG_DECIMALはプレーンな10進数テキスト、バイナリは小文字の16進数(またはバイナリエンコーディングを適用したBase64)、配列とマップはJSONテキストとして扱われます。JSONレイアウトでは、ブール値と有限の数値はJSONのブール値および数値のままとなり、配列とマップはJSONの配列およびオブジェクトとなります。

接続の設定

前提条件:ストリームキーに対してXADDを受け付けるRedisサーバー、ホスト(およびすべてのクラスターシード)へのネットワーク接続性、ならびにXADD、PING、およびINFO serverを実行する権限。

コントロールプレーンで、パイプラインのターゲットとしてRedis Streamsを追加します:

  • ホスト名 / IP アドレス、ポート 6379(デフォルト)
  • ユーザー名(Redis ACL ユーザーの場合)、またはパスワードのみの認証の場合は空白、および パスワード
  • データベースインデックス、0(スタンドアロン接続の場合のデフォルト)
  • クラスタモードで接続する追加のホスト
  • TLS を有効にする。JVM の信頼ストア、証明書パス、またはエージェント用にアップロードされた証明書を使用します

適用場面

一方には運用データベース、もう一方にはイベント駆動型サービス。PostgreSQL、Oracle、SQL Server、MySQL、MongoDB、およびGluesyncのカタログに掲載されているその他のデータベースは、コミットされたすべての変更をRedis Streamのエントリに変換し、マイクロサービス、キャッシュ、ワーカーがそれらを順番に消費します。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。