我们很高兴今天欢迎 Upsolver 作为嘉宾来到我们的博客。在数据领域,ClickHouse 通常处理每秒数十亿行的插入操作,因此找到一种能够高效且经济地处理此类操作的 ETL 工具始终值得关注。这就是为什么当 Upsolver 分享他们与 ClickHouse 集成的方案时,我们感到如此兴奋的原因。他们成功地展示了令人印象深刻的 ETL 行吞吐量,同时仍然提供丰富的转换功能,并且重要的是,成本合理。让我们仔细看看他们的工作以及它对使用 ClickHouse 进行数据处理的意义。
Upsolver,大规模数据摄取和转换的简易解决方案,很高兴宣布支持 ClickHouse Cloud 作为目标目的地。新的集成允许客户从数据库、文件和流式源可靠地以近乎实时的速度将大量数据摄取到 ClickHouse Cloud 中。Upsolver 自动检测源中的更改,并且仅将更改的行流式传输到 ClickHouse,使其比现有的 ETL 和 CDC 解决方案快 50 倍到 100 倍,并且更具成本效益。
我们的客户经常使用 Upsolver 传输海量嵌套流数据,通常每秒 100 万到 200 万个事件,**峰值是其 2 倍到 5 倍**。 阅读客户评价。同样,客户使用 ClickHouse Cloud 来处理、存储和分析数十亿行数据,只需几秒钟。
大规模执行 ETL 的挑战
ClickHouse 是用于实时分析、数据驱动应用程序以及越来越多地用于低延迟 AI 使用案例的最快、最高效的开源数据库。当数据加载到其众多专业表引擎之一时,用户可以从 ClickHouse 获得最大的收益。虽然存在解决加载大量数据的挑战的解决方案,但大规模执行转换和过滤会给用户带来更多挑战。
使用 ClickHouse 大规模执行 ETL 需要的主要功能是
-
**简单的、高性能的架构** - 能够最大限度减少数据必须遍历的系统和组件数量的架构
-
**流式摄取和转换** - 可靠高效地转换和过滤数据的功能
-
**摄取作业的全面监控** - 需要深入监控数据和摄取任务。这也有助于加快问题解决速度。
Upsolver 提供了所有这些功能,我们将在下面详细介绍。
简单的、高性能的架构
ClickHouse 开箱即用地提供了许多连接到常用数据源的 连接器,以及用于在 ClickHouse Cloud 中进行托管持续摄取的 ClickPipes。一些连接器由 ClickHouse 团队开发和维护,一些由第三方供应商开发,还有一些由社区开发。
如前所述,高性能和可靠的 ETL 和 CDC 的关键在于简单的架构;仅加载所需内容,执行高效的过滤和转换,并提供可操作的观察结果。因此,为您的用例识别、测试和实施正确的解决方案可能是一项艰巨的任务。特别是,随着数据量和吞吐量的增加,确保数据以正确且一致的格式完全交付一次变得越来越困难。
使用 Upsolver,ClickHouse Cloud 用户可以选择直接连接到操作源,监控新事件并实时转换原始事件数据,同时 Upsolver 自动扩展以匹配需求。
这使得您可以简化架构,消除用于 CDC 的 Debezium、用于持续文件加载的队列和通知脚本,或用于处理行的增量加载、更新和删除的复杂转换。
ClickHouse Cloud 用户始终在寻找简单、高度可扩展、可靠且经济高效的解决方案,以便将来自多个源的数据流式传输到 ClickHouse,同时在插入之前执行复杂的转换。Upsolver 的 ClickHouse 连接器 实现了这一点,甚至更多。
流式摄取和转换
通常的做法是在您选择的数据仓库之外创建一个原始暂存区,您可以在其中过滤、转换和丰富数据,然后再将其发送到他们首选的目标。
为了实现此设计,用户需要一个经济高效的工具,该工具不仅能够提供足够强大的过滤和处理功能,而且能够扩展到仓库中看到的 TB 级数据量。
Upsolver 满足了所有这些要求,允许仓库用户声明两种类型的作业
摄取作业 允许您从源获取数据,将其转换为列式格式(Parquet 或 ORC),对其进行分区并在对象存储(如 Amazon S3)中进行暂存。然后,用户可以灵活地将数据直接加载到 ClickHouse 或他们选择的其他目标中。
转换作业 允许您从摄取作业创建的 S3 中的暂存表读取数据。使用 SQL,用户可以实时过滤、转换和操作行。转换作业可以组装成一个管道,最终将结果流式传输到 ClickHouse 表中。
简单的配置
Upsolver 使用户能够轻松构建上述生产级摄取作业,学习曲线很低。摄取作业可以使用 UI 或通过 SQL 轻松创建。用户可以将 Upsolver 集成到他们的 CI/CD 流程中,并使用 SDK 和 API 自动化管道更改。 使用向导开始。
对于习惯使用 SQL 的用户,可以在熟悉的 DDL 语法中定义作业。以下是一个简单的示例,展示了如何创建到 ClickHouse Cloud 的连接以及一个持续从 S3 读取对象并将其加载到 ClickHouse 表中的作业。
CREATE CLICKHOUSE CONNECTION my_ch_connection
CONNECTION_STRING = 'http://x.us-east-1.aws.clickhouse.cloud:8123/prod_db'
USER_NAME = 'username'
PASSWORD = 'password';
CREATE SYNC JOB load_iceberg_from_s3
DEDUPLICATE_WITH = (COLUMNS = (event_id), WINDOW = 12 HOURS)
AS COPY FROM S3 raw_s3_landingzone_connection
location = 's3://landingzone/partner/'
INTO CLICKHOUSE my_ch_connection.prod_db.target_tbl;
全面的监控和完全托管的数据同步
Upsolver 自动保持源和目标同步,发展模式,并确保正确的数据类型匹配。它自动从连接和网络故障中恢复,并最大限度地减少流量峰值的影响。此外,Upsolver 确保删除重复项,并且延迟到达的数据可以无缝地合并。 了解它是如何完成的。
在一个地方提供对数据摄取作业的监控以及数据质量和健康状况的观察。Upsolver 的实时作业监控和数据可观测性使用户能够快速检测和修复作业或数据相关问题。用户可以监控并警示连接故障、模式更改以及处理量速率的更改。甚至可以创建更复杂的警报,以检测列值的唯一性并确保满足用户定义的数据质量期望。详细了解数据可观测性。
测试持续数据摄取性能
高容量、持续的数据摄取是许多 ClickHouse Cloud 客户的常见用例,我们希望评估 Upsolver 加载 **447 亿** 行数据(分布在 68,783 个文件中,总计约 480GB,每个文件约 7 MB)的速度。
在此测试中,我们展示了 Upsolver 将新数据持续加载到 ClickHouse 中的速度,不包括一次性历史回填。为此,我们创建了一个类似于上面显示的作业 (load_orders_to_clickhouse
)。Upsolver 是一个流处理系统,因此它尝试按事件顺序加载数据。创建执行计划后,Upsolver 开始读取文件,将行拆分为块并将块加载到 MergeTree 表中。
我们使用了 3 节点 360 GiB RAM、96vCPU 的 ClickHouse Cloud 集群和 16 节点 r6i.24xlarge 节点,每个节点具有 96vCPU 和 760GiB RAM 用于 Upsolver。默认情况下,Upsolver 使用 AWS EC2 SpotSPOT 实例,因此每个实例的成本仅为 3.60 美元/小时/实例。
下图显示了 Upsolver 从 S3 复制文件、解析行并将它们加载到 ClickHouse 中的任务。平均而言,复制任务大约需要 3.5 分钟。作业于 15:22 开始复制数据,并于 17:10 完成,运行时间为 108 分钟,或 **1 小时 48 分钟** 以加载 447 亿行数据。以 3.60 美元/小时/实例计算,加载 447 亿行数据的总成本仅为 **100 美元**。
Upsolver 自动检测源中的更改,并将仅更改的行流式传输到 ClickHouse。编排和任务调度在内部处理,无需使用 Airflow 或 AWS Lambda 等外部工具。了解更多关于转换作业的信息。
何时在 ClickHouse Cloud 中使用 Upsolver
Upsolver 的设计宗旨是使用户能够轻松可靠地在运营系统和分析系统之间移动海量、高吞吐量的数据。Upsolver 和 ClickHouse 通常用于以下四个用例。
流式 ETL → Clickhouse Cloud
Upsolver 支持将数据直接从 Apache Kafka(自托管)、Confluent、Amazon Kinesis 或 Amazon MSK 流式传输到 ClickHouse 表中。通常,应用程序事件以每秒 1000 次的速度流式传输,在广告技术和游戏等领域,速度可能会超过每秒 1,000,000 次。如果您需要在插入之前对这些数据执行转换和过滤,Upsolver 在满足这些要求方面具有独特的优势。
对象存储 (S3) → Clickhouse Cloud
您可以使用 Upsolver 将对象存储(如 Amazon S3)中持续加载批量生成的数据到 ClickHouse 表中。这些数据通常来自合作伙伴、从遗留系统导出或由安全、基础设施和系统日志记录和跟踪工具生成。在这些用例中,用户通常希望在尽可能快且经济高效地将数据加载到 ClickHouse 中并合并行之前,先过滤和准备(修复时间戳、删除错误行、丰富等)TB 级数据。
摄取到 Clickhouse Cloud + Iceberg
虽然 ClickHouse 是一个非常快速且功能强大的实时数据库,但许多公司使用各种工具来执行分析并使用结构化和半结构化数据训练机器学习模型。为了满足这些用例,他们必须使用 Apache Iceberg 将原始事件存储在数据湖中。Iceberg 表格式使组织和管理对象存储中的大量结构化数据变得容易。它还可以轻松地重新排列和演变大型数据集,以更好地满足业务需求,而无需花费高昂的成本重写数据文件。一旦进入数据湖,表就可以从 ClickHouse、带有 Python 的 Jupyter Notebook 和其他现代处理引擎(如 Apache Spark 和 Flink)访问。
更改数据捕获 (CDC)
ClickHouse 允许用户就地查询其数据,例如 S3 或 MySQL,而无需先加载到本地表中;这也被称为查询联合。此外,用户可以从外部系统中提取数据(即席)并将其插入到 ClickHouse 本地表中以进行快速分析。但是,这些方法存在局限性,并且不适合在源数据更改时保持本地表最新。
为了解决此问题,Upsolver 允许用户将源更改 (CDC) 从运营数据库流式传输到 Iceberg 数据湖和 ClickHouse。Upsolver 确保这些事件以适当的格式进行转换和准备,以利用 ClickHouse CollapsingMergeTree 或 VersionedCollapsingMergeTree 表引擎来实现 CDC 更新/删除逻辑。Upsolver 添加了其他列,例如 IS_DELETED 和 EVENT_TIME,并允许您包含有助于为 ClickHouse 实现高效 CDC 的计算字段。
提供大量价值
Upsolver 的 ClickHouse Cloud 高容量连接器使用户能够统一其数据摄取和移动,简化其架构并向 ClickHouse、Iceberg 数据湖和运营系统提供快速、可靠和高质量的数据。新的集成允许客户以比替代解决方案快 50 倍到 100 倍且成本低得多的速度,从数据库、文件和流式源中近乎实时地可靠地摄取大量数据。