Apache IoTDB(18):IoTDB时序数据库的数据同步之Pipe机制与插件同步指南

引言

进入工业物联网(IIoT)时代,如何把海量时序数据用起来、挖出新价值,已经成为企业推进数字化转型的关键一环。以后产生的数据规模会持续激增。在这样的背景下,怎样在多集群、跨地域的场景下实现数据高效、稳定同步,也就成了必须解决的难题。

Apache IoTDB 是一款专门面向时序数据场景打造的开源数据库,它自带的 Pipe 数据同步功能,采用 "抽取 - 处理 - 发送" 三段式设计,能够以毫秒级的延迟完成数据复制和灾备,很好地应对了跨节点、跨区域的数据同步需求。

Apache IoTDB 时序数据库【系列篇章】

No. 文章地址(点击进入)
1 Apache IoTDB(1):时序数据库介绍与单机版安装部署指南
2 Apache IoTDB(2):时序数据库 IoTDB 集群安装部署的技术优势与适用场景分析
3 Apache IoTDB(3):时序数据库 IoTDB Docker部署从单机到集群的全场景部署与实践指南
4 Apache IoTDB(4):深度解析时序数据库 IoTDB 在Kubernetes 集群中的部署与实践指南
5 Apache IoTDB(5):深度解析时序数据库 IoTDB 中 AINode 工具的部署与实践
6 Apache IoTDB(6):深入解析数据库管理操作------增删改查与异构数据库实战指南
7 Apache IoTDB(7):设备模板管理------工业物联网元数据标准化的破局之道
8 Apache IoTDB(8):时间序列管理------从创建到分析的实战指南
9 Apache IoTDB(9):数据库操作------数据写入从CLI到集群部署的六种实战
10 Apache IoTDB(10):数据库操作------从查询到优化的全链路实践指南
11 Apache IoTDB(11):分段聚合深度解析------从原理到实战的完整指南
12 Apache IoTDB(12):深度解析时序数据聚合的GROUP BY与HAVING子句
13 Apache IoTDB(13):数据处理的双刃剑------FILL空值填充与LIMIT/SLIMIT分页查询实战指南
14 Apache IoTDB(14):IoTDB结果集排序与查询对齐模式------ORDER BY与ALIGN BY DEVICE使用
15 Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析------从语法到实战的ETL全链路指南
16 Apache IoTDB(16):数据删除从单点精准清除到企业级数据生命周期管理
17 Apache IoTDB(17):IoTDB数据保留时间管理从TTL设置到智能数据控制

本文将从Pipe机制的工作原理,讲解IoTDB数据同步的全流程操作。涵盖功能概述、任务管理、插件扩展,友友们可参考并构建高可靠、低延迟的时序数据同步链路。

1. 功能概述

1.1 Pipe三阶段架构

一个数据同步任务包含 3 个阶段:

抽取(Source)阶段:该部分用于从源 IoTDB 抽取数据,在 SQL 语句中的 source 部分定义

处理(Process)阶段:该部分用于处理从源 IoTDB 抽取出的数据,在 SQL 语句中的 processor 部分定义

发送(Sink)阶段:该部分用于向目标 IoTDB 发送数据,在 SQL 语句中的 sink 部分定义

通过 SQL 语句声明式地配置 3 个部分的具体内容,可实现灵活的数据同步能力。目前数据同步支持以下信息的同步,您可以在创建同步任务时对同步范围进行选择(默认选择 data.insert,即同步新写入的数据)

1.2 功能限制

元数据(schema)、权限(auth)同步功能存在如下限制:

  1. 使用元数据同步时,要求Schema region、ConfigNode 的共识协议必须为默认的 ratis 协议,即iotdb-system.properties配置文件中是否包含config_node_consensus_protocol_class=org.apache.iotdb.consensus.ratis.RatisConsensus、schema_region_consensus_protocol_class=org.apache.iotdb.consensus.ratis.RatisConsensus,不包含即为默认值ratis 协议。

  2. 为了防止潜在的冲突,请在开启元数据同步时关闭接收端自动创建元数据功能。可通过修改 iotdb-system.properties配置文件中的enable_auto_create_schema配置项为 false,关闭元数据自动创建功能。

  3. 开启元数据同步时,不支持使用自定义插件。

  4. 在进行数据同步任务时,请避免执行任何删除操作,防止两端状态不一致。

