数据发布订阅
KaiwuDB 提供开箱即用的数据发布订阅功能,旨在实现集群间的数据实时同步。发布订阅基于逻辑复制实现,其中一个运行中的订阅者只能订阅一个发布者节点上的一个发布。订阅者从它们订阅的发布拉取数据。发布者上的更改会被实时发送给订阅者。订阅者以与发布者相同的顺序应用那些数据。
使用限制
- 不支持将已发布的表设置为订阅目标表,也不支持再次发布已订阅的表。
- 不支持发布订阅 DELETE、UPDATE、DDL 语句产生的数据。
- 当目标数据库或者时序表中存在发布时,不允许任何的 DDL 操作。
- 如果发布对象为单个数据库或者多个时序表,不支持指定列和过滤条件,也不支持修改发布订阅对象。
- 过滤条件不能包含聚合函数、类型转换、排序规则、系统列引用或非不可变内置函数。
- 数据复制不支持应用数据去重规则。
- 发布订阅过程中复制的数据,写入订阅示例后,支持再次被捕获。
- 禁止连续或双向衔接发布订阅。
- 不支持分布式集群高可用。
- 在分布式场景下,对发布端或订阅端进行集群扩缩容、停机升级等操作时,用户需要先停止订阅,然后再进行相关操作。操作完成后,用户需要重启订阅,以实现继续订阅发布。
- 订阅端和发布端采用异步执行方式。一个发布只能有一个运行中的订阅。确保发布不存在正在运行的订阅后,方可启动该发布对应的订阅。
功能特性
下表列出 KaiwuDB 支持的数据发布订阅特性。
特性 | 说明 |
---|---|
发布订阅对象 | - 单个时序库:支持发布订阅单个时序库中的所有表。不支持指定表中的列。发布订阅双方包含的表的结构需要保持一致。在发布端收到订阅时,不支持增加或删除库里的表。 - 单个时序表:支持发布订阅全部列或部分列,包括标签列和数据列。发布订阅部分列时,订阅端的表必须包含指定列。 - 多个时序表:支持发布订阅全部列。不支持指定表中的列。发布订阅双方包含的表的结构需要保持一致。 - 订阅目标表只支持时序表,不支持删除表或修改表结构。 |
发布订阅数据来源 | - 实时数据:开启订阅后,用户使用 INSERT 语句写入的实时数据。- 历史数据:开启订阅前,数据库中已有的数据。 |
发布订阅的同步方式 | - 批量同步:指定周期进行数据同步。目前,数据同步周期设置为 2 秒。 - 准实时同步复制:将符合条件的数据立即同步到目标端。 |
发布订阅的过滤条件 | - 支持基于时序表时间戳列的条件过滤。 - 支持 Primary Tag、普通 Tag 列和数据列的过滤。 - 当发布对象为多个时序表或单个时序库时,不支持设置过滤条件。 |
发布订阅支持的 SQL 操作 | INSERT |
发布订阅任务管理 | - 支持启动和停止发布订阅服务。 - 支持重新启动发布订阅服务时,从中断位置续传可能存在的“未推送数据”。 - 支持查看目前正在运行的发布订阅任务,包含任务名称、任务的创建时间、创建者、任务当前状态、开始执行时间、结束时间、失败执行时间、失败原因等。 - 支持删除指定的发布订阅任务。 |
断点续传 | 支持断点续传。如果用户停止或意外停止数据复制,恢复或重启发布订阅后,系统会继续复制未成功复制的数据。 |
支持的应用场景 | - 分布式场景下的扩缩容、停机升级操作。 - 云边端应用场景。 |