数据发布订阅
KaiwuDB 提供开箱即用的数据发布订阅功能,旨在实现集群间的数据实时同步。发布订阅基于逻辑复制实现,其中一个运行中的订阅者只能订阅一个发布者节点上的一个发布。订阅者从它们订阅的发布拉取数据。发布者上的更改会被实时发送给订阅者。订阅者以与发布者相同的顺序应用那些数据。
使用限制
- 不支持将已发布的表设置为订阅目标表,也不支持再次发布已订阅的表。不支持发布订阅 DDL 语句产生的数据。禁止连续或双向衔接发布订阅。
- 当目标数据库或者时序表中存在发布时,不允许任何的 DDL 操作。如果发布对象为单个数据库或者多个时序表,不支持指定列和过滤条件,也不支持修改发布订阅对象。过滤条件不能包含聚合函数、类型转换、排序规则、系统列引用或非不可变内置函数。数据复制不支持应用数据去重规则。用户可以在订阅端设置
override数据去重规则来进行数据去重。 - 订阅端和发布端采用异步执行方式。一个发布只能有一个运行中的订阅。确保发布不存在正在运行的订阅后,方可启动该发布对应的订阅。发布订阅过程中复制的数据,写入订阅示例后,支持再次被捕获。在多节点并行数据同步场景下,由于并发传输可能导致同步操作到达目标端的顺序与源端不一致,因此不建议并发执行存在顺序依赖的同步操作。如需执行存在顺序依赖的同步操作,请在同一会话内完成相关操作。
- 不支持备份还原操作。如有需要,请用户在源端与目标端分别自行执行备份还原操作。
- 如果客户端主动取消订阅任务或由于连接中断导致订阅任务终止,系统无法保证该操作是否已落盘或完成同步操作。
- 在集群高可用环境下,新扩容的节点在与业务建立连接之前,新节点 CDC 所在的表操作将处于阻塞状态。
- 创建订阅后,需等待约 2-5 秒完成订阅端与发布端的连接,之后方可正常接收数据。若连接未完全建立即开始数据发布,可能导致部分数据订阅丢失。在发布端数据压力较低的情况下,数据从发布到订阅端一般可在 10 秒左右完成同步。
功能特性
下表列出 KaiwuDB 支持的数据发布订阅特性。
| 特性 | 说明 |
|---|---|
| 发布订阅对象 | - 单个时序库:支持发布订阅单个时序库中的所有表。不支持指定表中的列。发布订阅双方包含的表的结构需要保持一致。在发布端收到订阅时,不支持增加或删除库里的表。 - 单个时序表:支持发布订阅全部列或部分列,包括标签列和数据列。发布订阅部分列时,订阅端的表必须包含指定列。 - 多个时序表:支持发布订阅全部列。不支持指定表中的列。发布订阅双方包含的表的结构需要保持一致。 - 订阅目标表只支持时序表,不支持删除表或修改表结构。 |
| 发布订阅数据来源 | 实时数据:开启订阅后,用户使用 INSERT、DELETE、UPDATE 语句写入、删除、更新的数据。当 DELETE 或 UPDATE 操作的返回结果是 0 行时,系统不会进行发布。历史数据 - 乱序插入数据库中的数据。 - 开启订阅前,数据库中已有的数据。开启订阅后,系统将分批发布这些数据。 - 用户通过 IMPORT、INSERT INTO ... SELECT 语句导入的数据。说明 不支持数据库级别的导入。 |
| 发布订阅的同步方式 | - 批量同步:指定周期进行数据同步。目前,数据同步周期设置为 2 秒。 - 准实时同步复制:将符合条件的数据立即同步到目标端。 |
| 发布订阅的过滤条件 | - 支持基于时序表时间戳列的条件过滤。 - 支持 Primary Tag、普通 Tag 列和数据列的过滤。 - 当发布对象为多个时序表或单个时序库时,不支持设置过滤条件。 |
| 发布订阅支持的 SQL 操作 | - INSERT - DELETE:支持同步数据列和普通 Tag 列的 DELETE 操作。在发布任务执行过程中,如果发布端执行 DELETE 操作,该操作将被实时同步至订阅端。对于在发布任务暂停期间发生的 DELETE 操作,系统也会在任务恢复后继续同步到订阅端,确保发布订阅端数据一致性。- UPDATE:支持同步数据列和普通 Tag 列的 UPDATE 操作。对于数据列,如果目标端配置去重策略,则在目标端进行去重更新。在发布任务执行过程中,如果发布端执行 UPDATE 操作,该操作将被实时同步至订阅端。对于在发布任务暂停期间发生的 UPDATE 操作,系统也会在任务恢复后继续同步到订阅端,确保发布订阅端数据一致性。说明 目前,KaiwuDB 只支持根据 Primary Tag 删除数据或者更新 Tag 值。 |
| 发布订阅任务管理 | - 支持启动和停止发布订阅服务。 - 支持重新启动发布订阅服务时,从中断位置续传可能存在的“未推送数据”。 - 支持查看目前正在运行的发布订阅任务,包含任务名称、任务的创建时间、创建者、任务当前状态、开始执行时间、结束时间、失败执行时间、失败原因等。 - 支持删除指定的发布订阅任务。 |
| 断点续传 | 支持断点续传。如果用户停止或意外停止数据复制,恢复或重启发布订阅后,系统会继续复制未成功复制的数据。 说明 断点续传机制基于源表的最终状态进行数据同步,因此同步的是数据的最终结果,而非完整的操作过程。 |
| 支持的应用场景 | - 分布式场景下的扩缩容、停机升级操作。 - 云边端应用场景。 |
| 高可用 | - 发布集群节点异常处理:当运行的发布集群实例节点发生宕机、重启或扩缩容时,若订阅任务连接的是该集群下的非故障节点,则发布端正常发布数据。若订阅任务连接的是该集群下的故障节点,订阅端会通过自动重试机制重新发现并连接发布端。在设定的重试期间内,若订阅端成功连接发布端,系统自动恢复数据发布任务,并基于任务停止前记录的数据复制标识继续发布数据。 - 发布集群主备切换:当发布集群发生主备切换后,用户需要手动启动数据发布服务。启动后,发布端的新主节点(原备节点)会接管原主节点上的所有发布任务。订阅端会通过自动重试机制重新发现并连接发布端的新主节点,从而恢复数据订阅任务。 - 订阅集群节点异常处理:当运行的订阅集群实例节点发生宕机、重启或扩缩容时,系统自动恢复数据订阅任务,并基于任务停止前记录的数据复制标识继续订阅数据。 - 订阅集群主备切换:当订阅集群发生主备切换后,订阅端的新主节点(原备节点)手动接管原主节点上的所有数据订阅任务,并基于切换前已记录的复制标识继续订阅数据。 |