2. 创建任务

数据同步任务有三种状态:RUNNING、STOPPED 和 DROPPED

任务状态转换图:

创建后任务会直接启动,同时当任务发生异常停止后,系统会自动尝试重启任务。

使用 CREATE PIPE 语句来创建一条数据同步任务,下列属性中PipeId和sink必填,source和processor为选填项,输入 SQL 时注意 SOURCE与 SINK 插件顺序不能替换。

示例:

sql 复制代码
CREATE PIPE [IF NOT EXISTS] <PipeId> -- PipeId 是能够唯一标定任务的名字
-- 数据抽取插件,可选插件
WITH SOURCE (
  [<parameter> = <value>,],
)
-- 数据处理插件,可选插件
WITH PROCESSOR (
  [<parameter> = <value>,],
)
-- 数据连接插件,必填插件
WITH SINK (
  [<parameter> = <value>,],
)

IF NOT EXISTS 语义:用于创建操作中,确保当指定 Pipe 不存在时,执行创建命令,防止因尝试创建已存在的 Pipe 而导致报错。

注意:V2.0.8-beta 起,创建一个全量数据同步 Pipe (例如 Pipeid : alldatapipe)时,系统会自动将其拆分为两个独立的 Pipe:

历史 Pipe:PipeId 为原名称加 _history后缀(如 alldatapipe_history),source 参数默认携带 'realtime.enable'='false', 'inclusion'='data.insert', 'inclusion.exclusion'=''

实时 Pipe:PipeId 为原名称加 _realtime后缀(如 alldatapipe_realtime),source 参数默认携带 'history.enable'='false' ,若配置了元数据同步,则由实时 Pipe 负责发送

创建成功后,原 PipeId(如 alldatapipe)将不再作为有效标识符。在进行启动、停止、删除、查看等任务操作时,必须使用拆分后的独立 PipeId(即 *_history或 *_realtime)

3. 开始与停止任务

语法

sql 复制代码
START PIPE<PipeId>

示例

启动任务,使用START PIPE语句手动启动任务

sql 复制代码
START PIPE Beijing_To_Shanghai;

停止任务,使用STOP PIPE语句暂停任务

sql 复制代码
STOP PIPE Beijing_To_Shanghai;

状态监控

使用SHOW PIPES命令查看所有任务

sql 复制代码
SHOW PIPES;

结果

text 复制代码
+---------------------+---------+---------------------+---------------------+
| PipeName            | Status  | CreateTime          | LastActiveTime      |
+---------------------+---------+---------------------+---------------------+
| Beijing_To_Shanghai | RUNNING | 2025-09-27 08:30:00 | 2025-09-27 08:35:22 |
+---------------------+---------+---------------------+---------------------+

如果需要查看特定任务,使用SHOW PIPE语句获取信息

sql 复制代码
SHOW PIPE Beijing_To_Shanghai;

4. 删除和查看任务

4.1 删除任务

语法

sql 复制代码
DROP PIPE [IF EXISTS] <PipeId>

示例

删除任务,使用DROP PIPE语句删除任务

sql 复制代码
DROP PIPE IF EXISTS Beijing_To_Shanghai;

强制清理,使用CLEAN_EXPIRED_DATA清理过期数据

sql 复制代码
CALL CLEAN_EXPIRED_DATA();

IF EXISTS 语义:用于删除操作中,确保当指定 Pipe 存在时,执行删除命令,防止因尝试删除不存在的 Pipe 而导致报错。

删除任务不需要先停止同步任务。

4.1 删除任务

语法

查看所有任务

sql 复制代码
SHOW PIPES

查看指定任务

sql 复制代码
SHOW PIPE <PipeId>

结果示例

text 复制代码
+--------------------------------+-----------------------+-------+----------+-------------+-----------------------------------------------------------+----------------+-------------------+-------------------------+
|                              ID|           CreationTime|  State|PipeSource|PipeProcessor|                                                   PipeSink|ExceptionMessage|RemainingEventCount|EstimatedRemainingSeconds|
+--------------------------------+-----------------------+-------+----------+-------------+-----------------------------------------------------------+----------------+-------------------+-------------------------+
|59abf95db892428b9d01c5fa318014ea|2024-06-17T14:03:44.189|RUNNING|        {}|           {}|{sink=iotdb-thrift-sink, sink.ip=127.0.0.1, sink.port=6668}|                |                128|                     1.03|
+--------------------------------+-----------------------+-------+----------+-------------+-----------------------------------------------------------+----------------+-------------------+-------------------------+

