Redis Streams Agent for Gluesync: Target Integration

Redis logo

Core principles

This agent is a target only. Its agent name is Redis Streams, its agent tag is redis-streams, and its type is event streaming (RedisStreamsTargetAgentService). It is registered only as a target bootstrapper (PluginEntrypoint).

Every snapshot row and every CDC change the source hands over is appended with XADD. The agent never removes an entry from a stream. Insert, update and delete each become one stream entry; truncate and the pre-snapshot deletion become one marker entry, or nothing when marker events are turned off. See Target Redis Streams for the stream key, the entry fields and the connection settings.

The client is Lettuce, on one connection. Standalone when additionalHosts is empty; cluster when it is not. Writes are pipelined XADD commands on that connection (RedisStreamsWriter).

The target entity type this agent implements is NoSqlEntity (RedisStreamsNodeInformationDao.implementedEntityTypes). Scope is the optional key namespace (schema, display name Key namespace (optional)) and the collection is the stream (table, display name Stream). There is no catalog to browse and no DDL: a stream is created by the first XADD (RedisStreamsInformationSchemaDao, RedisStreamsSchemaDao). Column discovery returns no columns; the columns are whatever the source sends (RedisStreamsTargetAgentService.onGetColumnsForTables).

Change data capture

This agent does not read incremental changes from Redis Streams. It does not create a consumer group, and it does not call XREAD, XGROUP or XACK.

Platform supported features

Feature Support Notes

Target role

✅

Appends one XADD per row, and one marker XADD for truncate / snapshot deletion, through Lettuce.

Source role

❌

PluginEntrypoint implements only TargetAgentPluginBootstrapper. agentType is TARGET.

Snapshots

❌

Does not snapshot Redis. Source snapshot rows are still appended, with snapshot set to true.

CDC

❌

Does not read a Redis stream. Source CDC changes are appended.

CDC type

N/A

Target-only connector.

Bulk load

❌

allowedBulkMode is NONE. Throughput comes from pipelined XADD (pipelineBatchSize, default 1000), not from a bulk API.

Database pooling

❌

useConnectionPool is not used (the property throws). One Lettuce connection is opened.

Source persisted internal cache

N/A

Target-only connector.

Target persisted internal cache

N/A

Entries are written straight to Redis. A failed batch can leave entries already appended (rejectedBatchLeavesNothingWritten is false).

Driver / connector

Lettuce

Standalone or cluster. Commands issued by this agent are XADD, PING and INFO server.

Chains

N/A

Target-only connector.

Truncate operation support (reading)

N/A

Target-only connector.

Truncate operation support (writing)

✅

Appends one truncate marker (emitMarkerEvents, default true). Does not delete stream entries. When the flag is false, logs a warning and writes nothing.

Security

Authentication is skipped when disableAuth is true. Otherwise a non-blank username is sent as a Redis ACL user together with password (withAuthentication); a blank username with a non-empty password uses password authentication (withPassword).

TLS is off unless enableTls is true. With TLS, trustServerCertificate true sets peer verification to NONE; false sets it to FULL and, when a certificate path or an uploaded store is present, loads that store with certificatePassword. With no store, the JVM default trust store is used (RedisStreamsProprietaryDatabaseManager).

Supported version

The agent is tested from Redis 7.4, Community Edition and Enterprise Edition. It does not enforce a minimum version at runtime: after connect it reads the redis_version line from INFO server (RedisStreamsProprietaryDatabaseManager.getDatabaseVersion) and reports it. There is no SQL version statement.

XADD requires a server that implements streams. MINID trimming and ACL usernames are sent only when those settings are used; the agent does not probe for them.