Skip to content

Commit 985c16c

Browse files
Merge pull request #2218 from redis/RDSC-4108-rdi-1-15-0-release-notes
RDSC-4108: RDI 1.15.0 release notes
2 parents 7b272d8 + de14593 commit 985c16c

File tree

5 files changed

+111
-7
lines changed

5 files changed

+111
-7
lines changed

config.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ rdi_redis_gears_version = "1.2.6"
5555
rdi_debezium_server_version = "2.3.0.Final"
5656
rdi_db_types = "cassandra|mysql|oracle|postgresql|sqlserver"
5757
rdi_cli_latest = "latest"
58-
rdi_current_version = "1.14.1"
58+
rdi_current_version = "1.15.0"
5959

6060
[params.clientsConfig]
6161
"Python"={quickstartSlug="redis-py"}

content/integrate/redis-data-integration/data-pipelines/pipeline-config.md

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,6 @@ processors:
144144
# Time (in ms) after which data will be read from stream even if
145145
# read_batch_size was not reached.
146146
# duration: 100
147-
# Data type to use in Redis target database: `hash` for Redis Hash,
148-
# `json` for JSON (which requires the RedisJSON module).
149-
# target_data_type: hash
150147
# The batch size for writing data to the target Redis database. Should be
151148
# less than or equal to the read_batch_size.
152149
# write_batch_size: 200
@@ -155,8 +152,26 @@ processors:
155152
# Max size of the deduplication set (default: 1024).
156153
# dedup_max_size: <DEDUP_MAX_SIZE>
157154
# Error handling strategy: ignore - skip, dlq - store rejected messages
158-
# in a dead letter queue
155+
# in a dead letter queue.
159156
# error_handling: dlq
157+
# Dead letter queue max messages per stream.
158+
# dlq_max_messages: 1000
159+
# Data type to use in Redis target database: `hash` for Redis Hash,
160+
# `json` for JSON (which requires the RedisJSON module).
161+
# target_data_type: hash
162+
# Number of processes to use when syncing initial data.
163+
# initial_sync_processes: 4
164+
# Checks if the batch has been written to the replica shard.
165+
# wait_enabled: false
166+
# Timeout in milliseconds when checking write to the replica shard.
167+
# wait_timeout: 1000
168+
# Ensures that a batch has been written to the replica shard and keeps
169+
# retrying if not.
170+
# retry_on_replica_failure: true
171+
# Enable merge as the default strategy to writing JSON documents.
172+
# json_update_strategy: merge
173+
# Use native JSON merge if the target RedisJSON module supports it.
174+
# use_native_json_merge: true
160175
```
161176

162177
## Sections

content/integrate/redis-data-integration/installation/install-vm.md

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,11 +178,27 @@ it without the `noexec` option. See
178178
or your company policy forbids you to install there. You can
179179
select a different directory for the K3s installation using the
180180
`--installation-dir` option with `install.sh`:
181+
```bash
182+
sudo ./install.sh --installation-dir <custom-installation-directory>
183+
```
184+
{{< /note >}}
185+
186+
**Advanced**: You can also pass custom K3s parameters to the installer using the
187+
`INSTALL_K3S_EXEC` environment variable. For example, to set the kubeconfig file
188+
permissions to be readable by all users:
181189

182190
```bash
183-
sudo ./install.sh --installation-dir <custom-installation-directory>
191+
sudo INSTALL_K3S_EXEC='--write-kubeconfig-mode=644' ./install.sh
184192
```
185-
{{< /note >}}
193+
194+
You can combine multiple K3s options in the `INSTALL_K3S_EXEC` variable. See the
195+
[K3s documentation](https://docs.k3s.io/installation/configuration) for a full list of
196+
available options.
197+
198+
{{< warning >}}Only modify K3s parameters if you understand exactly what you are changing
199+
and why. Incorrect K3s configuration can cause RDI installation to fail or result in an
200+
unstable deployment. {{< /warning >}}
201+
186202

187203
The RDI installer collects all necessary configuration details and alerts you to potential issues,
188204
offering options to abort, apply fixes, or provide additional information.

content/integrate/redis-data-integration/reference/config-yaml-reference.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ Configuration settings that control how data is processed, including batch sizes
5353
| **dlq_max_messages**<br/>(DLQ message limit) | `integer`, `string` | Maximum number of messages to store in dead letter queue per stream<br/>Default: `1000`<br/>Pattern: `^\${.*}$`<br/>Minimum: `1`<br/> | |
5454
| **target_data_type**<br/>(Target Redis data type) | `string` | Data type to use in Redis: hash for Redis Hash, json for RedisJSON (requires RedisJSON module)<br/>Default: `"hash"`<br/>Pattern: `^\${.*}$\|hash\|json`<br/> | |
5555
| **json_update_strategy** | `string` | (DEPRECATED)<br/>Property 'json_update_strategy' will be deprecated in future releases. Use 'on_update' job-level property to define the json update strategy.<br/>Default: `"replace"`<br/>Pattern: `^\${.*}$\|replace\|merge`<br/> | |
56+
| **use_native_json_merge**<br/>(Use native JSON merge) | `boolean` | Controls whether to use the native `JSON.MERGE` command (when `true`) or Lua scripts (when `false`) for JSON merge operations. Introduced in RDI 1.15.0. The native command provides 2x performance improvement but handles null values differently:<br/><br/>**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)<br/><br/>**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))<br/><br/>**Note**: The native `JSON.MERGE` command requires RedisJSON 2.6.0 or higher. If the target database has an older version of RedisJSON, RDI will automatically fall back to using Lua-based merge operations regardless of this setting.<br/><br/>**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.<br/>Default: `true`<br/> | |
5657
| **initial_sync_processes** | `integer`, `string` | Number of parallel processes for performing initial data synchronization<br/>Default: `4`<br/>Pattern: `^\${.*}$`<br/>Minimum: `1`<br/>Maximum: `32`<br/> | |
5758
| **idle_sleep_time_ms**<br/>(Idle sleep interval) | `integer`, `string` | Time in milliseconds to sleep between processing batches when idle<br/>Default: `200`<br/>Pattern: `^\${.*}$`<br/>Minimum: `1`<br/>Maximum: `999999`<br/> | |
5859
| **idle_streams_check_interval_ms**<br/>(Idle streams check interval) | `integer`, `string` | Time in milliseconds between checking for new streams when processor is idle<br/>Default: `1000`<br/>Pattern: `^\${.*}$`<br/>Minimum: `1`<br/>Maximum: `999999`<br/> | |
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
---
2+
Title: Redis Data Integration release notes 1.15.0 (October 2025)
3+
alwaysopen: false
4+
categories:
5+
- docs
6+
- operate
7+
- rs
8+
description: |
9+
Flink collector for Spanner enabled by default for improved user experience.
10+
Enhanced high availability with configurable leader election and standby mode.
11+
Support for sharded RDI Redis databases.
12+
Improved configuration validation and monitoring capabilities.
13+
Better resource management and security enhancements.
14+
linkTitle: 1.15.0 (October 2025)
15+
toc: 'true'
16+
weight: 976
17+
---
18+
19+
RDI's mission is to help Redis customers sync Redis Enterprise with live data from their slow disk-based databases to:
20+
21+
- Meet the required speed and scale of read queries and provide an excellent and predictable user experience.
22+
- Save resources and time when building pipelines and coding data transformations.
23+
- Reduce the total cost of ownership by saving money on expensive database read replicas.
24+
25+
RDI keeps the Redis cache up to date with changes in the primary database, using a [_Change Data Capture (CDC)_](https://en.wikipedia.org/wiki/Change_data_capture) mechanism.
26+
It also lets you _transform_ the data from relational tables into convenient and fast data structures that match your app's requirements. You specify the transformations using a configuration system, so no coding is required.
27+
28+
## What's New in 1.15.0
29+
30+
{{<warning>}}
31+
**Breaking change when using JSON with `json_update_strategy: merge`**
32+
33+
RDI now uses the native `JSON.MERGE` command instead of Lua scripts for JSON merge operations. While this provides significant performance improvements (2x faster), there is a **functional difference** in how null values are handled:
34+
35+
- **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)
36+
- **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))
37+
38+
**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.
39+
40+
**Configuration**: You can control this behavior using the `use_native_json_merge` property in the processors section of your configuration. Set it to `false` to revert to the previous Lua-based merge behavior if needed.
41+
{{</warning>}}
42+
43+
- **Native JSON merge for improved performance**: RDI now automatically uses the native `JSON.MERGE` command from RedisJSON 2.6.0+ instead of Lua scripts for JSON merge operations, providing 2x performance improvement. This feature is enabled by default and can be controlled via the `use_native_json_merge` property in the processors section of the configuration. **Note**: If the target Redis database has RedisJSON version lower than 2.6.0, the processor will automatically revert to using the Lua-based merge implementation.
44+
- **Support for sharded Redis databases**: RDI now supports writing to multi-sharded Redis Enterprise databases for the RDI database, resolving cross-slot violations when reading from streams.
45+
- **Enhanced processor performance metrics**: Detailed performance metrics are now exposed through the metrics exporter and statistics endpoint, with separate tracking for transformation time and write time.
46+
- **Resource management improvements**: Collector and processor pods now support configurable resource requests, limits, and node affinity/tolerations for better cluster resource utilization.
47+
- The `collector` defaults to 1 CPU and 1024Mi memory (requests), with limits of 4 CPUs and 4096Mi memory.
48+
- The `processor` defaults to 1 CPU and 512Mi memory (requests), with limits of 4 CPUs and 3072Mi memory.
49+
50+
- **Leadership status monitoring**: New metrics expose leadership status and pipeline phase information for better monitoring of HA deployments.
51+
- The `rdi_operator_is_leader` metric tracks the current leadership status of the operator: `1` indicates the instance is the leader, `0` indicates it is not the leader.
52+
- The `rdi_operator_pipeline_phase` metric tracks the current phase of the pipeline. Phase indicates the current pipeline phase, must be one of `Active`, `Inactive`, `Resetting`, `Pending`, or `Error`.
53+
- **Improved configuration validation**: More rigid validation for `config.yaml` and `jobs.yaml` files helps catch configuration errors earlier in the deployment process.
54+
- **Custom K3s installation options**: The installer now supports passing custom arguments to K3s installation for more flexible on-premises deployments.
55+
- Example: `sudo INSTALL_K3S_EXEC='--write-kubeconfig-mode=644' ./install.sh`
56+
- **Workload Identity authentication**: Added support for Google Cloud Workload Identity authentication to Google Cloud Storage (GCS), eliminating the need for service account JSON files if using GSC-based leader election.
57+
- Exposed new processor performance metrics showing transformation and write times separately
58+
- `{namespace}_processor_process_time_ms_total` - Total time spent in the processor (transform + write)
59+
- `{namespace}_processor_transform_time_ms_total` - Time spent transforming data
60+
- `{namespace}_processor_write_time_ms_total` - Time spent writing data to Redis
61+
- Exposed all existing processor metrics that were only available through the RDI CLI status and the API statistics endpoint.
62+
- Enhanced statistics endpoint with new metrics for transform and process time
63+
64+
### Bug Fixes and Stability Improvements
65+
66+
- **Fixed task reconciliation errors**: Resolved "The ID argument cannot be a complete ID because xadd-id-uniqueness-mode is strict" errors during task reconciliation when using an RDI Redis database with strict XADD id uniqueness mode.
67+
- **Fixed Debezium unavailable values**: Addressed issues where `__debezium_unavailable_value` was appearing in Redis data.
68+
- **Improved operator stability**: Disabled operator webhooks by default to simplify deployments and reduce potential issues.
69+
70+
## Limitations
71+
72+
RDI can write data to a Redis Active-Active database. However, it doesn't support writing data to two or more Active-Active replicas. Writing data from RDI to several Active-Active replicas could easily harm data integrity as RDI is not synchronous with the source database commits.

0 commit comments

Comments
 (0)