我们很高兴今天欢迎 Upsolver 作为我们博客的嘉宾。在数据领域,ClickHouse 经常处理每秒数十亿行的插入操作,因此找到一款能够高效且经济地处理此问题的 ETL 工具始终值得关注。这就是为什么当 Upsolver 分享他们与 ClickHouse 集成的方案时,我们感到如此兴奋。他们成功地展示了令人印象深刻的 ETL 行吞吐量,同时仍然提供了丰富的转换功能,而且重要的是,成本合理。让我们仔细看看他们的工作以及这对使用 ClickHouse 进行数据处理意味着什么。
Upsolver 是高 масштабирование 数据摄取和转换的便捷工具,很高兴宣布支持 ClickHouse Cloud 作为目标。新的集成使客户能够可靠地将来自数据库、文件和流式源的大量数据近乎实时地摄取到 ClickHouse Cloud 中。Upsolver 自动检测源中的更改,并且仅将更改的行流式传输到 ClickHouse,使其比现有的 ETL 和 CDC 解决方案快 50 到 100 倍,并且更具成本效益。
我们的客户经常使用 Upsolver 来交付高容量、嵌套的流式数据,通常在每秒 1-2 百万个事件的量级,峰值是此值的 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(每个文件约 7MB)。
在此测试中,我们演示了 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 等外部工具。 了解有关转换作业的更多信息。
何时将 Upsolver 与 ClickHouse Cloud 一起使用
Upsolver 的设计宗旨是让用户能够轻松可靠地在操作和分析系统之间移动高容量、高吞吐量的数据。Upsolver 和 ClickHouse 通常用于以下四个用例。
流式 ETL → Clickhouse Cloud
Upsolver 支持从 Apache Kafka(自管理)、Confluent、Amazon Kinesis 或 Amazon MSK 直接流式传输到 ClickHouse 表。通常,应用程序事件的流式传输速率为每秒数千个,广告技术和游戏中的更极端速率超过每秒数百万个。如果您需要在插入之前对此数据执行转换和过滤,则 Upsolver 在满足这些要求方面具有独特的能力。
对象存储 (S3) → Clickhouse Cloud
您可以使用 Upsolver 将对象存储(如 Amazon S3)中可用的批量生成的数据持续加载到 ClickHouse 表中。此数据通常来自合作伙伴,从遗留系统导出,或由安全、基础设施和系统日志记录和跟踪工具生成。在这些用例中,用户通常希望在尽可能快速且经济高效地将 TB 级数据加载和合并到 ClickHouse 之前对其进行过滤和准备(修复时间戳、删除坏行、丰富等)。
摄取到 Clickhouse Cloud + Iceberg
虽然 ClickHouse 是一个非常快速且功能强大的实时数据库,但许多公司使用一系列工具来使用结构化和半结构化数据执行分析和训练 ML 模型。为了满足这些用例,他们必须使用 Apache Iceberg 将原始事件存储在湖仓中。Iceberg 表格式可以轻松地组织和管理对象存储中的大量结构化数据。它还可以轻松地重新排列和演变大型数据集,以更好地满足业务需求,而无需代价高昂地重写数据文件。一旦进入湖仓,就可以从 ClickHouse、带有 Python 的 Jupyter 笔记本以及 Apache Spark 和 Flink 等其他现代处理引擎访问表。
变更数据捕获 (CDC)
ClickHouse 允许用户就地查询其数据,例如 S3 或 MySQL,而无需先加载到本机表中;这也称为查询联合。此外,用户可以从外部系统临时提取数据并将其插入到 ClickHouse 本机表中以进行快速分析。但是,这些方法存在局限性,并且不适合在源数据更改时保持本机表最新。
为了解决这个问题,Upsolver 允许用户将源更改 (CDC) 从操作数据库流式传输到 Iceberg 湖仓和 ClickHouse。Upsolver 确保以适当的格式转换和准备这些事件,以利用实现 CDC 更新/删除逻辑的 ClickHouse CollapsingMergeTree 或 VersionedCollapsingMergeTree 表引擎。Upsolver 添加了额外的列,例如 IS_DELETED 和 EVENT_TIME,并允许您包含有助于为 ClickHouse 实现高效 CDC 的计算字段。
蕴含巨大价值
Upsolver 用于 ClickHouse Cloud 的高容量连接器使用户能够统一其数据摄取和移动,简化其架构,并将快速、可靠和高质量的数据交付到 ClickHouse、Iceberg 湖仓和操作系统。新的集成使客户能够可靠地从数据库、文件和流式源近乎实时地摄取大量数据,速度比替代解决方案快 50 到 100 倍,并且成本显着降低。