其中每个列含义如下:

ID:同步任务的唯一标识符

CreationTime:同步任务的创建的时间

State:同步任务的状态

PipeSource:同步数据流的来源

PipeProcessor:同步数据流在传输过程中的处理逻辑

PipeSink:同步数据流的目的地

ExceptionMessage:显示同步任务的异常信息

RemainingEventCount(统计存在延迟):剩余 event 数,当前数据同步任务中的所有 event 总数,包括数据和元数据同步的 event,以及系统和用户自定义的 event

EstimatedRemainingSeconds(统计存在延迟):剩余时间,基于当前 event 个数和 pipe 处速率,预估完成传输的剩余时间

5. 插件同步

了使得整体架构更加灵活以匹配不同的同步场景需求,支持在同步任务框架中进行插件组装。系统预置了一些常用插件可直接使用,同时也可以自定义 processor 插件 和 Sink 插件,并加载至 IoTDB 系统进行使用

查看系统中的插件(含自定义与内置插件)的语句

sql 复制代码
SHOW PIPEPLUGINS

结果

text 复制代码
IoTDB> SHOW PIPEPLUGINS
+------------------------------+----------+--------------------------------------------------------------------------------------------------+----------------------------------------------------+
|                    PluginName|PluginType|                                                                                         ClassName|                                           PluginJar|
+------------------------------+----------+--------------------------------------------------------------------------------------------------+----------------------------------------------------+
|          DO-NOTHING-PROCESSOR|   Builtin|               org.apache.iotdb.commons.pipe.plugin.builtin.processor.donothing.DoNothingProcessor|                                                    |
|               DO-NOTHING-SINK|   Builtin|               org.apache.iotdb.commons.pipe.plugin.builtin.connector.donothing.DoNothingConnector|                                                    |
|                  IOTDB-SOURCE|   Builtin|                       org.apache.iotdb.commons.pipe.plugin.builtin.extractor.iotdb.IoTDBExtractor|                                                    |
|             IOTDB-THRIFT-SINK|   Builtin|          org.apache.iotdb.commons.pipe.plugin.builtin.connector.iotdb.thrift.IoTDBThriftConnector|                                                    |
|         IOTDB-THRIFT-SSL-SINK|   Builtin|       org.apache.iotdb.commons.pipe.plugin.builtin.connector.iotdb.thrift.IoTDBThriftSslConnector|                                                    |
+------------------------------+----------+--------------------------------------------------------------------------------------------------+----------------------------------------------------+

预置插件详细介绍

总结

Apache IoTDB的Pipe数据同步机制通过三阶段架构实现了高效、可靠的数据复制能力。从基本配置到高级调优,从单机部署到云边协同,本文详细解析了数据同步的全流程操作。通过六大实战案例与最佳实践,帮助读者构建高可用、低延迟的时序数据同步链路。

随着物联网技术的不断发展,IoTDB将持续演进,提供更加智能、高效的数据管理能力。通过持续关注IoTDB的最新发展,企业可以始终保持在时序数据管理领域的技术领先地位,实现数字化转型的深度需求。

相关推荐
颜颜yan_1 小时前
告别“子查询性能陷阱“:金仓数据库智能下推优化器的设计与实测
数据库·oracle
sdanss1 小时前
MySQL——表的约束
数据库·mysql
吾诺1 小时前
MySQL远程连接错误解决:“Host is not allowed to connect to this MySQL server”详解
数据库·mysql
耶叶1 小时前
Android开发:用户注册和登录的数据库代码详细解释
android·数据库·kotlin
xuansec2 小时前
【PortSwigger】SQL注入第一题:WHERE 子句注入漏洞利用 —— 检索隐藏数据
数据库·sql
艾莉丝努力练剑2 小时前
【MYSQL】MYSQL学习的一大重点:MYSQL数据类型
android·linux·数据库·人工智能·学习·mysql·网络安全
惶了个恐2 小时前
Linux系统编程第十弹——sqlite3
数据库
c++之路2 小时前
Ubuntu 22.04 完整安装与配置指南(VMware + 系统优化 + 开发环境)
linux·数据库·ubuntu
pangares2 小时前
MySQL中between and的基本用法
android·数据库·mysql