TiCDC 系列分享 -01- 简述产生背景及使用概况
作者: jansu-dev 原文来源:https://tidb.net/blog/70588c4c
一、项目背景
如 PingCAP 官网 所述,TiCDC 的使用场景主要有 “数据库灾备” 及 “数据集成”。熟悉 TiDB 周边生态的爱好者一定知道 “TiDB Binlog” 这一与 TiCDC 功能相似的工具,那么为什么要重复工作呢?
答案是 “TiDB Binlog” 无法存在以下 (非全部) 种种问题,对于 “TiDB Binlog” 还不熟悉的伙伴参考 TiDB Binlog 简介:
1. “TiDB Binlog” 扩展性差,如:Drainer 存在 “单点” 、“性能” 问题,拆分 Drainer 无法保证 “数据行变更有序性”;
由此 TiCDC 应运而生,通过直接捕获 TiKV Change Log ,将表作为拆分单元调度至各 Capture 中,并发向下游同步数据解决扩展性问题。可 kafka 多 partition 写入,并支持 Maxwell、Canal 等多种通用协议,解决同步性能、生态通用性问题。当同步超时、 Capture 同步表数量不均、Capture 挂掉等情况时,TiCDC 存在调度机制及 At Least Once 保证幂等的数据完整性前提下,调度实现自愈合。

二、工具位置
首先,熟知 TiCDC 使用方法,必先明确其在 TiDB 生态工具所处的位置及作用。
1. 作用而言:数据库如果是个只进不出的 “貔貅”,那么必将被市场所抛弃,也就是所谓的 “数据孤岛”,TiCDC 兼顾同步性能、数据完整性,一致性、生态通用性,实现了数据从 “ 流入 -> TiDB -> 流出 ” 的闭环。此外,谈性能如果抛弃了场景(不深入讨论),那就是在耍流氓,没有任何一个款产品能完胜所有场景,TiDB 同样也有自己的舒适区、痛点区。有了 TiCDC 之后,用户可以轻松实现数据的流转,把 TiDB 用在使用场景的舒适区。
2. 位置而言:TiCDC 介于 TiDB 与下游目的端之间,下游包含兼用 MySQL 通许协议的所有产品、平台(如:TiDB、MySQL、RDS、三方云平台等)。用户还可基于通用消息队列输出协议自定义开发,现 TiCDC 支持的协议有:Open Protocol 、Canal-JSON 、 Canal 、Avro 、 Maxwell 等协议,有些协议仅部分支持,详情参考 –> TiCDC 支持的协议指南。
其次,TiCDC 几乎囊括所有主流 “数据同步” 的使用场景,下图便是 “MySQL –> TiDB –> Others” 的经典组合拳。至于其他协议的数据库(Oracle、PG)如何流入 TiDB,等同于如何流入 MySQL,因为 TiDB 兼容 MySQL 通讯协议,一定存在较成熟的解决方案。

三、使用情况
注意:下述公司均通过 AskTUG 搜索相关文章得到,即:分享文章中有提及该公司正在使用 TICDC。下述公司仅是通过搜索手段可得知的公司,还有许多商业客户要求不对外透露、或还未来得及透露。
3.1 小红书
从 张亿皓老师
在 【PingCAP Infra Meetup】No.131 TiCDC 的生态和社区建设 中分享可知,小红书基于 TiCDC 在业务中进行内容审核、笔记标签推荐、增长审计。实现如下图,基于 “TiDB –> TiCDC –> Kafka –> Flink –> TiDB” 这样一条链路实现与架构中其他数据源的聚合计算。

3.2 海尔智家
从 姚翔老师
在 【PingCAP Infra Meetup】No.131 TiCDC 的生态和社区建设 中分享可知,海尔智家基于 TICDC 在业务中进行搜索、推荐。将用户数据、生活家信息数据基于 “TiDB –> TiCDC –> Kafka –> ES” 这样一条链路实现 Kafka 日消费量在 300 万左右的近实时搜索功能。从描述中可知截止 2019-09-19 分享时,TiCDC 在不涉及表数量、LOB 字段、网络延时等细节情况下,同步能力边界为:正常同步在 “毫秒” 级,抖动情况下在 “秒级”(10s 以内)。 此外,从 Github – Question and Bug Reports 中可以看出 TiCDC 存在 mqSink flushes data synchronously,casing low performance
、Poor incremental scan performance where they are frequent insertions
、improve performance of syncer
等多个提升同步性能的 RoadMap,对于 TiCDC 的同步性能是一个持续优化的过程。

3.3 360
从 代晓磊老师
在 BLOG - TiCDC 应用场景解析 中分享可知,360 基于 TiCDC 实现并参与立项 增量数据抽取、同城双集群热备、流处理求 的需求。
四、使用方法
4.1 部署 TiCDC
下述测试环境搭建 TiCDC ,目的测试、学习 TiCDC 同步功能。172.16.6.155:8300
及 172.16.6.196:8300
的 CDC 组件会在扩容后出现。
TiCDC 在 4.0.6 版本 GA,建议使用 4.0.6 及以后的版本,详情参考 –> TiCDC 官方文档,扩容步骤如下。
4.2 同步至 Kafka
由于本人之前没接触过 kafka , 本着熟悉 TiCDC 也要了解其周边工具的目的,从 kafka 官网 进行了简单入门,如有任何正确性问题可及时评论区交流。
简单了解后,个人觉得 kafka 类似 GoLang 中的 Channel,区别在于提供了高性能的、分布式的、高可用的、弹性的、容错的、安全的 “事件流平台” 服务。 kafka 官网介绍其事件流式处理机制如下图所示,Topic 作为分发消费的逻辑单元,Partition 作为最小存储单元,以 Hash Key 或其他策略将 Event 划分到多个 Partition 中,提供高吞吐性能。

下面简单试用下 kafka,操作步骤如下,目的为从 kafka 中解析出 TiCDC 分发给 kafka 的消息,不深入研究 kafka 体系及调优。
4.3 同步至 MySQL
在 172.16.6.155:3306
本地装个 MySQL,指定相关参数后便可创建订阅任务,id 为 simple-replication-task,在 Grafana 监控面板中可观察到同步进度。MySQL 对于 DBA 讲一定是较为熟悉的工具,因此验证同步等步骤便不赘述。
五、引用文章
1. 【PingCAP Infra Meetup】No.131 Why and how we build TiCDC
2. 【PingCAP Infra Meetup】No.131 TiCDC 的生态和社区建设
5. 官方 FAQ – Pump 的 gRPC message 超过限值
6. Github Design Doc – TiCDC 支持的消息队列输出协议指南
7. Github Question and Bug Reports – TiCDC 提升性能规划路径
8. AskTUG Blog – 代晓磊 TiCDC 应用场景解析
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/2a0c38b9a05916cc56f835ff9】。文章转载请联系作者。
评论