SeaTunnel同步PostgreSQL数据至ClickHouse(1)

ClickHouse简介

ClickHouse最初是为Yandex.Metrica世界第二大Web分析平台而开发的。多年来一直作为该系统的核心组件被该系统持续使用着。目前为止,该系统在ClickHouse中有超过13万亿条记录,并且每天超过200多亿个事件被处理。它允许直接从原始数据中动态查询并生成报告。在Yandex.Metrica中,ClickHouse被用于多个场景中。它的主要任务是使用原始数据在线地提供各种数据报告。

ClickHouse是一种OLAP类型的列式数据库管理系统,ClickHouse完美的实现了OLAP和列式数据库的优势,因此在大数据量的分析处理应用中ClickHouse表现很优秀。

SeaTunnel简介

SeaTunnel是首个由国人主导并贡献到Apache软件基金会的大数据集成领域的顶级项目,SeaTunnel是一个分布式、高性能、易扩展、用于海量数据同步和转化的数据集成平台。

SeaTunnel主要特性:

(1)有丰富的连接器Connector;

(2)有批处理和流处理两种处理方式;

(3)支持分布式快照算法,保证数据一致性;

(4)多引擎支持:SeaTunnel默认使用SeaTunnel引擎进行数据同步。SeaTunnel还支持使用Flink或Spark作为Connector的执行引擎;

(5)JDBC复用、数据库日志多表解析:SeaTunnel支持多表或全数据库同步,解决了JDBC连接过多的问题;支持多表或全库日志读写解析,解决了CDC多表同步场景重复读取解析日志的问题;

(6)高吞吐量、低延迟:SeaTunnel支持并行读写,提供稳定可靠的高吞吐量、低延迟的数据同步能力;

(7)实时监控:SeaTunnel支持数据同步过程中每一步的详细监控信息,让用户轻松了解同步任务读写的数据数量、数据大小等信息。

SeaTunnel同步PostgreSQL数据至ClickHouse(1)_第1张图片

SeaTunnel 的运行过程如上图所示。用户配置作业信息,选择执行引擎提交作业。源连接器负责并行读取数据并将数据发送到下游转换或直接发送到接收器,接收器将数据写入目标。


为什么要将数据从PostgreSQL同步至ClickHouse?

从较高的层次上讲,ClickHouse是一个为分析系统设计的优秀OLAP数据库。相比之下,PostgreSQL是一个通用数据库,旨在成为一个多功能、可靠的OLTP数据库,用于具有高用户参与度的记录系统。因此,如果需要对几乎不可变的大型数据集(即OLAP)执行快速分析查询,那么ClickHouse将会是更好的选择。

SeaTunnel任务配置及启动

本示例将PostgreSQL的db_test数据库下test1表中的10000条数据,同步到ClickHouse数据库下default.test1中。

在PostgreSQL中建表,语句如下:

CREATE TABLE db_test.test1

(

    `id` INT PRIMARY KEY,

    `name` CHAR(50),

    `quantity` INT

)

向PostgreSQL中插入数据,格式如下:

insert into db_test.test1 values(1,'banana',1);

在ClickHouse中建表,语句如下:

CREATE TABLE default.test1

(

    `id` Int32,

    `name` String,

    `quantity` Int32

)

ENGINE = MergeTree

PRIMARY KEY id

ORDER BY id

1、下载jdbc

下载PostgreSQLjdbc并放至 '$SEATNUNNEL_HOME/plugins/jdbc/'目录下

2、编写配置文件

在'$SEATNUNNEL_HOME/config'目录下,新建配置文件pgsqltock.template

配置文件内容示例如下:

#配置并发数execution.parallelism以及工作模式job.mode

env {

  execution.parallelism = 2

  job.mode = "BATCH"

}

#配置数据源

source{

  Jdbc {

        url = "jdbc:postgresql://localhost:5432/db_test"

        driver = "org.postgresql.Driver"

        user = "postgres"

password="123456"

        query = "select * from test1"

    }

}

#转换配置,seatunal仅支持支持的基本函数和条件过滤操作。在本次示例中我们不需要做任务的Transform操作,所以这里为空,也可以将transform整个元素删除

#transform {

#sql {

#   query = ""

#  }

#}

#输出配置

sink {

  Clickhouse {

    host = "localhost:8123"

    database = "default"

    table = "test1"

    username = "default"

    password = "123456"

  }

}

3.启动任务

在'$SEATNUNNEL_HOME'目录下,使用启动命令:

./bin/seatunnel.sh --config ./config/pgsqltock.template -e local

此命令将以 local (本地模式) 运行您的SeaTunnel作业。

作业运行完成后可以看到如下信息:作业开始时间以及结束时间,读取10000条数据,写入ClickHouse也是10000条数据,用时3s。

SeaTunnel同步PostgreSQL数据至ClickHouse(1)_第2张图片

这样就将Postgresql的db_test数据库下test1表中的10000条数据,同步到ClickHouse中。至此,SeaTunnel就已经成功运行完成了。

进入ClickHouse,select * from default.test1查询写入情况,可以看到10000条测试数据已经写入ClickHouse。

SeaTunnel同步PostgreSQL数据至ClickHouse(1)_第3张图片

总结

本章我们运用数据集成平台SeaTunnel实现了PostgreSQL到ClickHouse的数据同步,使用SeaTunnel仅需要编写配置文件并下载对应的连接器即可。配置化、低代码、易维护是SeaTunnel最显著的特点。

接下来我们将介绍更多数据库到ClickHouse的数据同步流程。

你可能感兴趣的:(clickhouse)