阿里云DTS作为数据世界高速传输通道的建造者,每周为您分享一个避坑技巧,助力数据之旅更加快捷、便利、安全。
作者:柚梧
一、导读
作为强大的日志服务引擎,SLS 积累了用户海量的数据。为了实现数据的自由流通,DTS 开发了以 SLS 为源的数据同步插件。目前,该插件已经支持将数据从 SLS 同步到 ClickHouse。通过这条高效的同步链路,客户不仅能够利用 SLS 卓越的数据采集和处理能力,还能够充分发挥 ClickHouse 在数据分析和查询性能方面的优势,帮助企业显著提高数据查询速度,同时有效降低存储成本,从而在数据驱动决策和资源优化配置上取得更大成效。
二、SLS 链路能力介绍
1. 链路实现介绍
对于源端每一个 shard,我们会为它建立一条独立的数据通道,将指定时间开始的数据拉到 DTS 的 recordStore 里持久化保存。recordStore 中的所有数据会通过矩阵计算后写入到各自对应目标端的表中(注意,shard 不对应表,SLS 的 Topic 才对应目标端的表)。
2. 链路能力界限
类型 |
说明 |
源库限制 |
|
其他限制 |
说明 分布式数据库节点数量必须与待同步数据所属Logstore的Shard数一致。
说明 在调整参数时,仅会修改实例的参数,不会对数据库中的参数进行修改。可能修改的参数,包括但不限于修改实例参数中的参数。 |
3. 映射关系
3.1 库表信息映射
SLS 为日志服务,同步到 ClickHouse 这样的数仓,需要有一定的库表映射关系,如下表所示。其中,目标端字段为指定字段,DTS 只会同步指定字段的值,指定字段的数据类型映射参考 2.2 数据类型映射
SLS 基本元素 |
Clickhouse 映射 |
地域(Region) |
地域(Region) |
项目(Project) |
实例(Instance) |
日志库(Logstore) |
数据库(Database) |
日志主题(Topic) |
表(Table) |
日志(Log) |
记录(Record) |
索引(Index) |
字段(Field) |
3.2 数据类型映射
日志服务SLS |
ClickHouse集群 |
TEXT |
STRING |
JSON |
STRING |
DOUBLE |
INT64 |
LONG |
FLOAT64 |
3.3 数据同步/迁移
在配置任务时,支持选择指定时间开始消费,需确保源端 SLS 在指定时间存有对应数据(如因数据过期被 SLS 清理,则链路配置会失败或从保存最早的数据开始消费)。
SLS 链路只有"增量模块",可通过控制台查看延迟情况来判断数据消费位置,以此来判断是否消费到最新数据。
三、常见问题解答
- 为什么需要关闭 Shard 的自动分裂/合并功能?
目前 DTS 侧还不支持 shard 分裂和合并的链路功能,如果不关闭此功能,那么新生产的 shard 将无法被 DTS 消费,导致目标端数据丢失。
- 配置同步对象时 Topic 和目标端的表应该如何配置。
SLS 中每一个 Logstore 的 Topic 对应目标端中的每一个表。如果需要同步指定 Topic,需要在配置界面中新增表,表名为需要同步的 Topic,目标端表名为该 Topic 同步到目标端对应的表。如果不需要指定 Topic,则将表名写为 .*(正则表达式),DTS 会同步所有 Topic 到目标端的指定表(这种情况下不允许再新增表,否则可能会导致数据丢失)。
- SLS 是日志服务,如何在数据上和 ClickHouse 对应。
DTS 支持将 SLS 中的索引同步到 Clickhouse 的字段,您需要在源端正确地建立索引,同时注意数据类型,确保该索引对应的数据类型能够全部正确地对应到 Clickhouse 中字段的类型,否则会导致数据转换失败,任务中断。
- 链路失败、暂停后重启会有数据丢失和数据重复吗?
该链路目前能做到 Exactly Once,重启后会自动过滤掉已经同步的数据;同时,只要源端的数据还在生命周期内,就不会丢失数据。
四、快来关注
- 数据传输服务(Data Transmission Service,简称DTS)支持关系型数据库、NoSQL、大数据(OLAP)等数据源,集数据迁移、订阅、实时同步、校验功能于一体,能够解决公共云、混合云场景下,远距离、秒级异步数据传输难题。其底层基础设施采用阿里双11异地多活架构,为数千下游应用提供实时数据流,已在线上稳定运行7年之久,是一款沉淀了丰富实践经验的可靠产品。点击了解更多DTS相关信息
- 详细操作步骤可参考:如何将数据从SLS同步至ClickHouse集群
- 欢迎加入钉群讨论交流: