为什么要将数据从 SQL Server 流式传输到 ClickHouse?
- 不会拖慢生产应用的内部报表
- 需要响应迅速且始终保持最新的面向客户的仪表盘
- 事件流处理,例如让用户活动日志持续保持最新状态,以便进行分析
开始前需要准备的内容
前置条件
- 一个正在运行的 SQL Server 实例
- 在本教程中,我们使用 AWS RDS for SQL Server,但任何现代 SQL Server 实例都适用。从零开始搭建 AWS SQL Server。
- 一个 ClickHouse 实例
- 自托管或云端部署均可。从零开始搭建 ClickHouse。
- Streamkap
- 该工具将作为您的数据流式管道的核心。
连接信息
- SQL Server 服务器地址、端口、用户名和密码。建议为 Streamkap 创建单独的用户和角色,以访问你的 SQL Server 数据库。查看我们的配置文档。
- ClickHouse 服务器地址、端口、用户名和密码。ClickHouse 中的 IP 访问列表决定了哪些服务可以连接到你的 ClickHouse 数据库。请按照此处的说明操作。
- 你想要流式传输的表——暂时先从一张表开始
将 SQL Server 设置为数据源
第 1 步:在 Streamkap 中创建 SQL Server 数据源
- 打开 Streamkap,进入 Sources 部分。
- 创建一个新数据源。
- 为其指定一个易于识别的名称 (例如:sqlserver-demo-source) 。
- 填写 SQL Server 连接信息:
- 主机 (例如:your-db-instance.rds.amazonaws.com)
- 端口 (SQL Server 的默认端口为 3306)
- 用户名和密码
- 数据库名称
幕后发生了什么
创建 ClickHouse 目标端
步骤 2:在 Streamkap 中添加 ClickHouse 目标端
步骤:
- 前往 Streamkap 中的目标端部分。
- 添加一个新的目标端——选择 ClickHouse 作为目标端类型。
- 输入你的 ClickHouse 信息:
- 主机
- 端口 (默认为 9000)
- 用户名和密码
- 数据库名称
Upsert 模式:这是什么?
- 这可以确保当 SQL Server 端发生变化时,你的目标表不会被重复数据占满。
处理 schema 演进
- 好消息是:Streamkap 可以处理基本的 schema 演进。这意味着,如果你在 SQL Server 中新增了一列,ClickHouse 端也会同步出现这一列。
构建流式管道
步骤 3:在 Streamkap 中配置管道
管道设置
- 在 Streamkap 中打开 Pipelines 选项卡。
- 创建一个新管道。
- 选择你的 SQL Server 数据源 (sqlserver-demo-source) 。
- 选择你的 ClickHouse 目标端 (clickhouse-tutorial-destination) 。
- 选择要进行流式传输的表——这里假设为 events。
- 配置 CDC (变更数据捕获) 。
- 在这次运行中,我们将流式传输新数据 (刚开始可以先跳过回填,重点关注 CDC 事件) 。
是否需要回填?
流式实战:效果预览
第 4 步:观察数据流
- 当新数据进入 SQL Server 的数据源表时,Streamkap 管道会捕获这些变更并将其发送到 ClickHouse。
- ClickHouse (借助 ReplacingMergeTree 和分片合并) 会摄取这些行,并合并更新。
- schema 也能保持同步——如果你在 SQL Server 中新增列,它们也会出现在 ClickHouse 中。
底层原理:Streamkap 实际在做什么?
- Streamkap 会监控 SQL Server 的二进制日志 (也就是用于复制的那种日志) 。
- 只要你的表中有行被插入、更新或删除,Streamkap 就会捕获这个事件。
- 它会将该事件转换为 ClickHouse 能理解的内容并发送过去——把变更立即应用到你的分析数据库中。
高级选项
Upsert 与 Insert 模式
- Insert Mode:每个新行都会被添加——即使它其实是一次更新,也会产生重复数据。
- Upsert Mode:对现有行的更新会覆盖原有内容——更适合让分析数据保持最新且整洁。
处理 schema 变更
- 给业务表新增一列? Streamkap 会自动识别,并在 ClickHouse 端同步添加这一列。
- 删除一列? 这取决于具体设置,你可能需要执行迁移——不过大多数新增都能顺利处理。
生产环境监控:随时掌握管道运行状态
检查管道运行状况
- 查看管道滞后情况 (你的数据有多新鲜?)
- 监控行数和吞吐量
- 在出现异常时接收告警
需要重点关注的常见指标
- 滞后:ClickHouse 比 SQL Server 落后多少?
- 吞吐量:每秒处理的行数
- 错误率:应接近零
开始使用:查询 ClickHouse
后续步骤与深入研究
- 设置带过滤的流 (仅同步部分表/列)
- 将多个数据源流式传输到同一个分析型数据库
- 将其与 S3/数据湖结合用于冷存储
- 在更改表时自动执行 schema 迁移
- 使用 SSL 和防火墙规则保护你的管道
常见问题与故障排查
总结
- Upsert 与 Insert 的区别,以及两者的技术细节
- 端到端延迟:多久才能获得最终的分析视图?
- 性能调优与吞吐量
- 基于这套技术栈构建的真实场景仪表盘