采集架构
了解 RDI 摄取的主要组件
概述
RDI 实现了变更数据捕获(CDC) 模式,该模式可跟踪非 Redis源数据库中数据的更改并对 Redis目标数据库进行相应的更改 。您可以将目标用作缓存来提高性能,因为它处理读取查询的速度通常比源快得多。
要使用 RDI,您需要定义一个数据集,该数据集指定要从源捕获哪些数据项以及如何在目标中表示它们。例如,如果源是关系数据库,则您可以指定要捕获哪些表列,但无需将它们存储在目标中的等效表结构中。这意味着您可以选择最适合您的应用的目标表示形式。要从源转换为目标表示形式,RDI 会 在捕获后对数据应用转换。
RDI 使用数据管道在源和目标之间同步数据集,该数据管道按顺序实现几个处理步骤:
-
CDC收集器捕获对源数据库的更改。RDI 目前使用名为Debezium的开源收集器 来执行此步骤。
-
收集器使用 RDI 数据库中的 Redis 流记录捕获的变化。
-
流处理器从流中读取数据并应用您定义的任何转换(如果您不需要任何自定义转换,则它使用默认值)。然后它将数据写入目标数据库,供您的应用使用。
请注意,RDI 控制进程在保存目标数据库的 Redis Enterprise 集群之外的专用虚拟机 (VM) 上运行。但是,RDI 将其状态和配置数据以及更改数据流保存在与目标位于同一集群上的 Redis 数据库中。下图显示了管道步骤以及数据从源到目标的路径:
首次启动 RDI 时,目标数据库为空,因此源数据库中的所有数据本质上都是“更改”数据。RDI 在称为初始缓存加载的阶段收集这些数据,该阶段可能需要几分钟或几小时才能完成,具体取决于源数据的大小。初始缓存加载完成后,目标中会有一个快照数据集,当从源捕获新数据时,该数据集将逐渐更改。此时,RDI 自动进入第二阶段,称为更改流,在此阶段,数据发生变化时会实时捕获。更改通常会在捕获后的几秒钟内添加到目标中。
背压机制
有时,数据记录添加到流中的速度可能比 RDI 处理它们的速度快。如果目标速度变慢或断开连接,或者源快速生成大量更改数据,就会发生这种情况。如果这种情况持续下去,那么流最终将占用所有可用内存。当 RDI 检测到这种情况时,它会应用 背压机制来减慢或停止传入数据的流动。更改数据将保留在源处,直到 RDI 清除积压并有足够的可用内存来恢复流式传输。
支持的来源
RDI 使用Debezium Server连接器支持以下数据库源:
数据库 | 版本 |
---|---|
甲骨文 | 12c、19c、21c |
玛拉雅数据库 | >= 10.5 |
MySQL | 5.7、8.0.x |
Postgres | 10、11、12、13、14、15 |
SQL 服务器 | 2017 年、2019 年 |
谷歌云 SQL MySQL | 8.0 |
谷歌云 SQL Postgres | 15 |
Google Cloud SQL SQL 服务器 | 2019 |
适用于 PostgreSQL 的 Google Cloud AlloyDB |
如何部署 RDI
RDI 设计有两个平面来提供服务。控制平面包含使 RDI 保持活动状态的进程。它包括:
- 一个操作进程,负责调度 CDC 收集器和流处理器,以实现管道生命周期的两个阶段(初始缓存加载和更改流)
- 用于提供有关 RDI 指标的Prometheus端点
- 用于控制 VM 的 REST API。
管理平面提供可让您与控制平面交互的工具。使用 CLI 工具安装和管理 RDI 以及部署和管理管道。使用管道编辑器(包含在 Redis Insight 中)设计或编辑管道。下图显示了控制平面和管理平面的组件以及它们之间的连接:
以下部分介绍了可用于部署 RDI 的 VM 配置。
您自己的虚拟机上的 RDI
对于此部署,您必须提供两个虚拟机。收集器和流处理器在一个虚拟机上处于活动状态,而另一个处于备用状态以提供高可用性。操作员在两个虚拟机上运行,并使用算法来确定哪个是活动的虚拟机(“领导者”)。活动虚拟机和备用虚拟机都需要访问 RDI 用于加密网络流量的身份验证机密。下图显示了此配置:
Kubernetes 上的 RDI
您可以在自己的 Kubernetes 集群上的命名空间中运行 RDI,并为每个控制平面组件(REST API、操作员和指标导出器)单独部署。当您从 CLI 工具启动管道时,操作员会为收集器和流处理器创建和配置部署。这意味着您必须为操作员提供一个有权在命名空间中创建和操作 Pod 的服务帐户。
机密和安全注意事项Secrets and security concerns
RDI 使用TLS或 mTLS加密所有网络连接 。连接的凭据将保存为机密,您可以选择如何将这些机密提供给 RDI。请注意,RDI 将所有状态和配置数据存储在 Redis Enterprise 集群内,不会将任何其他数据存储在您的 RDI VM 上或集群外的任何其他地方。