图片

本文字数:2887;估计阅读时间:8 分钟

作者:Sai Srirampur

本文在公众号【ClickHouseInc】首发

图片

过去几个月来,我们一直致力于为用户提供一种快速简便的方式,将数据从 Postgres 复制到 ClickHouse。上个月,我们收购了专注于 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。这一设计确保了即使目标系统(ClickHouse)出现宕机,复制槽依然能够持续被消费,避免 Postgres 的复制槽积压问题。

优化 ClickHouse 内存管理

在将数据从 Postgres 复制到 ClickHouse 时,部分客户偶尔会遇到与内存相关的问题。这种情况在客户使用 ClickHouse 免费试用并为实例配置较少的资源(如 RAM 和计算能力)时更为常见。PeerDB 通过 INSERT 和 INSERT SELECT 查询批量写入数据到 ClickHouse,我们观察到两类问题:

  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 分钟,因此我们将超时值调高。

这些调整大幅减少了小型 ClickHouse 集群的内存问题。我们正与核心团队合作,进一步优化 ClickHouse 的内存设置。此外,我们正在开发一项新功能,通过将大型数据集拆分为可管理的小块,以提升处理和存储效率。

行级转换

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

https://www.youtube.com/watch?v=_uzFdI1P4Bk

增强的 PeerDB 云安全性

在 PeerDB,我们高度重视从 Postgres 到 ClickHouse 的数据复制安全性。为此,我们对 AWS S3 实施了多项安全措施,该服务用于在将数据推送到 ClickHouse 之前进行暂存。

使用 IAM 角色的临时凭证

我们引入了严格的访问控制来管理 AWS S3 存储桶,摒弃了传统的长期用户生成的访问密钥,这些密钥存在较高的泄露风险。取而代之的是,我们使用 IAM 角色生成临时凭证。这些凭证由 AWS 自动轮换,确保始终最新,并且仅在短期内有效,从而最大限度地降低了未经授权访问的风险。

此外,ClickHouse 24.3.1 版本新增了 AWS_SESSION_TOKEN 参数,这进一步提升了安全性。此更新支持短期凭证,与我们保护数据复制安全的策略保持一致。

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

在多租户环境中,管理对 S3 存储桶的访问会带来一些挑战,比如如何确保租户隔离、防止未经授权访问以及减少角色的过度创建。为此,我们采用了基于属性的访问控制 (ABAC)。ABAC 允许我们根据用户角色、资源标签和环境变量动态定义细粒度的访问策略。这不仅提升了安全性,还避免了创建大量角色的问题,从而提高了系统的可扩展性。借助 ABAC,我们确保只有授权的组件才能访问敏感数据,保持系统的安全性和可管理性。

结论

希望你喜欢这篇博客。PeerDB 经过多次迭代,已经大大优化了 Postgres 到 ClickHouse 的 CDC 体验,并且目前支持多个客户实时复制数十亿条数据。如果你想尝试 PeerDB 和 ClickHouse,请查看以下链接或直接联系我们!

  • 免费试用 PeerDB Cloud【https://auth.peerdb.cloud/en/signup?glxid=ccd14694-a89a-428a-b9e5-6d7eca94cefb&pagePath=%2Fblog%2Fenhancing-postgres-to-clickhouse-replication-using-peerdb&origPath=%2Fblog%2Fhow-to-learn-clickhouse-and-become-a-certified-clickhouse-developer&experiments=mktg-website-nav-cta-btn%3A1%2Cmktg-website-rockset-eyebrow%3A1】

  • 免费试用 ClickHouse Cloud【https://clickhouse.com/docs/en/cloud-quick-start】

  • Postgres 到 ClickHouse 复制的文档【https://docs.peerdb.io/mirror/cdc-pg-clickhouse】

  • 直接联系 PeerDB 团队【https://www.peerdb.io/sign-up】

征稿启示

面向社区长期正文,文章内容包括但不限于关于 ClickHouse 的技术研究、项目实践和创新做法等。建议行文风格干货输出&图文并茂。质量合格的文章将会发布在本公众号,优秀者也有机会推荐到 ClickHouse 官网。请将文章稿件的 WORD 版本发邮件至:Tracy.Wang@clickhouse.com

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