博客 / 产品

使用 PeerDB 增强 Postgres 到 ClickHouse 的复制

author avatar
Sai Srirampur
2024年8月14日 - 7 分钟阅读

peerdb_postgres_cdc_blog.png

在过去几个月中,为我们提供一种快速简便的方式来将数据从 Postgres 复制到 ClickHouse 一直是我们的首要任务。上个月,我们 收购PeerDB,一家专注于 Postgres CDC 的公司。我们正在积极将 PeerDB 集成到 ClickPipes 中,以添加 Postgres 作为源连接器。同时,PeerDB 是将数据从 Postgres 迁移到 ClickHouse 的推荐解决方案。

在过去的几个月中,PeerDB 团队有机会与多家 ClickHouse 客户合作,帮助他们将数十亿行和数 TB 的数据从 Postgres 复制到 ClickHouse。在本博客中,我们将深入探讨最近发布的一些顶级功能,以使复制体验稳如磐石。这些功能侧重于提高从 Postgres 到 ClickHouse 复制的速度、稳定性和安全性。

有效地刷新复制槽

PeerDB 使用 Postgres 逻辑复制槽来实现变更数据捕获 (CDC)。逻辑复制槽提供 Postgres 数据库中发生的 INSERT、UPDATE 和 DELETE 操作流。建议 始终消费复制槽。如果复制槽未持续消费,则 WAL 文件可能会累积,从而构成 Postgres 数据库崩溃的风险。

为了确保始终消费逻辑复制槽,我们实现了一个 功能,始终读取复制槽并将更改刷新到内部暂存区 (S3)。然后,异步进程从 S3 消费更改并将它们应用到 ClickHouse。将更改刷新到内部暂存区 S3 还可以确保即使目标 (ClickHouse) 关闭,复制槽也能被消费。

更好的 ClickHouse 内存处理

在将数据从 Postgres 复制到 ClickHouse 时,客户偶尔会在 ClickHouse 上遇到与内存相关的问题。当客户试用 ClickHouse 免费版并配置资源较少(RAM 和计算)的实例时,这种情况更为常见。PeerDB 通过 INSERT 查询和 INSERT SELECT 查询将行批量写入 ClickHouse。我们看到了 2 种类型的问题

  1. 一些查询失败,因为它们消耗的内存超过了 ClickHouse 服务器上分配的内存。

  2. 一些查询会被 ClickHouse 的过量提交跟踪器终止。

我们尝试彻底了解 ClickHouse 提供的各种 数据库设置,这些设置会影响内存利用率。基于此,我们 修改 了以下设置

  1. max_block_size:这对于我们的 INSERT SELECT 查询很有用,其中此设置确定 SELECT 加载和插入的块数。我们减少了此设置,希望更多的块可以减少查询执行时的内存峰值。

  2. max_insert_block_size:与 max_block_size 类似,不同之处在于它适用于我们的 INSERT 查询。我们出于与上述相同的原因减少了此设置。

  3. max_threads:此设置控制用于在 ClickHouse 上处理查询的线程数。根据文档,此数字越低,消耗的内存越少。因此,我们减少了此参数。

  4. memory_overcommit_ratio_denominator:这与前面提到的过量提交跟踪器有关。我们通过将其设置为 0,为我们的查询禁用了此设置。

  5. dial_timeout:有时查询耗时超过 1 分钟,因此我们将 dial_timeout 增加到更高的值。

这些更改大大减少了较小 ClickHouse 集群上与内存相关的问题。我们正在积极与核心团队合作,以进一步微调特定于 ClickHouse 的设置。此外,我们正在开发一项 功能,通过将大型数据集分解为可管理的部分,以提高其处理效率和存储效率。

行级转换

几个月前,PeerDB 在将数据从 Postgres 复制到 Kafka 等队列时推出了 基于 Lua 的行级转换。我们现在已将此功能扩展到 ClickHouse。借助此功能,客户可以编写简单的 Lua 脚本来执行行级转换,从而实现诸如屏蔽 PII 数据、生成列等用例。以下是此功能的一个快速演示,用于在将数据从 Postgres 复制到 ClickHouse 时屏蔽 PII 列

改进 PeerDB Cloud 的安全性

在 PeerDB,保护从 Postgres 到 ClickHouse 的数据复制至关重要。为了增强安全性,我们围绕 AWS S3 实施了多项关键措施,我们在将数据推送到 ClickHouse 之前使用 AWS S3 进行内部暂存。

使用 IAM 角色的临时凭证

一项重要的改进是使用具有严格访问控制的 AWS S3 存储桶。我们没有使用传统的、长期存在的用户生成的访问密钥(这种密钥存在更高的泄露风险),而是使用 IAM 角色来生成临时凭证。这些凭证由 AWS 自动轮换,确保它们始终是最新的且仅在短时间内有效,从而最大限度地降低未经授权访问的风险。

此外,随着 ClickHouse 24.3.1 版本中 AWS_SESSION_TOKEN 参数的引入,我们的安全实践得到了进一步加强。此更新允许使用短期凭证,这与我们保护数据复制的方法相一致。

基于属性的访问控制 (ABAC)

在多租户环境中,管理对 S3 存储桶的访问会带来一些挑战,例如确保租户隔离、防止未经授权的访问以及最大限度地减少角色激增。为了解决这些问题,我们采用了基于属性的访问控制 (ABAC)。ABAC 允许我们根据用户角色、资源标签和环境变量定义动态的、细粒度的访问策略。这种方法不仅提供了增强的安全性,而且还通过消除创建大量角色的需要来提高可扩展性。通过使用 ABAC,我们确保只有授权组件才能访问敏感数据,从而维护安全且可管理的系统。

结论

希望您喜欢阅读这篇博客。PeerDB 花费了多个周期来强化 Postgres CDC 到 ClickHouse 的体验,现在正在支持多家客户将数十亿条记录从 Postgres 实时复制到 ClickHouse。如果您想试用 PeerDB 和 ClickHouse,请查看以下链接或直接与我们联系!

  1. 免费试用 PeerDB Cloud

  2. 免费试用 ClickHouse Cloud

  3. Postgres 到 ClickHouse 复制文档

  4. 直接与 PeerDB 团队交流

开始使用 ClickHouse Cloud,立即获得 300 美元信用额度。在 30 天试用期结束时,继续使用按需付费计划,或 联系我们 了解有关批量折扣的更多信息。访问我们的 定价页面 了解详情。

分享这篇文章

订阅我们的新闻通讯

随时了解功能发布、产品路线图、支持和云产品!
正在加载表单...
关注我们
X imageSlack imageGitHub image
Telegram imageMeetup imageRss image