{
  "schema_version": 2,
  "id": "integrate/redis-data-integration/reference/config-yaml-reference",
  "title": "Redis Data Integration configuration file",
  "url": "https://redis.io/docs/latest/integrate/redis-data-integration/1.19.1/reference/config-yaml-reference/",
  "summary": "Redis Data Integration configuration file reference",
  "content": "\nConfiguration file for Redis Data Integration (RDI) source collectors and target connections.\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|[**sources**](#sources)\u003cbr/\u003e(Source collectors)|`object`|Source collectors that capture changes from upstream databases. Each key is a unique source identifier; the value configures one collector.\u003cbr/\u003e||\n|[**targets**](#targets)\u003cbr/\u003e(Target connections)|`object`|Target Redis databases where processed records are written. Each key is a target identifier; the value configures the connection.\u003cbr/\u003e||\n|[**processors**](#processors)\u003cbr/\u003e(Data processing configuration)|`object`, `null`|Settings that control how data is processed, including batch sizes, error handling, and performance tuning.\u003cbr/\u003e||\n|[**secret\\-providers**](#secret-providers)\u003cbr/\u003e(Secret providers)|`object`|External secret providers used to resolve `${...}` references in the configuration.\u003cbr/\u003e||\n|[**metadata**](#metadata)\u003cbr/\u003e(Pipeline metadata)|`object`|Optional metadata describing this pipeline, such as a display name and description.\u003cbr/\u003e||\n\n**Additional Properties:** not allowed  \n\u003ca name=\"sources\"\u003e\u003c/a\u003e\n## sources: Source collectors\n\nSource collectors that capture changes from upstream databases. Each key is a unique source identifier; the value configures one collector.\n\n\n**Properties** (key: `.*`)\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|[**connection**](#sourcesconnection)\u003cbr/\u003e(Source database connection)|`object`|Connection configuration for a non-Redis source database. The exact set of properties depends on the database type.\u003cbr/\u003e|yes|\n|**name**\u003cbr/\u003e(Source name)|`string`|Human-readable name for the source collector. Maximum 100 characters.\u003cbr/\u003eMaximal Length: `100`\u003cbr/\u003e|no|\n|**type**\u003cbr/\u003e(Collector type)|`string`|Type of the source collector. Use `cdc` (default) for change data capture using [Debezium](https://debezium.io/). Use `flink` for Spanner change streams using the Apache Flink-based collector. Use `riotx` for Snowflake CDC using [RIOT-X](https://redis.github.io/riotx/).\u003cbr/\u003eDefault: `\"cdc\"`\u003cbr/\u003eEnum: `\"cdc\"`, `\"flink\"`, `\"riotx\"`\u003cbr/\u003e|yes|\n|**active**\u003cbr/\u003e(Collector enabled)|`boolean`|When `true`, the collector runs; when `false`, the collector is disabled and produces no events.\u003cbr/\u003eDefault: `true`\u003cbr/\u003e|no|\n|[**logging**](#sourceslogging)\u003cbr/\u003e(Logging configuration)|`object`|Logging settings for this source collector.\u003cbr/\u003e|no|\n|[**tables**](#sourcestables)\u003cbr/\u003e(Tables to capture)|`object`|Tables to capture from the source database, keyed by table name. The value configures column selection and key handling for that table.\u003cbr/\u003e|no|\n|[**schemas**](#sourcesschemas)\u003cbr/\u003e(Schema names)|`string[]`|Schema names to capture from the source database. Maps to the underlying connector's `schema.include.list`.\u003cbr/\u003e|no|\n|[**databases**](#sourcesdatabases)\u003cbr/\u003e(Database names)|`string[]`|Database names to capture from the source database. Maps to the underlying connector's `database.include.list`. Applies only to MySQL, MariaDB, and MongoDB connections.\u003cbr/\u003e|no|\n|[**advanced**](#sourcesadvanced)\u003cbr/\u003e(Advanced configuration)|`object`|Advanced configuration that overrides the underlying engine's defaults. Only required for non-standard tuning.\u003cbr/\u003e|no|\n\n\n\u003ca name=\"sourcesconnection\"\u003e\u003c/a\u003e\n### sources\\.connection: Source database connection\n\nConnection configuration for a non-Redis source database. The exact set of properties depends on the database type.\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|[**SQL database**](#sourcesconnectionsqldatabase)\u003cbr/\u003e(SQL database)|`object`|Connection configuration for a supported SQL database.\u003cbr/\u003e||\n|[**MongoDB**](#sourcesconnectionmongodb)|`object`|Connection configuration for a MongoDB database.\u003cbr/\u003e|yes|\n|[**Spanner**](#sourcesconnectionspanner)|`object`|Connection configuration for a Google Cloud Spanner database.\u003cbr/\u003e|yes|\n|[**Snowflake**](#sourcesconnectionsnowflake)|`object`|Connection configuration for a Snowflake database.\u003cbr/\u003e|yes|\n\n**Example**\n\n```yaml\nSQL database:\n  hr:\n    type: postgresql\n    host: localhost\n    port: 5432\n    database: postgres\n    user: postgres\n    password: postgres\nMongoDB:\n  mongodb-source:\n    type: mongodb\n    connection_string: mongodb://localhost:27017/?replicaSet=rs0\n    user: debezium\n    password: dbz\n    database: db1,db2\nSpanner:\n  spanner-source:\n    type: spanner\n    project_id: example-12345\n    instance_id: example\n    database_id: example\n    change_streams:\n      change_stream_all:\n        retention_period_hours: 24\nSnowflake:\n  snowflake:\n    type: snowflake\n    url: jdbc:snowflake://myaccount.snowflakecomputing.com/\n    user: myuser\n    password: mypassword\n    database: MYDB\n    warehouse: COMPUTE_WH\n\n```\n\n\u003ca name=\"sourcesconnectionsqldatabase\"\u003e\u003c/a\u003e\n#### sources\\.connection\\.SQL database: SQL database\n\nConnection configuration for a supported SQL database.\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**type**\u003cbr/\u003e(Database type)|`string`|SQL database engine.\u003cbr/\u003eEnum: `\"mariadb\"`, `\"mysql\"`, `\"oracle\"`, `\"postgresql\"`, `\"sqlserver\"`\u003cbr/\u003e||\n|**host**\u003cbr/\u003e(Database host)|`string`|Hostname or IP address of the SQL database server.\u003cbr/\u003e||\n|**port**\u003cbr/\u003e(Database port)|`integer`|Network port on which the SQL database server is listening.\u003cbr/\u003eMinimum: `1`\u003cbr/\u003eMaximum: `65535`\u003cbr/\u003e||\n|**database**\u003cbr/\u003e(Database name)|`string`|Name of the database to connect to.\u003cbr/\u003e||\n|**user**\u003cbr/\u003e(Database user)|`string`|Username for authentication to the SQL database.\u003cbr/\u003e||\n|**password**\u003cbr/\u003e(Database password)|`string`|Password for authentication to the SQL database.\u003cbr/\u003e||\n\n**Additional Properties:** not allowed  \n**Example**\n\n```yaml\nhr:\n  type: postgresql\n  host: localhost\n  port: 5432\n  database: postgres\n  user: postgres\n  password: postgres\n\n```\n\n**Example**\n\n```yaml\nmy-oracle:\n  type: oracle\n  host: 172.17.0.4\n  port: 1521\n  user: c##dbzuser\n  password: dbz\n\n```\n\n\u003ca name=\"sourcesconnectionmongodb\"\u003e\u003c/a\u003e\n#### sources\\.connection\\.MongoDB: MongoDB\n\nConnection configuration for a MongoDB database.\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**type**\u003cbr/\u003e(Database type)|`string`|Database type identifier. Always `mongodb` for this connection.\u003cbr/\u003eConstant Value: `\"mongodb\"`\u003cbr/\u003e|yes|\n|**connection\\_string**|`string`|MongoDB connection URI including host, port, and any connection options.\u003cbr/\u003e|yes|\n|**user**\u003cbr/\u003e(MongoDB user)|`string`|Username for authentication to MongoDB.\u003cbr/\u003e|no|\n|**password**\u003cbr/\u003e(MongoDB password)|`string`|Password for authentication to MongoDB.\u003cbr/\u003e|no|\n|**database**\u003cbr/\u003e(MongoDB databases)|`string`|Comma-separated list of MongoDB databases to monitor.\u003cbr/\u003e|no|\n\n**Additional Properties:** not allowed  \n**Example**\n\n```yaml\nmongodb-source:\n  type: mongodb\n  connection_string: mongodb://localhost:27017/?replicaSet=rs0\n  user: debezium\n  password: dbz\n  database: db1,db2\n\n```\n\n\u003ca name=\"sourcesconnectionspanner\"\u003e\u003c/a\u003e\n#### sources\\.connection\\.Spanner: Spanner\n\nConnection configuration for a Google Cloud Spanner database.\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**type**\u003cbr/\u003e(Database type)|`string`|Database type identifier. Always `spanner` for this connection.\u003cbr/\u003eConstant Value: `\"spanner\"`\u003cbr/\u003e|yes|\n|**project\\_id**\u003cbr/\u003e(Spanner project ID)|`string`|Google Cloud project ID that hosts the Spanner instance.\u003cbr/\u003e|yes|\n|**instance\\_id**\u003cbr/\u003e(Spanner instance ID)|`string`|Spanner instance identifier within the project.\u003cbr/\u003e|yes|\n|**database\\_id**\u003cbr/\u003e(Spanner database ID)|`string`|Spanner database identifier within the instance.\u003cbr/\u003e|yes|\n|**emulator\\_host**\u003cbr/\u003e(Spanner emulator host)|`string`|Host and port of the Spanner emulator. Used for local development; leave unset against real Spanner.\u003cbr/\u003e|no|\n|**use\\_credentials\\_file**|`boolean`|When `true`, RDI authenticates using a service account credentials file; when `false`, it uses application default credentials.\u003cbr/\u003eDefault: `false`\u003cbr/\u003e|no|\n|[**change\\_streams**](#sourcesconnectionspannerchange_streams)\u003cbr/\u003e(Change streams configuration)|`object`|Spanner change streams to capture, keyed by change stream name.\u003cbr/\u003e|yes|\n\n**Additional Properties:** not allowed  \n**Example**\n\n```yaml\nspanner-source:\n  type: spanner\n  project_id: example-12345\n  instance_id: example\n  database_id: example\n  change_streams:\n    change_stream_all:\n      retention_period_hours: 24\n\n```\n\n\u003ca name=\"sourcesconnectionspannerchange_streams\"\u003e\u003c/a\u003e\n##### sources\\.connection\\.Spanner\\.change\\_streams: Change streams configuration\n\nSpanner change streams to capture, keyed by change stream name.\n\n\n**Additional Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|[**Additional Properties**](#sourcesconnectionspannerchange_streamsadditionalproperties)|`object`, `null`|||\n\n**Minimal Properties:** 1  \n\u003ca name=\"sourcesconnectionspannerchange_streamsadditionalproperties\"\u003e\u003c/a\u003e\n###### sources\\.connection\\.Spanner\\.change\\_streams\\.additionalProperties: object,null\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**retention\\_period\\_hours**\u003cbr/\u003e(Change stream retention period hours)|`integer`, `string`|Retention period for the change stream, in hours.\u003cbr/\u003ePattern: `^\\${.*}$`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n\n**Additional Properties:** not allowed  \n\u003ca name=\"sourcesconnectionsnowflake\"\u003e\u003c/a\u003e\n#### sources\\.connection\\.Snowflake: Snowflake\n\nConnection configuration for a Snowflake database.\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**type**\u003cbr/\u003e(Database type)|`string`|Database type identifier. Always `snowflake` for this connection.\u003cbr/\u003eConstant Value: `\"snowflake\"`\u003cbr/\u003e|yes|\n|**url**\u003cbr/\u003e(JDBC URL)|`string`|Snowflake JDBC connection URL, for example `jdbc:snowflake://account.snowflakecomputing.com/`.\u003cbr/\u003e|yes|\n|**user**\u003cbr/\u003e(Snowflake user)|`string`|Username for authentication to Snowflake.\u003cbr/\u003e|yes|\n|**password**\u003cbr/\u003e(Snowflake password)|`string`|Password for authentication to Snowflake. For key-pair authentication, omit this field and provide the private key via the `source-db-ssl` secret (`client.key` field).\u003cbr/\u003e|no|\n|**database**\u003cbr/\u003e(Snowflake database)|`string`|Name of the Snowflake database to connect to.\u003cbr/\u003e|yes|\n|**warehouse**\u003cbr/\u003e(Snowflake warehouse)|`string`|Name of the Snowflake warehouse used for compute.\u003cbr/\u003e|yes|\n|**role**\u003cbr/\u003e(Snowflake role)|`string`|Snowflake role used for the connection.\u003cbr/\u003e|no|\n|**cdcDatabase**\u003cbr/\u003e(CDC database)|`string`|Database hosting the CDC streams. Defaults to the main `database` if not set.\u003cbr/\u003e|no|\n|**cdcSchema**\u003cbr/\u003e(CDC schema)|`string`|Schema hosting the CDC streams. Defaults to the main schema if not set.\u003cbr/\u003e|no|\n\n**Additional Properties:** not allowed  \n**Example**\n\n```yaml\nsnowflake:\n  type: snowflake\n  url: jdbc:snowflake://myaccount.snowflakecomputing.com/\n  user: myuser\n  password: mypassword\n  database: MYDB\n  warehouse: COMPUTE_WH\n\n```\n\n\u003ca name=\"sourceslogging\"\u003e\u003c/a\u003e\n### sources\\.logging: Logging configuration\n\nLogging settings for this source collector.\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**level**\u003cbr/\u003e(Logging level)|`string`|Log verbosity for the source collector.\u003cbr/\u003eDefault: `\"info\"`\u003cbr/\u003eEnum: `\"trace\"`, `\"debug\"`, `\"info\"`, `\"warn\"`, `\"error\"`\u003cbr/\u003e||\n\n**Additional Properties:** not allowed  \n**Example**\n\n```yaml\nlevel: info\n\n```\n\n\u003ca name=\"sourcestables\"\u003e\u003c/a\u003e\n### sources\\.tables: Tables to capture\n\nTables to capture from the source database, keyed by table name. The value configures column selection and key handling for that table.\n\n\n**Additional Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|[**Additional Properties**](#sourcestablesadditionalproperties)|`object`, `null`|||\n\n**Minimal Properties:** 1  \n\u003ca name=\"sourcestablesadditionalproperties\"\u003e\u003c/a\u003e\n#### sources\\.tables\\.additionalProperties: object,null\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**snapshot\\_sql**|`string`|Custom SQL statement used during the initial snapshot, giving fine-grained control over the data captured.\u003cbr/\u003e||\n|[**columns**](#sourcestablesadditionalpropertiescolumns)\u003cbr/\u003e(Columns to capture)|`string[]`|List of specific columns to capture for changes. If not specified, all columns will be captured. For RIOTX Snowflake sources, this is rendered as per-table `--table-columns` projection. Note: This property cannot be used for MongoDB connections\u003cbr/\u003e||\n|[**exclude\\_columns**](#sourcestablesadditionalpropertiesexclude_columns)\u003cbr/\u003e(Columns to exclude)|`string[]`|Specific columns to exclude from capture. When omitted, no columns are excluded. Only supported for MongoDB connections.\u003cbr/\u003e||\n|[**keys**](#sourcestablesadditionalpropertieskeys)\u003cbr/\u003e(Message keys)|`string[]`|Optional list of columns to use as a composite unique identifier. For RIOTX Snowflake sources, this is rendered as per-table `--table-keys`. Only required when the table lacks a primary key or unique constraint. Must form a unique combination of fields\u003cbr/\u003e||\n\n**Additional Properties:** not allowed  \n\u003ca name=\"sourcestablesadditionalpropertiescolumns\"\u003e\u003c/a\u003e\n##### sources\\.tables\\.additionalProperties\\.columns\\[\\]: Columns to capture\n\nList of specific columns to capture for changes. If not specified, all columns will be captured. For RIOTX Snowflake sources, this is rendered as per-table `--table-columns` projection. Note: This property cannot be used for MongoDB connections\n\n\n\u003ca name=\"sourcestablesadditionalpropertiesexclude_columns\"\u003e\u003c/a\u003e\n##### sources\\.tables\\.additionalProperties\\.exclude\\_columns\\[\\]: Columns to exclude\n\nSpecific columns to exclude from capture. When omitted, no columns are excluded. Only supported for MongoDB connections.\n\n\n\u003ca name=\"sourcestablesadditionalpropertieskeys\"\u003e\u003c/a\u003e\n##### sources\\.tables\\.additionalProperties\\.keys\\[\\]: Message keys\n\nOptional list of columns to use as a composite unique identifier. For RIOTX Snowflake sources, this is rendered as per-table `--table-keys`. Only required when the table lacks a primary key or unique constraint. Must form a unique combination of fields\n\n\n\u003ca name=\"sourcesschemas\"\u003e\u003c/a\u003e\n### sources\\.schemas\\[\\]: Schema names\n\nSchema names to capture from the source database. Maps to the underlying connector's `schema.include.list`.\n\n\n\u003ca name=\"sourcesdatabases\"\u003e\u003c/a\u003e\n### sources\\.databases\\[\\]: Database names\n\nDatabase names to capture from the source database. Maps to the underlying connector's `database.include.list`. Applies only to MySQL, MariaDB, and MongoDB connections.\n\n\n\u003ca name=\"sourcesadvanced\"\u003e\u003c/a\u003e\n### sources\\.advanced: Advanced configuration\n\nAdvanced configuration that overrides the underlying engine's defaults. Only required for non-standard tuning.\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|[**sink**](#sourcesadvancedsink)\u003cbr/\u003e(RDI Collector stream writer configuration)|`object`|Advanced configuration properties for the RDI Collector stream writer connection and behaviour. **Applies to the `cdc` and `flink` collector types.**\u003cbr/\u003e||\n|[**source**](#sourcesadvancedsource)\u003cbr/\u003e(Advanced source settings)|`object`|Advanced configuration properties for the source database connection and CDC behavior. **Applies to the `cdc` and `flink` collector types.**\u003cbr/\u003e||\n|[**quarkus**](#sourcesadvancedquarkus)\u003cbr/\u003e(Quarkus runtime settings)|`object`|Advanced configuration properties for the Quarkus runtime that hosts Debezium Server. **Only applies to the `cdc` collector type.** See the [Debezium Server documentation](https://debezium.io/documentation/reference/stable/operations/debezium-server.html) for runtime configuration options. When using a property from that page, omit the `quarkus.` prefix.\u003cbr/\u003e||\n|[**flink**](#sourcesadvancedflink)\u003cbr/\u003e(Advanced Flink settings)|`object`|Advanced configuration properties forwarded to the Flink runtime that hosts the collector. Any property listed in the [Flink configuration documentation](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/deployment/config/) can be set here and will override the RDI default. **Only applies to the `flink` collector type.**\u003cbr/\u003e||\n|[**resources**](#sourcesadvancedresources)\u003cbr/\u003e(Collector resource settings)|`object`|Compute resources allocated to the collector. **Only applies to the `cdc` collector type.**\u003cbr/\u003e||\n|[**riotx**](#sourcesadvancedriotx)\u003cbr/\u003e(Advanced RIOT\\-X settings)|`object`|Advanced configuration properties for the RIOT-X Snowflake collector. **Only applies to the `riotx` collector type.**\u003cbr/\u003e||\n|**java\\_options**\u003cbr/\u003e(Advanced Java options)|`string`|These Java options will be passed to the command line command when launching the source collector. **Only applies to the `cdc` collector type.**\u003cbr/\u003e||\n\n**Additional Properties:** not allowed  \n**Minimal Properties:** 1  \n**Example**\n\n```yaml\nsink:\n  redis.batch.size: 1000\n  redis.flush.interval.ms: 100\n  redis.connection.timeout.ms: 2000\n  redis.socket.timeout.ms: 2000\n  redis.retry.max.attempts: 5\n  redis.retry.initial.delay.ms: 100\n  redis.retry.max.delay.ms: 3000\n  redis.retry.backoff.multiplier: 2\n  redis.oom.retry.initial.delay.ms: 1000\n  redis.oom.retry.max.delay.ms: 10000\n  redis.oom.retry.backoff.multiplier: 2\n  redis.wait.enabled: false\n  redis.wait.write.timeout.ms: 1000\n  redis.wait.retry.enabled: false\n  redis.wait.retry.delay.ms: 1000\nsource:\n  snapshot.max.threads: 1\n  poll.interval.ms: 500\n  snapshot.fetch.size: 10000\n  max.batch.size: 2048\n  max.queue.size: 8192\n  heartbeat.interval.ms: 0\n  lob.enabled: false\n  publication.autocreate.mode: all_tables\n  publication.name: dbz_publication\n  slot.name: debezium\n  spanner.version.retention.period.hours: 1\n  spanner.fetch.timeout.ms: 500\n  spanner.fetch.heartbeat.ms: 100\n  spanner.max.rows.per.partition: 10000\n  spanner.dialect: GOOGLESQL\nquarkus: {}\nflink:\n  taskmanager.numberOfTaskSlots: 1\nresources: {}\nriotx:\n  poll: 30s\n  snapshot: INITIAL\n  streamPrefix: 'data:'\n  clearOffset: false\n  count: 0\n\n```\n\n\u003ca name=\"sourcesadvancedsink\"\u003e\u003c/a\u003e\n#### sources\\.advanced\\.sink: RDI Collector stream writer configuration\n\nAdvanced configuration properties for the RDI Collector stream writer connection and behaviour. **Applies to the `cdc` and `flink` collector types.**\u003cbr/\u003e\u003cbr/\u003eFor the `cdc` collector type, see the full list of properties at [Debezium Server — Redis Stream sink](https://debezium.io/documentation/reference/stable/operations/debezium-server.html#_redis_stream). When using a property from that page, omit the `debezium.sink.` prefix.\u003cbr/\u003e\u003cbr/\u003e**The properties listed below only apply to the `flink` collector type.**\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**redis\\.batch\\.size**\u003cbr/\u003e(Sink batch size)|`integer`|Maximum number of records the collector sink writes to Redis in a single batch.\u003cbr/\u003eDefault: `1000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**redis\\.flush\\.interval\\.ms**\u003cbr/\u003e(Sink flush interval)|`integer`|Maximum time in milliseconds the collector sink waits to fill a batch before flushing it to Redis.\u003cbr/\u003eDefault: `100`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**redis\\.connection\\.timeout\\.ms**\u003cbr/\u003e(Sink connection timeout)|`integer`|Connection timeout in milliseconds for the target Redis client used by the collector sink.\u003cbr/\u003eDefault: `2000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**redis\\.socket\\.timeout\\.ms**\u003cbr/\u003e(Sink socket timeout)|`integer`|Socket read/write timeout in milliseconds for the target Redis client used by the collector sink.\u003cbr/\u003eDefault: `2000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**redis\\.retry\\.max\\.attempts**\u003cbr/\u003e(Sink retry max attempts)|`integer`|Maximum number of retry attempts for failed Redis operations.\u003cbr/\u003eDefault: `5`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**redis\\.retry\\.initial\\.delay\\.ms**\u003cbr/\u003e(Sink retry initial delay)|`integer`|Initial delay in milliseconds before the first retry of a failed Redis operation.\u003cbr/\u003eDefault: `100`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**redis\\.retry\\.max\\.delay\\.ms**\u003cbr/\u003e(Sink retry max delay)|`integer`|Maximum delay in milliseconds between retry attempts for failed Redis operations.\u003cbr/\u003eDefault: `3000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**redis\\.retry\\.backoff\\.multiplier**\u003cbr/\u003e(Sink retry backoff multiplier)|`number`|Exponential backoff multiplier between retry attempts for failed Redis operations.\u003cbr/\u003eDefault: `2`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**redis\\.oom\\.retry\\.initial\\.delay\\.ms**\u003cbr/\u003e(Sink OOM retry initial delay)|`integer`|Initial delay in milliseconds before the first retry after a Redis out-of-memory error.\u003cbr/\u003eDefault: `1000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**redis\\.oom\\.retry\\.max\\.delay\\.ms**\u003cbr/\u003e(Sink OOM retry max delay)|`integer`|Maximum delay in milliseconds between retry attempts after a Redis out-of-memory error.\u003cbr/\u003eDefault: `10000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**redis\\.oom\\.retry\\.backoff\\.multiplier**\u003cbr/\u003e(Sink OOM retry backoff multiplier)|`number`|Exponential backoff multiplier between retry attempts after a Redis out-of-memory error.\u003cbr/\u003eDefault: `2`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**redis\\.wait\\.enabled**\u003cbr/\u003e(Sink replica wait enabled)|`boolean`|When `true`, the collector verifies that each write has been replicated to the configured number of Redis replica shards before acknowledging it.\u003cbr/\u003eDefault: `false`\u003cbr/\u003e||\n|**redis\\.wait\\.write\\.timeout\\.ms**\u003cbr/\u003e(Sink replica wait timeout)|`integer`|Maximum time in milliseconds to wait for replica write acknowledgements.\u003cbr/\u003eDefault: `1000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**redis\\.wait\\.retry\\.enabled**\u003cbr/\u003e(Sink replica wait retry enabled)|`boolean`|When `true`, the collector keeps retrying a write until replica acknowledgement succeeds; when `false`, it gives up after the first failure.\u003cbr/\u003eDefault: `false`\u003cbr/\u003e||\n|**redis\\.wait\\.retry\\.delay\\.ms**\u003cbr/\u003e(Sink replica wait retry delay)|`integer`|Delay in milliseconds between replica wait retry attempts.\u003cbr/\u003eDefault: `1000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n\n**Additional Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**Additional Properties**|`string`, `number`, `boolean`|||\n\n**Minimal Properties:** 1  \n**Example**\n\n```yaml\nredis.batch.size: 1000\nredis.flush.interval.ms: 100\nredis.connection.timeout.ms: 2000\nredis.socket.timeout.ms: 2000\nredis.retry.max.attempts: 5\nredis.retry.initial.delay.ms: 100\nredis.retry.max.delay.ms: 3000\nredis.retry.backoff.multiplier: 2\nredis.oom.retry.initial.delay.ms: 1000\nredis.oom.retry.max.delay.ms: 10000\nredis.oom.retry.backoff.multiplier: 2\nredis.wait.enabled: false\nredis.wait.write.timeout.ms: 1000\nredis.wait.retry.enabled: false\nredis.wait.retry.delay.ms: 1000\n\n```\n\n\u003ca name=\"sourcesadvancedsource\"\u003e\u003c/a\u003e\n#### sources\\.advanced\\.source: Advanced source settings\n\nAdvanced configuration properties for the source database connection and CDC behavior. **Applies to the `cdc` and `flink` collector types.**\u003cbr/\u003e\u003cbr/\u003eFor the `cdc` collector type, available properties depend on the source database — refer to the relevant Debezium connector documentation: [MySQL](https://debezium.io/documentation/reference/stable/connectors/mysql.html), [MariaDB](https://debezium.io/documentation/reference/stable/connectors/mariadb.html), [PostgreSQL](https://debezium.io/documentation/reference/stable/connectors/postgresql.html), [Oracle](https://debezium.io/documentation/reference/stable/connectors/oracle.html), [SQL Server](https://debezium.io/documentation/reference/stable/connectors/sqlserver.html), [Db2](https://debezium.io/documentation/reference/stable/connectors/db2.html), [MongoDB](https://debezium.io/documentation/reference/stable/connectors/mongodb.html). When using a property from those pages, omit the `debezium.source.` prefix.\u003cbr/\u003e\u003cbr/\u003e**The named properties below cover the most commonly tuned settings: `spanner.*` properties apply to the `flink` collector type, all others apply to the `cdc` collector type. Any other property from the Debezium documentation can still be set as a free-form key-value pair.**\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**record\\.processing\\.threads**\u003cbr/\u003e(Record processing threads)|`integer`|Controls how many worker threads process captured records before they are written downstream.\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**snapshot\\.max\\.threads**\u003cbr/\u003e(Snapshot max threads)|`integer`|Sets the maximum number of threads used while taking the initial snapshot.\u003cbr/\u003eDefault: `1`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**poll\\.interval\\.ms**\u003cbr/\u003e(Poll interval ms)|`integer`|Defines how often the collector polls the source for new changes.\u003cbr/\u003eDefault: `500`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**snapshot\\.fetch\\.size**\u003cbr/\u003e(Snapshot fetch size)|`integer`|Defines how many rows are fetched per batch during the initial snapshot.\u003cbr/\u003eDefault: `10000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**max\\.batch\\.size**\u003cbr/\u003e(Max batch size)|`integer`|Caps how many records are processed together in a single batch.\u003cbr/\u003eDefault: `2048`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**max\\.queue\\.size**\u003cbr/\u003e(Max queue size)|`integer`|Limits how many records can be buffered in memory before processing catches up.\u003cbr/\u003eDefault: `8192`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**heartbeat\\.interval\\.ms**\u003cbr/\u003e(Heartbeat interval ms)|`integer`|Sets how often heartbeat events are emitted to keep change tracking active. Use 0 to disable them.\u003cbr/\u003eDefault: `0`\u003cbr/\u003eMinimum: `0`\u003cbr/\u003e||\n|**heartbeat\\.action\\.query**\u003cbr/\u003e(Heartbeat action query)|`string`|SQL query executed on the source whenever a heartbeat is emitted.\u003cbr/\u003e||\n|**lob\\.enabled**\u003cbr/\u003e(Lob enabled)|`boolean`|Determines whether large object columns are included in change capture.\u003cbr/\u003eDefault: `false`\u003cbr/\u003e||\n|**gtid\\.source\\.includes**\u003cbr/\u003e(GTID source includes)|`string`|Restricts MySQL GTID processing to the listed source UUIDs.\u003cbr/\u003e||\n|**publication\\.autocreate\\.mode**\u003cbr/\u003e(Publication autocreate mode)|`string`|Controls whether and how the PostgreSQL publication is created or updated automatically.\u003cbr/\u003eDefault: `\"all_tables\"`\u003cbr/\u003eEnum: `\"all_tables\"`, `\"filtered\"`, `\"disabled\"`\u003cbr/\u003e||\n|**publication\\.name**\u003cbr/\u003e(Publication name)|`string`|Sets the PostgreSQL logical replication publication name used by the collector.\u003cbr/\u003eDefault: `\"dbz_publication\"`\u003cbr/\u003e||\n|**slot\\.name**\u003cbr/\u003e(Slot name)|`string`|Sets the PostgreSQL replication slot name the collector reads from.\u003cbr/\u003eDefault: `\"debezium\"`\u003cbr/\u003e||\n|**spanner\\.version\\.retention\\.period\\.hours**\u003cbr/\u003e(Spanner version retention period)|`integer`|Retention period in hours for Spanner change stream versions. Determines how far back the collector can resume after an outage.\u003cbr/\u003eDefault: `1`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**spanner\\.fetch\\.timeout\\.ms**\u003cbr/\u003e(Spanner fetch timeout)|`integer`|Timeout in milliseconds for a single change stream fetch request to Spanner.\u003cbr/\u003eDefault: `500`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**spanner\\.fetch\\.heartbeat\\.ms**\u003cbr/\u003e(Spanner fetch heartbeat interval)|`integer`|Interval in milliseconds at which Spanner sends heartbeat records when no data changes are available.\u003cbr/\u003eDefault: `100`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**spanner\\.max\\.rows\\.per\\.partition**\u003cbr/\u003e(Spanner max rows per partition)|`integer`|Maximum number of rows the collector reads from a single Spanner change stream partition before yielding.\u003cbr/\u003eDefault: `10000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**spanner\\.dialect**\u003cbr/\u003e(Spanner SQL dialect)|`string`|SQL dialect of the Spanner database. Use `GOOGLESQL` for Google Standard SQL or `POSTGRESQL` for the PostgreSQL interface.\u003cbr/\u003eDefault: `\"GOOGLESQL\"`\u003cbr/\u003eEnum: `\"GOOGLESQL\"`, `\"POSTGRESQL\"`\u003cbr/\u003e||\n\n**Additional Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**Additional Properties**|`string`, `number`, `boolean`|||\n\n**Minimal Properties:** 1  \n**Example**\n\n```yaml\nsnapshot.max.threads: 1\npoll.interval.ms: 500\nsnapshot.fetch.size: 10000\nmax.batch.size: 2048\nmax.queue.size: 8192\nheartbeat.interval.ms: 0\nlob.enabled: false\npublication.autocreate.mode: all_tables\npublication.name: dbz_publication\nslot.name: debezium\nspanner.version.retention.period.hours: 1\nspanner.fetch.timeout.ms: 500\nspanner.fetch.heartbeat.ms: 100\nspanner.max.rows.per.partition: 10000\nspanner.dialect: GOOGLESQL\n\n```\n\n\u003ca name=\"sourcesadvancedquarkus\"\u003e\u003c/a\u003e\n#### sources\\.advanced\\.quarkus: Quarkus runtime settings\n\nAdvanced configuration properties for the Quarkus runtime that hosts Debezium Server. **Only applies to the `cdc` collector type.** See the [Debezium Server documentation](https://debezium.io/documentation/reference/stable/operations/debezium-server.html) for runtime configuration options. When using a property from that page, omit the `quarkus.` prefix.\n\n\n**Additional Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**Additional Properties**|`string`, `number`, `boolean`|||\n\n**Minimal Properties:** 1  \n\u003ca name=\"sourcesadvancedflink\"\u003e\u003c/a\u003e\n#### sources\\.advanced\\.flink: Advanced Flink settings\n\nAdvanced configuration properties forwarded to the Flink runtime that hosts the collector. Any property listed in the [Flink configuration documentation](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/deployment/config/) can be set here and will override the RDI default. **Only applies to the `flink` collector type.**\u003cbr/\u003e\u003cbr/\u003eThe properties listed below are the ones most likely to require adjustment. **Changing any other Flink property is not recommended unless instructed by Redis support.**\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**parallelism\\.default**\u003cbr/\u003e(Default parallelism)|`integer`|Default parallelism for Flink jobs and operators. When unset, Flink uses the number of available task slots across all task managers (`taskManager.replicas × taskmanager.numberOfTaskSlots`). See [parallel execution](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/dev/datastream/execution/parallel/).\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**taskmanager\\.numberOfTaskSlots**\u003cbr/\u003e(Task slots per task manager)|`integer`|Number of parallel task slots per task manager pod. Each slot can run one parallel pipeline instance, so this caps the parallelism a single task manager can absorb. See [task slots and resources](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/concepts/flink-architecture/#task-slots-and-resources).\u003cbr/\u003eDefault: `1`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**taskmanager\\.memory\\.process\\.size**\u003cbr/\u003e(Task manager process memory)|`string`|Total memory budget for each task manager JVM process, expressed with a unit suffix such as `2048m` or `4g`. See [task manager memory configuration](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/deployment/memory/mem_setup_tm/).\u003cbr/\u003e||\n\n**Additional Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**Additional Properties**|`string`, `number`, `boolean`|||\n\n**Minimal Properties:** 1  \n**Example**\n\n```yaml\ntaskmanager.numberOfTaskSlots: 1\n\n```\n\n\u003ca name=\"sourcesadvancedresources\"\u003e\u003c/a\u003e\n#### sources\\.advanced\\.resources: Collector resource settings\n\nCompute resources allocated to the collector. **Only applies to the `cdc` collector type.**\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**cpu**\u003cbr/\u003e(CPU resource value)|`string`|CPU request for the collector container, for example `1` or `500m`.\u003cbr/\u003e||\n|**memory**\u003cbr/\u003e(Memory resource value)|`string`|Memory request for the collector container, for example `1024Mi` or `2Gi`.\u003cbr/\u003e||\n\n**Additional Properties:** not allowed  \n**Minimal Properties:** 1  \n\u003ca name=\"sourcesadvancedriotx\"\u003e\u003c/a\u003e\n#### sources\\.advanced\\.riotx: Advanced RIOT\\-X settings\n\nAdvanced configuration properties for the RIOT-X Snowflake collector. **Only applies to the `riotx` collector type.**\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**poll**\u003cbr/\u003e(Polling interval)|`string`|Interval between polls for new stream changes, for example `30s` or `PT30S`.\u003cbr/\u003eDefault: `\"30s\"`\u003cbr/\u003e||\n|**snapshot**\u003cbr/\u003e(Snapshot mode)|`string`|Initial-load behavior. `INITIAL` performs a one-time snapshot before streaming; `NEVER` skips the snapshot.\u003cbr/\u003eDefault: `\"INITIAL\"`\u003cbr/\u003eEnum: `\"INITIAL\"`, `\"NEVER\"`\u003cbr/\u003e||\n|**streamPrefix**\u003cbr/\u003e(Redis stream key prefix)|`string`|Prefix used when constructing Redis stream keys, for example `data:`.\u003cbr/\u003eDefault: `\"data:\"`\u003cbr/\u003e||\n|**streamLimit**\u003cbr/\u003e(Maximum stream length)|`integer`|Maximum number of entries kept in each Redis stream before older entries are trimmed.\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|[**keyColumns**](#sourcesadvancedriotxkeycolumns)\u003cbr/\u003e(Key columns)|`string[]`|Deprecated RIOTX global fallback list of columns to use as message keys for every captured table. Prefer `tables.\u003cschema.table\u003e.keys`\u003cbr/\u003e||\n|**clearOffset**\u003cbr/\u003e(Clear existing offset)|`boolean`|When `true`, the stored offset is cleared on startup, forcing a fresh read.\u003cbr/\u003eDefault: `false`\u003cbr/\u003e||\n|**count**\u003cbr/\u003e(Record count limit)|`integer`|Maximum number of records to process. Set to `0` for unlimited.\u003cbr/\u003eDefault: `0`\u003cbr/\u003eMinimum: `0`\u003cbr/\u003e||\n\n**Additional Properties:** not allowed  \n**Minimal Properties:** 1  \n**Example**\n\n```yaml\npoll: 30s\nsnapshot: INITIAL\nstreamPrefix: 'data:'\nclearOffset: false\ncount: 0\n\n```\n\n\u003ca name=\"sourcesadvancedriotxkeycolumns\"\u003e\u003c/a\u003e\n##### sources\\.advanced\\.riotx\\.keyColumns\\[\\]: Key columns\n\nDeprecated RIOTX global fallback list of columns to use as message keys for every captured table. Prefer `tables.\u003cschema.table\u003e.keys`\n\n\n\u003ca name=\"targets\"\u003e\u003c/a\u003e\n## targets: Target connections\n\nTarget Redis databases where processed records are written. Each key is a target identifier; the value configures the connection.\n\n\n**Properties** (key: `.*`)\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|[**connection**](#targetsconnection)\u003cbr/\u003e(Database connection)|`object`|Connection configuration for a Redis database.\u003cbr/\u003e|yes|\n|**name**\u003cbr/\u003e(Target name)|`string`|Human-readable name for the target connection. Maximum 100 characters.\u003cbr/\u003eMaximal Length: `100`\u003cbr/\u003e|no|\n\n\n\u003ca name=\"targetsconnection\"\u003e\u003c/a\u003e\n### targets\\.connection: Database connection\n\nConnection configuration for a Redis database.\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**type**\u003cbr/\u003e(Database type)||Database type identifier. Always `redis` for this connection.\u003cbr/\u003eConstant Value: `\"redis\"`\u003cbr/\u003e|yes|\n|**host**\u003cbr/\u003e(Database host)|`string`|Hostname or IP address of the Redis server.\u003cbr/\u003e|yes|\n|**port**\u003cbr/\u003e(Database port)|`integer`|Network port on which the Redis server is listening.\u003cbr/\u003eMinimum: `1`\u003cbr/\u003eMaximum: `65535`\u003cbr/\u003e|yes|\n|**user**\u003cbr/\u003e(Database user)|`string`|Username for authentication to the Redis database.\u003cbr/\u003e|no|\n|**password**\u003cbr/\u003e(Database password)|`string`|Password for authentication to the Redis database.\u003cbr/\u003e|no|\n|**key**\u003cbr/\u003e(Private key file)|`string`|Path to the private key file used for SSL/TLS client authentication.\u003cbr/\u003e|no|\n|**key\\_password**\u003cbr/\u003e(Private key password)|`string`|Password used to decrypt the private key file.\u003cbr/\u003e|no|\n|**cert**\u003cbr/\u003e(Client certificate)|`string`|Path to the client certificate file used for SSL/TLS client authentication.\u003cbr/\u003e|no|\n|**cacert**\u003cbr/\u003e(CA certificate)|`string`|Path to the Certificate Authority (CA) certificate file used to verify the server's TLS certificate.\u003cbr/\u003e|no|\n\n**Additional Properties:** not allowed  \n**Minimal Properties:** 3  \n**If property *key* is defined**, property/ies *cert* is/are required.  \n**If property *cert* is defined**, property/ies *key* is/are required.  \n**If property *key_password* is defined**, property/ies *key* is/are required.  \n\u003ca name=\"processors\"\u003e\u003c/a\u003e\n## processors: Data processing configuration\n\nSettings that control how data is processed, including batch sizes, error handling, and performance tuning.\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**type**\u003cbr/\u003e(Processor type)|`string`|Processor implementation to run. `classic` runs the classic processor; `flink` runs the Apache Flink-based processor.\u003cbr/\u003eDefault: `\"classic\"`\u003cbr/\u003eEnum: `\"classic\"`, `\"flink\"`\u003cbr/\u003e||\n|**read\\_batch\\_size**|`integer`, `string`|Maximum number of records read from the source streams in a single batch.\u003cbr/\u003eDefault: `2000`\u003cbr/\u003ePattern: `^\\${.*}$`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**read\\_batch\\_timeout\\_ms**\u003cbr/\u003e(Read batch timeout)|`integer`|Maximum time in milliseconds to wait for a batch to fill before processing it.\u003cbr/\u003eDefault: `100`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**duration**\u003cbr/\u003e(Batch duration limit)|`integer`, `string`|(DEPRECATED)\u003cbr/\u003eThis property has no effect; use `read_batch_timeout_ms` instead.\u003cbr/\u003eDefault: `100`\u003cbr/\u003ePattern: `^\\${.*}$`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**write\\_batch\\_size**|`integer`, `string`|Maximum number of records written to the target Redis database in a single batch.\u003cbr/\u003eDefault: `200`\u003cbr/\u003ePattern: `^\\${.*}$`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**enable\\_async\\_processing**|`boolean`|When `true`, the processor handles batches asynchronously to improve throughput. **Classic processor only.**\u003cbr/\u003eDefault: `true`\u003cbr/\u003e||\n|**batch\\_queue\\_size**|`integer`|Maximum number of batches queued for processing. **Classic processor only.**\u003cbr/\u003eDefault: `3`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**ack\\_queue\\_size**|`integer`|Maximum number of batches queued for asynchronous acknowledgement. **Classic processor only.**\u003cbr/\u003eDefault: `10`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**dedup**\u003cbr/\u003e(Enable deduplication)|`boolean`|When `true`, the processor deduplicates incoming records. **Classic processor only.**\u003cbr/\u003eDefault: `false`\u003cbr/\u003e||\n|**dedup\\_max\\_size**\u003cbr/\u003e(Deduplication set size)|`integer`|Maximum number of entries kept in the deduplication set. **Classic processor only.**\u003cbr/\u003eDefault: `1024`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**dedup\\_strategy**\u003cbr/\u003e(Deduplication strategy)|`string`|(DEPRECATED)\u003cbr/\u003eThis property has no effect — the only supported strategy is `ignore`. Remove it from the configuration. **Classic processor only.**\u003cbr/\u003eDefault: `\"ignore\"`\u003cbr/\u003eEnum: `\"reject\"`, `\"ignore\"`\u003cbr/\u003e||\n|**error\\_handling**\u003cbr/\u003e(Error handling strategy)|`string`|Strategy for handling failed records. `ignore` silently drops them; `dlq` writes them to the dead-letter queue.\u003cbr/\u003eDefault: `\"dlq\"`\u003cbr/\u003e||\n|**dlq\\_max\\_messages**\u003cbr/\u003e(DLQ message limit)|`integer`, `string`|Maximum number of messages stored per dead-letter queue stream.\u003cbr/\u003eDefault: `1000`\u003cbr/\u003ePattern: `^\\${.*}$`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**target\\_data\\_type**\u003cbr/\u003e(Target Redis data type)|`string`|Data type used to store target records in Redis. `hash` writes a Redis Hash; `json` writes a RedisJSON document and requires the RedisJSON module.\u003cbr/\u003eDefault: `\"hash\"`\u003cbr/\u003e||\n|**json\\_update\\_strategy**|`string`|Strategy for updating existing JSON documents in Redis. `replace` overwrites the entire document; `merge` merges incoming fields into it.\u003cbr/\u003eDefault: `\"replace\"`\u003cbr/\u003e||\n|**use\\_native\\_json\\_merge**\u003cbr/\u003e(Use native JSON merge from RedisJSON module)|`boolean`|Controls whether JSON merge operations use the native `JSON.MERGE` command (when `true`) or Lua scripts (when `false`). Introduced in RDI 1.15.0. The native command provides 2x performance improvement but handles null values differently:\u003cbr/\u003e\u003cbr/\u003e**Previous behavior (Lua merge)**: When merging `{\"field1\": \"value1\", \"field2\": \"value2\"}` with `{\"field2\": null, \"field3\": \"value3\"}`, the result was `{\"field1\": \"value1\", \"field2\": null, \"field3\": \"value3\"}` (null value is preserved).\u003cbr/\u003e\u003cbr/\u003e**New behavior (JSON.MERGE)**: The same merge produces `{\"field1\": \"value1\", \"field3\": \"value3\"}` (null value removes the field, following [RFC 7396](https://datatracker.ietf.org/doc/html/rfc7396)).\u003cbr/\u003e\u003cbr/\u003e**Note**: The native `JSON.MERGE` command requires RedisJSON 2.6.0 or higher. If the target database has an older version of RedisJSON, RDI automatically falls back to Lua-based merge operations regardless of this setting.\u003cbr/\u003e\u003cbr/\u003e**Impact**: If your application logic distinguishes between a field with a `null` value and a missing field, you may need to adjust your data handling. This follows the JSON Merge Patch RFC standard but differs from the previous Lua implementation. Set to `false` to revert to the previous Lua-based merge behavior if needed.\u003cbr/\u003e\u003cbr/\u003eThe Flink processor always uses the native `JSON.MERGE` command when the target database supports it. **Classic processor only.**\u003cbr/\u003eDefault: `true`\u003cbr/\u003e||\n|**initial\\_sync\\_processes**|`integer`, `string`|Number of parallel processes used to perform the initial data synchronization. For the Flink processor, parallelism is controlled by Flink properties instead. **Classic processor only.**\u003cbr/\u003eDefault: `4`\u003cbr/\u003ePattern: `^\\${.*}$`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003eMaximum: `32`\u003cbr/\u003e||\n|**idle\\_sleep\\_time\\_ms**\u003cbr/\u003e(Idle sleep interval)|`integer`, `string`|Time in milliseconds to sleep between processing batches when idle. **Classic processor only.**\u003cbr/\u003eDefault: `200`\u003cbr/\u003ePattern: `^\\${.*}$`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003eMaximum: `999999`\u003cbr/\u003e||\n|**idle\\_streams\\_check\\_interval\\_ms**\u003cbr/\u003e(Idle streams check interval)|`integer`, `string`|Time in milliseconds between checks for new streams when the processor is idle. For the Flink processor, use `processors.advanced.source.discovery.interval.ms` instead to configure a single discovery interval regardless of load. **Classic processor only.**\u003cbr/\u003eDefault: `1000`\u003cbr/\u003ePattern: `^\\${.*}$`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003eMaximum: `999999`\u003cbr/\u003e||\n|**busy\\_streams\\_check\\_interval\\_ms**\u003cbr/\u003e(Busy streams check interval)|`integer`, `string`|Time in milliseconds between checks for new streams when the processor is busy. For the Flink processor, use `processors.advanced.source.discovery.interval.ms` instead to configure a single discovery interval regardless of load. **Classic processor only.**\u003cbr/\u003eDefault: `5000`\u003cbr/\u003ePattern: `^\\${.*}$`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003eMaximum: `999999`\u003cbr/\u003e||\n|**retry\\_max\\_attempts**\u003cbr/\u003e(Maximum retry attempts)|`integer`, `string`|Maximum number of attempts for a failed write to the target Redis database before giving up.\u003cbr/\u003eDefault: `5`\u003cbr/\u003ePattern: `^\\${.*}$`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**retry\\_initial\\_delay\\_ms**\u003cbr/\u003e(Initial retry delay)|`integer`, `string`|Initial delay in milliseconds before the first retry of a failed write.\u003cbr/\u003eDefault: `1000`\u003cbr/\u003ePattern: `^\\${.*}$`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003eMaximum: `999999`\u003cbr/\u003e||\n|**retry\\_max\\_delay\\_ms**\u003cbr/\u003e(Maximum retry delay)|`integer`, `string`|Maximum delay in milliseconds between retry attempts.\u003cbr/\u003eDefault: `10000`\u003cbr/\u003ePattern: `^\\${.*}$`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003eMaximum: `999999`\u003cbr/\u003e||\n|**wait\\_enabled**\u003cbr/\u003e(Enable replica wait)|`boolean`|When `true`, RDI verifies that each write has been replicated to the target database's replica shards before acknowledging it. Enable this only when target database replication is enabled and a healthy replica is available. For the Flink processor, `processors.advanced.target.wait.enabled` takes priority.\u003cbr/\u003eDefault: `false`\u003cbr/\u003e||\n|**wait\\_timeout**\u003cbr/\u003e(Replica wait timeout)|`integer`, `string`|Maximum time in milliseconds to wait for replica write verification on the target database.\u003cbr/\u003eDefault: `1000`\u003cbr/\u003ePattern: `^\\${.*}$`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**retry\\_on\\_replica\\_failure**|`boolean`|When `true`, RDI keeps retrying a write until replica replication is confirmed; when `false`, it gives up after the first failure.\u003cbr/\u003eDefault: `true`\u003cbr/\u003e||\n|**on\\_failed\\_retry\\_interval**\u003cbr/\u003e(Retry interval on failure)|`integer`, `string`|(DEPRECATED)\u003cbr/\u003eThis property has no effect; remove it from the configuration.\u003cbr/\u003eDefault: `5`\u003cbr/\u003ePattern: `^\\${.*}$`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|[**logging**](#processorslogging)\u003cbr/\u003e(Logging configuration)|`object`|Logging settings for the processor. **Flink processor only.**\u003cbr/\u003e||\n|[**advanced**](#processorsadvanced)\u003cbr/\u003e(Advanced configuration)|`object`|Advanced configuration for fine-tuning the processor. **All properties under `advanced` apply to the Flink processor only and are silently ignored by the classic processor.**\u003cbr/\u003e||\n\n**Additional Properties:** not allowed  \n\u003ca name=\"processorslogging\"\u003e\u003c/a\u003e\n### processors\\.logging: Logging configuration\n\nLogging settings for the processor. **Flink processor only.**\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**level**\u003cbr/\u003e(Logging level)|`string`|Log verbosity for the processor.\u003cbr/\u003eDefault: `\"info\"`\u003cbr/\u003eEnum: `\"trace\"`, `\"debug\"`, `\"info\"`, `\"warn\"`, `\"error\"`\u003cbr/\u003e||\n\n**Additional Properties:** not allowed  \n**Example**\n\n```yaml\nlevel: info\n\n```\n\n\u003ca name=\"processorsadvanced\"\u003e\u003c/a\u003e\n### processors\\.advanced: Advanced configuration\n\nAdvanced configuration for fine-tuning the processor. **All properties under `advanced` apply to the Flink processor only and are silently ignored by the classic processor.**\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|[**source**](#processorsadvancedsource)\u003cbr/\u003e(Advanced source settings)|`object`|Advanced configuration properties for the source Redis client and streams reader. **Flink processor only.**\u003cbr/\u003e||\n|[**target**](#processorsadvancedtarget)\u003cbr/\u003e(Advanced target settings)|`object`|Advanced configuration properties for the target Redis client and sink. **Flink processor only.**\u003cbr/\u003e||\n|[**dlq**](#processorsadvanceddlq)\u003cbr/\u003e(Advanced DLQ settings)|`object`|Advanced configuration properties for the DLQ Redis client and sink. **Flink processor only.**\u003cbr/\u003e||\n|[**processor**](#processorsadvancedprocessor)\u003cbr/\u003e(Advanced processor settings)|`object`|Advanced configuration properties for the processor. **Flink processor only.**\u003cbr/\u003e||\n|[**flink**](#processorsadvancedflink)\u003cbr/\u003e(Advanced Flink settings)|`object`|Advanced configuration properties forwarded to the underlying Flink runtime. Any property listed in the [Flink configuration documentation](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/deployment/config/) can be set here and will override the RDI default. **Flink processor only.**\u003cbr/\u003e||\n|[**resources**](#processorsadvancedresources)\u003cbr/\u003e(Advanced resource settings)|`object`|Compute resources allocated to the Flink job, such as the number of task manager pods. **Flink processor only.**\u003cbr/\u003e||\n\n**Additional Properties:** not allowed  \n**Minimal Properties:** 1  \n**Example**\n\n```yaml\nsource:\n  stream.name.pattern: data:*\n  discovery.interval.ms: 1000\n  batch.size: 2000\n  batch.timeout.ms: 100\n  connection.timeout.ms: 2000\n  socket.timeout.ms: 2000\n  retry.max.attempts: 5\n  retry.initial.delay.ms: 100\n  retry.max.delay.ms: 3000\n  retry.backoff.multiplier: 2\ntarget:\n  batch.size: 200\n  flush.interval.ms: 100\n  connection.timeout.ms: 2000\n  socket.timeout.ms: 2000\n  retry.max.attempts: 5\n  retry.initial.delay.ms: 1000\n  retry.max.delay.ms: 10000\n  retry.backoff.multiplier: 2\n  wait.enabled: false\n  wait.write.timeout.ms: 1000\n  wait.retry.enabled: true\n  wait.retry.delay.ms: 1000\ndlq:\n  max.len: 1000\n  batch.size: 100\n  flush.interval.ms: 100\n  connection.timeout.ms: 2000\n  socket.timeout.ms: 2000\n  retry.max.attempts: 1\n  retry.initial.delay.ms: 100\n  retry.max.delay.ms: 3000\n  retry.backoff.multiplier: 2\n  wait.enabled: false\n  wait.write.timeout.ms: 1000\n  wait.retry.enabled: false\n  wait.retry.delay.ms: 1000\nprocessor:\n  default.data.type: hash\n  default.json.update.strategy: replace\n  dlq.enabled: true\nflink:\n  taskmanager.numberOfTaskSlots: 1\n  taskmanager.memory.process.size: 2048m\nresources:\n  taskManager: {}\n\n```\n\n\u003ca name=\"processorsadvancedsource\"\u003e\u003c/a\u003e\n#### processors\\.advanced\\.source: Advanced source settings\n\nAdvanced configuration properties for the source Redis client and streams reader. **Flink processor only.**\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**stream\\.name\\.pattern**\u003cbr/\u003e(Source stream name pattern)|`string`|Glob pattern used to discover input streams in the source Redis database, for example `data:*`.\u003cbr/\u003eDefault: `\"data:*\"`\u003cbr/\u003e||\n|**discovery\\.interval\\.ms**\u003cbr/\u003e(Stream discovery interval)|`integer`|Time in milliseconds between checks for new input streams. Replaces the classic `processors.idle_streams_check_interval_ms` and `processors.busy_streams_check_interval_ms` properties.\u003cbr/\u003eDefault: `1000`\u003cbr/\u003eMinimum: `0`\u003cbr/\u003e||\n|**batch\\.size**\u003cbr/\u003e(Source batch size)|`integer`|Maximum number of records the source operator reads in a single batch. Alias for `processors.read_batch_size`; takes priority when both are set.\u003cbr/\u003eDefault: `2000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**batch\\.timeout\\.ms**\u003cbr/\u003e(Source batch timeout)|`integer`|Maximum time in milliseconds to wait for a source batch to fill before processing. Alias for `processors.read_batch_timeout_ms`; takes priority when both are set.\u003cbr/\u003eDefault: `100`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**connection\\.timeout\\.ms**\u003cbr/\u003e(Source connection timeout)|`integer`|Connection timeout in milliseconds for the source Redis client.\u003cbr/\u003eDefault: `2000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**socket\\.timeout\\.ms**\u003cbr/\u003e(Source socket timeout)|`integer`|Socket read/write timeout in milliseconds for the source Redis client.\u003cbr/\u003eDefault: `2000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**retry\\.max\\.attempts**\u003cbr/\u003e(Source retry max attempts)|`integer`|Maximum number of retry attempts for failed source Redis operations.\u003cbr/\u003eDefault: `5`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**retry\\.initial\\.delay\\.ms**\u003cbr/\u003e(Source retry initial delay)|`integer`|Initial delay in milliseconds before the first retry of a failed source Redis operation.\u003cbr/\u003eDefault: `100`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**retry\\.max\\.delay\\.ms**\u003cbr/\u003e(Source retry max delay)|`integer`|Maximum delay in milliseconds between retry attempts for source Redis operations.\u003cbr/\u003eDefault: `3000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**retry\\.backoff\\.multiplier**\u003cbr/\u003e(Source retry backoff multiplier)|`number`|Exponential backoff multiplier between retry attempts for source Redis operations.\u003cbr/\u003eDefault: `2`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n\n**Additional Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**Additional Properties**|`string`, `number`, `boolean`|||\n\n**Minimal Properties:** 1  \n**Example**\n\n```yaml\nstream.name.pattern: data:*\ndiscovery.interval.ms: 1000\nbatch.size: 2000\nbatch.timeout.ms: 100\nconnection.timeout.ms: 2000\nsocket.timeout.ms: 2000\nretry.max.attempts: 5\nretry.initial.delay.ms: 100\nretry.max.delay.ms: 3000\nretry.backoff.multiplier: 2\n\n```\n\n\u003ca name=\"processorsadvancedtarget\"\u003e\u003c/a\u003e\n#### processors\\.advanced\\.target: Advanced target settings\n\nAdvanced configuration properties for the target Redis client and sink. **Flink processor only.**\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**batch\\.size**\u003cbr/\u003e(Target sink batch size)|`integer`|Maximum number of records the target sink writes in a single batch. Alias for `processors.write_batch_size`; takes priority when both are set.\u003cbr/\u003eDefault: `200`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**flush\\.interval\\.ms**\u003cbr/\u003e(Target sink flush interval)|`integer`|Maximum time in milliseconds the target sink waits to fill a batch before flushing it to Redis.\u003cbr/\u003eDefault: `100`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**connection\\.timeout\\.ms**\u003cbr/\u003e(Target connection timeout)|`integer`|Connection timeout in milliseconds for the target Redis client.\u003cbr/\u003eDefault: `2000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**socket\\.timeout\\.ms**\u003cbr/\u003e(Target socket timeout)|`integer`|Socket read/write timeout in milliseconds for the target Redis client.\u003cbr/\u003eDefault: `2000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**retry\\.max\\.attempts**\u003cbr/\u003e(Target retry max attempts)|`integer`|Maximum number of retry attempts for failed target Redis operations. Alias for `processors.retry_max_attempts`; takes priority when both are set.\u003cbr/\u003eDefault: `5`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**retry\\.initial\\.delay\\.ms**\u003cbr/\u003e(Target retry initial delay)|`integer`|Initial delay in milliseconds before the first retry of a failed target Redis operation. Alias for `processors.retry_initial_delay_ms`; takes priority when both are set.\u003cbr/\u003eDefault: `1000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**retry\\.max\\.delay\\.ms**\u003cbr/\u003e(Target retry max delay)|`integer`|Maximum delay in milliseconds between retry attempts for target Redis operations. Alias for `processors.retry_max_delay_ms`; takes priority when both are set.\u003cbr/\u003eDefault: `10000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**retry\\.backoff\\.multiplier**\u003cbr/\u003e(Target retry backoff multiplier)|`number`|Exponential backoff multiplier between retry attempts for target Redis operations.\u003cbr/\u003eDefault: `2`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**wait\\.enabled**\u003cbr/\u003e(Target replica wait enabled)|`boolean`|When `true`, RDI verifies that each write has been replicated to the target database's replica shards before acknowledging it. Enable this only when target database replication is enabled and a healthy replica is available. Alias for `processors.wait_enabled`; takes priority when both are set.\u003cbr/\u003eDefault: `false`\u003cbr/\u003e||\n|**wait\\.write\\.timeout\\.ms**\u003cbr/\u003e(Target replica wait timeout)|`integer`|Maximum time in milliseconds to wait for target replica write verification. Alias for `processors.wait_timeout`; takes priority when both are set.\u003cbr/\u003eDefault: `1000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**wait\\.retry\\.enabled**\u003cbr/\u003e(Target replica wait retry enabled)|`boolean`|When `true`, RDI keeps retrying a target write until replica replication is confirmed; when `false`, it gives up after the first failure. Alias for `processors.retry_on_replica_failure`; takes priority when both are set. When enabled, the Flink processor retries indefinitely. Failed checkpoints can restart the job, after which the retries resume. The classic processor retries once.\u003cbr/\u003eDefault: `true`\u003cbr/\u003e||\n|**wait\\.retry\\.delay\\.ms**\u003cbr/\u003e(Target replica wait retry delay)|`integer`|Delay in milliseconds between target replica wait retry attempts.\u003cbr/\u003eDefault: `1000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n\n**Additional Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**Additional Properties**|`string`, `number`, `boolean`|||\n\n**Minimal Properties:** 1  \n**Example**\n\n```yaml\nbatch.size: 200\nflush.interval.ms: 100\nconnection.timeout.ms: 2000\nsocket.timeout.ms: 2000\nretry.max.attempts: 5\nretry.initial.delay.ms: 1000\nretry.max.delay.ms: 10000\nretry.backoff.multiplier: 2\nwait.enabled: false\nwait.write.timeout.ms: 1000\nwait.retry.enabled: true\nwait.retry.delay.ms: 1000\n\n```\n\n\u003ca name=\"processorsadvanceddlq\"\u003e\u003c/a\u003e\n#### processors\\.advanced\\.dlq: Advanced DLQ settings\n\nAdvanced configuration properties for the DLQ Redis client and sink. **Flink processor only.**\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**max\\.len**\u003cbr/\u003e(DLQ sink max length)|`integer`|Maximum number of messages stored per dead letter queue stream. Alias for `processors.dlq_max_messages`; takes priority when both are set.\u003cbr/\u003eDefault: `1000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**batch\\.size**\u003cbr/\u003e(DLQ sink batch size)|`integer`|Maximum number of records the DLQ sink writes in a single batch.\u003cbr/\u003eDefault: `100`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**flush\\.interval\\.ms**\u003cbr/\u003e(DLQ sink flush interval)|`integer`|Maximum time in milliseconds the DLQ sink waits to fill a batch before flushing it to Redis.\u003cbr/\u003eDefault: `100`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**connection\\.timeout\\.ms**\u003cbr/\u003e(DLQ connection timeout)|`integer`|Connection timeout in milliseconds for the DLQ Redis client.\u003cbr/\u003eDefault: `2000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**socket\\.timeout\\.ms**\u003cbr/\u003e(DLQ socket timeout)|`integer`|Socket read/write timeout in milliseconds for the DLQ Redis client.\u003cbr/\u003eDefault: `2000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**retry\\.max\\.attempts**\u003cbr/\u003e(DLQ retry max attempts)|`integer`|Maximum number of retry attempts for failed DLQ Redis operations.\u003cbr/\u003eDefault: `1`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**retry\\.initial\\.delay\\.ms**\u003cbr/\u003e(DLQ retry initial delay)|`integer`|Initial delay in milliseconds before the first retry of a failed DLQ Redis operation.\u003cbr/\u003eDefault: `100`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**retry\\.max\\.delay\\.ms**\u003cbr/\u003e(DLQ retry max delay)|`integer`|Maximum delay in milliseconds between retry attempts for DLQ Redis operations.\u003cbr/\u003eDefault: `3000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**retry\\.backoff\\.multiplier**\u003cbr/\u003e(DLQ retry backoff multiplier)|`number`|Exponential backoff multiplier between retry attempts for DLQ Redis operations.\u003cbr/\u003eDefault: `2`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**wait\\.enabled**\u003cbr/\u003e(DLQ replica wait enabled)|`boolean`|When `true`, RDI verifies that each DLQ write has been replicated to the DLQ database's replica shards before acknowledging it.\u003cbr/\u003eDefault: `false`\u003cbr/\u003e||\n|**wait\\.write\\.timeout\\.ms**\u003cbr/\u003e(DLQ replica wait timeout)|`integer`|Maximum time in milliseconds to wait for DLQ replica write verification.\u003cbr/\u003eDefault: `1000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**wait\\.retry\\.enabled**\u003cbr/\u003e(DLQ replica wait retry enabled)|`boolean`|When `true`, RDI keeps retrying a DLQ write until replica replication is confirmed; when `false`, it gives up after the first failure.\u003cbr/\u003eDefault: `false`\u003cbr/\u003e||\n|**wait\\.retry\\.delay\\.ms**\u003cbr/\u003e(DLQ replica wait retry delay)|`integer`|Delay in milliseconds between DLQ replica wait retry attempts.\u003cbr/\u003eDefault: `1000`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n\n**Additional Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**Additional Properties**|`string`, `number`, `boolean`|||\n\n**Minimal Properties:** 1  \n**Example**\n\n```yaml\nmax.len: 1000\nbatch.size: 100\nflush.interval.ms: 100\nconnection.timeout.ms: 2000\nsocket.timeout.ms: 2000\nretry.max.attempts: 1\nretry.initial.delay.ms: 100\nretry.max.delay.ms: 3000\nretry.backoff.multiplier: 2\nwait.enabled: false\nwait.write.timeout.ms: 1000\nwait.retry.enabled: false\nwait.retry.delay.ms: 1000\n\n```\n\n\u003ca name=\"processorsadvancedprocessor\"\u003e\u003c/a\u003e\n#### processors\\.advanced\\.processor: Advanced processor settings\n\nAdvanced configuration properties for the processor. **Flink processor only.**\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**default\\.data\\.type**\u003cbr/\u003e(Default target data type)|`string`|Data type to use in Redis when not overridden per job: `hash` for Redis Hash, `json` for RedisJSON. Alias for `processors.target_data_type`; takes priority when both are set.\u003cbr/\u003eDefault: `\"hash\"`\u003cbr/\u003eEnum: `\"hash\"`, `\"json\"`\u003cbr/\u003e||\n|**default\\.json\\.update\\.strategy**\u003cbr/\u003e(Default JSON update strategy)|`string`|Strategy for updating JSON data in Redis: `replace` to overwrite the entire JSON object, `merge` to merge new data with the existing JSON object. Alias for `processors.json_update_strategy`; takes priority when both are set.\u003cbr/\u003eDefault: `\"replace\"`\u003cbr/\u003eEnum: `\"replace\"`, `\"merge\"`\u003cbr/\u003e||\n|**dlq\\.enabled**\u003cbr/\u003e(Enable DLQ)|`boolean`|When `true`, rejected messages are stored in the dead-letter queue; when `false`, errors are silently skipped. Alias for `processors.error_handling`; takes priority when both are set.\u003cbr/\u003eDefault: `true`\u003cbr/\u003e||\n\n**Additional Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**Additional Properties**|`string`, `number`, `boolean`|||\n\n**Minimal Properties:** 1  \n**Example**\n\n```yaml\ndefault.data.type: hash\ndefault.json.update.strategy: replace\ndlq.enabled: true\n\n```\n\n\u003ca name=\"processorsadvancedflink\"\u003e\u003c/a\u003e\n#### processors\\.advanced\\.flink: Advanced Flink settings\n\nAdvanced configuration properties forwarded to the underlying Flink runtime. Any property listed in the [Flink configuration documentation](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/deployment/config/) can be set here and will override the RDI default. **Flink processor only.**\u003cbr/\u003e\u003cbr/\u003eThe properties listed below are the ones most likely to require adjustment. **Changing any other Flink property is not recommended unless instructed by Redis support.**\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**parallelism\\.default**\u003cbr/\u003e(Default parallelism)|`integer`|Default parallelism for jobs and operators. When unset, Flink uses the number of available task slots across all task managers (`taskManager.replicas × taskmanager.numberOfTaskSlots`). Increase to fan out work across more task slots; see [parallel execution](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/dev/datastream/execution/parallel/).\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**taskmanager\\.numberOfTaskSlots**\u003cbr/\u003e(Task slots per task manager)|`integer`|Number of parallel task slots per task manager pod. Each slot can run one parallel pipeline instance, so this caps the parallelism a single task manager can absorb. See [task slots and resources](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/concepts/flink-architecture/#task-slots-and-resources).\u003cbr/\u003eDefault: `1`\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n|**taskmanager\\.memory\\.process\\.size**\u003cbr/\u003e(Task manager process memory)|`string`|Total memory budget for each task manager JVM process (heap + managed + network + metaspace + JVM overhead), expressed with a unit suffix such as `2048m` or `4g`. See [task manager memory configuration](https://nightlies.apache.org/flink/flink-docs-release-2.0/docs/deployment/memory/mem_setup_tm/).\u003cbr/\u003eDefault: `\"2048m\"`\u003cbr/\u003e||\n\n**Additional Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**Additional Properties**|`string`, `number`, `boolean`|||\n\n**Minimal Properties:** 1  \n**Example**\n\n```yaml\ntaskmanager.numberOfTaskSlots: 1\ntaskmanager.memory.process.size: 2048m\n\n```\n\n\u003ca name=\"processorsadvancedresources\"\u003e\u003c/a\u003e\n#### processors\\.advanced\\.resources: Advanced resource settings\n\nCompute resources allocated to the Flink job, such as the number of task manager pods. **Flink processor only.**\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|[**taskManager**](#processorsadvancedresourcestaskmanager)\u003cbr/\u003e(Task manager resource settings)|`object`|Resource settings for Flink task manager pods.\u003cbr/\u003e||\n\n**Additional Properties:** not allowed  \n**Minimal Properties:** 1  \n**Example**\n\n```yaml\ntaskManager: {}\n\n```\n\n\u003ca name=\"processorsadvancedresourcestaskmanager\"\u003e\u003c/a\u003e\n##### processors\\.advanced\\.resources\\.taskManager: Task manager resource settings\n\nResource settings for Flink task manager pods.\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**replicas**\u003cbr/\u003e(Task manager replicas)|`integer`|Number of Flink task manager pods to run.\u003cbr/\u003eMinimum: `1`\u003cbr/\u003e||\n\n**Additional Properties:** not allowed  \n**Minimal Properties:** 1  \n\u003ca name=\"secret-providers\"\u003e\u003c/a\u003e\n## secret\\-providers: Secret providers\n\nExternal secret providers used to resolve `${...}` references in the configuration.\n\n\n**Properties** (key: `.*`)\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**type**\u003cbr/\u003e(Provider type)|`string`|Secret provider backend. `aws` uses AWS Secrets Manager; `vault` uses HashiCorp Vault.\u003cbr/\u003eEnum: `\"aws\"`, `\"vault\"`\u003cbr/\u003e|yes|\n|[**parameters**](#secret-providersparameters)\u003cbr/\u003e(Provider parameters)|`object`|Configuration parameters for the secret provider.\u003cbr/\u003e|yes|\n\n\n\u003ca name=\"secret-providersparameters\"\u003e\u003c/a\u003e\n### secret\\-providers\\.parameters: Provider parameters\n\nConfiguration parameters for the secret provider.\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|[**objects**](#secret-providersparametersobjects)\u003cbr/\u003e(Secrets objects array)|`object[]`|Secret objects to fetch from the provider.\u003cbr/\u003e|yes|\n\n**Example**\n\n```yaml\nobjects:\n  - {}\n\n```\n\n\u003ca name=\"secret-providersparametersobjects\"\u003e\u003c/a\u003e\n#### secret\\-providers\\.parameters\\.objects\\[\\]: Secrets objects array\n\nSecret objects to fetch from the provider.\n\n\n**Items: Secret object**\n\n**No properties.**\n\n**Example**\n\n```yaml\n- {}\n\n```\n\n\u003ca name=\"metadata\"\u003e\u003c/a\u003e\n## metadata: Pipeline metadata\n\nOptional metadata describing this pipeline, such as a display name and description.\n\n\n**Properties**\n\n|Name|Type|Description|Required|\n|----|----|-----------|--------|\n|**name**\u003cbr/\u003e(Pipeline name)|`string`|Human-readable name for the pipeline. Maximum 100 characters.\u003cbr/\u003eMaximal Length: `100`\u003cbr/\u003e||\n|**description**\u003cbr/\u003e(Pipeline description)|`string`|Free-form description of what the pipeline does. Maximum 500 characters.\u003cbr/\u003eMaximal Length: `500`\u003cbr/\u003e||\n|**revision**\u003cbr/\u003e(Pipeline revision)|`integer`|Pipeline revision number. Must be a non-negative integer.\u003cbr/\u003eMinimum: `0`\u003cbr/\u003e||\n|[**tags**](#metadatatags)\u003cbr/\u003e(Pipeline tags)|`string[]`|Array of pipeline tags. Each tag must be a string of up to 50 characters, containing only alphanumeric characters, dots, dashes, or underscores, and must start and end with an alphanumeric character. Tags must be unique.\u003cbr/\u003e||\n\n**Additional Properties:** not allowed  \n\u003ca name=\"metadatatags\"\u003e\u003c/a\u003e\n### metadata\\.tags\\[\\]: Pipeline tags\n\nArray of pipeline tags. Each tag must be a string of up to 50 characters, containing only alphanumeric characters, dots, dashes, or underscores, and must start and end with an alphanumeric character. Tags must be unique.\n\n\n**Unique Items:** yes  \n",
  "tags": ["redis-di"],
  "last_updated": "2026-09-19T17:55:58-07:00"
}
