点亮 ⭐️ Star · 照亮开源之路
https://github.com/apache/incubator-seatunnel

Meetup 10/15
Apache IoTDB(物联网数据库)是一体化收集、存储、管理与分析物联网时序数据的软件系统,可以满足工业物联网领域的海量数据存储、高速数据读取和复杂数据分析需求。目前,SeaTunnel 已经支持 IoTDB Connector,实现了物联网领域数据同步场景接通。
在今年 10 月份 SeaTunnel 社区线上见面会上,SeaTunnel Committer 王海林 为大家介绍了 SeaTunnel 接入 IoTDB 的实现过程,让用户更深刻地理解 IoTDB 数据同步的操作方法和原理。
01
SeaTunnel 基本概念介绍

左侧简单罗列了 Source 的场景,比如我们抽象了 Source 的 API,Type 和 State,来读取数据源,把各种数据源的数据类型统一到在其定义的抽象类型上,并读取过程中的一些状态恢复和读取位置的保留。
这是对于 Source 的抽象,对于 Sink 我们也做了类似的抽象,即如何写入数据,以及数据类型如何匹配到真实的数据源类型,以及状态的恢复和保留。
基于这些API,我们会有一个 translation 层把这些API翻译到对应的执行引擎上。目前 SeaTunnel 支持三个执行引擎,Spark,Flink,以及即将发布的自研执行引擎 SeaTunnel Engine。
这大致就是 SeaTunnel 所做的事。SeaTunnel 做数据同步依赖 Source 和 Sink 读取和写入数据,我们把它们叫做Connector 连接器。连接器由 Source 和 Sink 组成。

从上图我们看到不同的数据源,Source 负责从各种数据源中读取数据,将其转化成SeaTunnelRow 抽象层(匹配 SeaTunnel 定义的数据类型),Sink 负责从抽象层上拉取数据,写到具体的数据存储上,转化成存储具体的格式。
通过 Source +抽象层+Sink 这样的组合,就能够完成多种异构数据源之间数据的搬运同步。
下面我用一个简单的实例说明一下 SeaTunnel 的 Source 和 Sink 如何运转。




这是目前 SeaTunnel 已经支持的 Connector 生态,比如 JBDC 支持的数据源,HDFS, Hive, Pulsar,消息队列等目前都有支持。
图中所列并不是 SeaTunnel 支持 Connector 的全部,GitHub SeaTunnel 项目下可以看到插件目录,支持的 Connector 插件在不断增加,在这里可以实时看到最新的接入情况。
02
IoTDB Connector 功能特性

数据类型只有 Victor 不支持,其他的都支持。
关于并行读取这一块,IoTDB 数据中实际上是有时间戳的,我们用时间戳划分范围来实现并行读取。
状态的恢复,因为我们对读取的时间范围划分了不同的 split,所以可以根据 Split 位置信息进行恢复。

03
IoTDB数据读取解析

Vector 类型目前还没有支持。



刚刚大家其实看到了,我们SQL里面没有查time这个列,但实际查出结果是有这个列的,所以我们这投影是支持对 time列的字段进行投影的,Time 列实际上可以投影成不同的数据类型,用户可以根据自己的需要来进行转换。上图为实现逻辑。

SeaTunnel支持 align by device语法,这样就可以把 device列也投影到 SeaTunnelRow上。

切分 Split
分配 Split 给读取 reader





04
IoTDB Connector 数据写入解析



举例来说,假设在 SeaTunnel 读取上图所示的数据格式的 row 的结构,可以通过配置同步到IoTDB 中,获得的结果如下:


05
IoTDB Connector 使用示例
并行读取,输出到 Console 并行度:2 批次数:24 时间范围:2022-09-25 ~ 2022-09-26

读取数据库,批量写入到 IoTDB 批量写:每 1024 条或每 1000 ms 提交一次 提取元数据 device、timestamp、measurement 指定存储组:root.test_group

在 Sink 端主要是要指定 device 列的 Key,比如从哪些数据中提取 device,时间是从哪一个类提取,要写哪些列到 IoTDB 中等。
可以看到,我们可以配置 storage group,也就是 IoTDB 的存储组,可以通过storage group 指定存储组。

06
如何参与社区贡献
支持读写 vector 数据类型读和写 支持 tsfile 读写 支持写 tsfile 再 load 到 IoTDB
这是我们计划的 SeaTunnel Connector 接入 issue,上面有列出来功能列表以及待实现的 connector,大家感兴趣的话可以领取任务做贡献。
寻找你感兴趣的 issue: https://github.com/apache/incubator-seatunnel/issues/2828 https://github.com/apache/incubator-seatunnel/issues/1946 https://github.com/apache/incubator-seatunnel/issues?q=is:open+is:issue+label:"help+wanted"
参考贡献指南 https://github.com/apache/incubator-seatunnel/issues/2828 https://github.com/apache/incubator-seatunnel/pull/2995【贡献指南】 https://github.com/apache/incubator-seatunnel/blob/dev/docs/en/contribution/setup.md 【编译指南】
新手教程 https://mp.weixin.qq.com/s/evYRsrpPb-MXEm4DqLdnvQ【SeaTunnel 连接器极简开发流程】 https://mp.weixin.qq.com/s/8ivksAePmVZe2_2ldGi0AA 【新 API Connector 开发解析】 https://mp.weixin.qq.com/s/qpO2SVRl9KAY-Ib2kaTDig 【Source 与 Sink API 设计解析】
参与讨论 & 寻求帮助 在邮件列表、Slack 中讨论 通过微信群沟通(如果没有加入请关注 SeaTunnel 公众号入群) 参与 PR Review 发表你的见解

Apache SeaTunnel

往期推荐
SeaTunnel 2.3.0-beta 重磅更新,自研同步引擎 SeaTunnel Engine 发布并支持更多连接器!
点击“阅读原文”参与开源

文章转载自SeaTunnel,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




