01 全票通过!
- github:github.com/Interesting…
- Apache第一个中国产的数据集成平台项目(原名WaterDrop):美国时间 2021 年 12 月 9 日,SeaTunnel (原名 Waterdrop) 正式通过 Apache 软件基金会的投票决议,以全票通过的优秀表现正式成为 Apache 孵化器项目。
02 架构优秀
SeaTunnel 是一个非常易用、高性能、支持实时流式和离线批处理的海量数据集成平台,架构于 Apache Spark 和 Apache Flink 之上,支持海量数据的实时同步与转换
- 使用 Spark、Flink 作为底层数据同步引擎使其具备分布式执行能力,提高数据同步的吞吐性能
- 集成多种能力缩减 Spark、Flink 应用到生产环境的周期与复杂度
- 利用可插拔的插件体系支持超过 100 种数据源
- 引入管理与调度能力做到自动化的数据同步任务管理
- 特定场景做端到端的优化提升数据同步的数据一致性
- 开放插件化与 API 集成能力帮助企业实现快速定制与集成
工作流程:Input[数据源输入] -> Filter[数据处理] -> Output[结果输出]
- 一站式解决方案,Flink&Spark一起用
- 让Spark用起来更简单(图片from Elastic中文社区)
03 应用场景
- 海量数据同步
- 海量数据集成
- 海量数据的 ETL
- 海量数据聚合
- 多源数据处理
04 生产应用案例
- 微博, 增值业务部数据平台 微博某业务有数百个实时流式计算任务使用内部定制版 SeaTunnel,以及其子项目Guardian 做 seatunnel On Yarn 的任务监控。
- 新浪, 大数据运维分析平台 新浪运维数据分析平台使用 SeaTunnel 为新浪新闻,CDN 等服务做运维大数据的实时和离线分析,并写入 Clickhouse。
- 搜狗 ,搜狗奇点系统 搜狗奇点系统使用 SeaTunnel 作为 ETL 工具, 帮助建立实时数仓体系
- 趣头条 ,趣头条数据中心 趣头条数据中心,使用 SeaTunnel 支撑 mysql to hive 的离线 ETL 任务、实时 hive to clickhouse 的 backfill 技术支撑,很好的 cover 离线、实时大部分任务场景。
- 一下科技, 一直播数据平台
- 永辉超市子公司-永辉云创,会员电商数据分析平台 SeaTunnel 为永辉云创旗下新零售品牌永辉生活提供电商用户行为数据实时流式与离线 SQL 计算。
- 水滴筹, 数据平台 水滴筹在 Yarn 上使用 SeaTunnel 做实时流式以及定时的离线批处理,每天处理 3~4T 的数据量,最终将数据写入 Clickhouse。
05 快速开始
我们以一个通过socket接收数据,将数据分割为多个字段,并输出处理结果的应用为例,快速展示seatunnel的使用方法。
Step 1: 准备Spark 运行环境
如果你熟悉Spark或者已准备好Spark运行环境,可忽略此步骤,Spark不需要做任何特殊配置。
请先下载Spark, Spark版本请选择 >= 2.x.x。下载解压后,不需要做任何配置即可提交Spark deploy-mode = local模式的任务。 如果你期望任务运行在Standalone集群或者Yarn、Mesos集群上,请参考Spark官网的Spark部署文档。
Step 2: 下载 seatunnel
进入seatunnel安装包下载页面,下载最新版seatunnel-<version>.zip
或者直接下载指定版本(以1.1.2为例):
wget https://github.com/InterestingLab/seatunnel/releases/download/v1.1.2/seatunnel-1.1.2.zip -O seatunnel-1.1.2.zip
下载后,解压:
unzip seatunnel-<version>.zip
ln -s seatunnel-<version> seatunnel
Step 3: 配置 seatunnel
编辑 config/seatunnel-env.sh, 指定必须环境配置如SPARK_HOME(Step 1 中Spark下载并解压后的目录)
编辑 config/application.conf, 它决定了seatunnel启动后,数据输入,处理,输出的方式和逻辑。
spark {
# seatunnel defined streaming batch duration in seconds
spark.streaming.batchDuration = 5
spark.app.name = "seatunnel"
spark.ui.port = 13000
}
input {
socketStream {}
}
filter {
split {
fields = ["msg", "name"]
delimiter = ","
}
}
output {
stdout {}
}
Step 4: 启动netcat server用于发送数据
nc -l -p 9999
Step 5: 启动seatunnel
cd seatunnel
./bin/start-seatunnel.sh --master local[4] --deploy-mode client --config ./config/application.conf
Step 6: 在nc端输入
Hello World, Gary
seatunnel日志打印出:
+-----------------+-----------+----+
|raw_message |msg |name|
+-----------------+-----------+----+
|Hello World, Gary|Hello World|Gary|
+-----------------+-----------+----+
总结
seatunnel简单易用,还有更丰富的数据处理功能等待被发现。本文展示的数据处理案例, 无需任何代码、编译、打包,比官方的Quick Example更简单。
如果想了解更多的seatunnel配置示例可参见:
以上配置为默认【流式处理配置模版】,可直接运行,命令如下:
cd seatunnel
./bin/start-seatunnel.sh --master local[4] --deploy-mode client --config ./config/streaming.conf.template
以上配置为默认【离线批处理配置模版】,可直接运行,命令如下:
cd seatunnel
./bin/start-seatunnel.sh --master local[4] --deploy-mode client --config ./config/batch.conf.template
配置示例3 : Structured Streaming 流式处理
以上配置为默认【Structured Streaming 配置模版】,需配置Kafka输入源后运行,命令如下:
cd seatunnel
./bin/start-seatunnel-structured-streaming.sh --master local[4] --deploy-mode client --config ./config/batch.conf.template
source:[github document](介绍 (interestinglab.github.io))