
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句を通じてのみです。
| Operation | What is appended |
|---|---|
| Insert | op insert, the row columns |
| Update | op update, the row columns, plus the old values when Include before image is on |
| Delete | op delete, the key columns, plus the row the source sent when Include before image is on |
| Truncate | one marker, op truncate, when Emit truncate marker events is on (default) |
| Snapshot deletion | the 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文字列として扱われるため、桁が失われることはありません。
ストリームキー
各エンティティのストリームは、優先順位の高い順に以下の通りです:
- エンティティの ストリームキーのオーバーライド(そのまま使用)
{prefix}、{scope}、{collection}、および{entity}- それ以外の場合は
<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のエントリに変換し、マイクロサービス、キャッシュ、ワーカーがそれらを順番に消費します。

RSSフィードを取得する