简介
文章开头先介绍一下什么是CDC。数据准实时复制(CDC)是目前行内实时数据需求大量使用的技术。常用的中间件有Canal、Debezium、Flink CDC等
下面我们做一下对比
各有优缺点吧,本主要介绍一下Debezium中间件。
Debezium是什么
Debezium是一个为变更数据捕获(CDC)提供低延迟数据流平台的开源项目。Debezium是一个将来自现有数据库的信息转换为事件流的分布式平台,使应用程序能够检测并立即响应数据库中的行级更改。
Debezium构建在Apache Kafka之上,并提供了一组Kafka Connect兼容的连接器。每个连接器都与特定的数据库管理系统(DBMS)一起工作。连接器通过检测发生的变化来记录DBMS中数据变化的历史,并将每个变化事件的记录流式传输到Kafka Topic。然后,消费应用程序可以从Kafka主题中读取结果事件记录。通过利用Kafka可靠的流媒体平台,Debezium使应用程序能够正确和完整地消费数据库中发生的更改。即使您的应用程序意外停止或失去连接,它也不会错过停机期间发生的事件。应用程序重新启动后,它将从停止的位置继续从主题读取。
注:本文只讨论Debezium构建在kafka之上。
Kafka Connect架构
最常见的是通过Apache kafka connect部署Debezium。Kafka Connect是一个框架和运行时,用于实现和操作:
- 源连接器,如Debezium,将记录发送到Kafka
- 接收连接器,将记录从Kafka主题传播到其他系统
下图显示了基于Debezium的变更数据捕获管道的架构:
如图所示,部署了用于MySQL和PostgresSQL的Debezium连接器来捕获对这两种数据库的更改。每个Debezium连接器建立一个到其源数据库的连接:
- MySQL连接器使用一个客户端库来访问binlog。
- PostgreSQL连接器从逻辑复制流中读取数据。
Kafka Connect作为Kafka代理之外的一个独立服务运行。
默认情况下,一个数据库表的更改被写入Kafka主题,其名称对应于表名。如果需要,您可以通过配置Debezium的主题路由转换来调整目标主题名称。例如,您可以:
- 将记录路由到名称与表名不同的主题
- 将多个表的更改事件记录流式传输到单个主题中
在Apache Kafka中更改事件记录后,Kafka Connect生态系统中的不同连接器可以将记录流式传输到其他系统和数据库,如Elasticsearch,数据仓库和分析系统,或缓存,如Infinispan