前言

在之前的文章中,我们讲到了CDC工具Canal,今天我们来继续聊聊另外一个CDC工具——Debezium。

 一、Debezium是什么?

Debezium是一组分布式服务,用于捕获数据库中的更改,以便您的应用程序可以看到这些更改并做出响应。Debezium 将每个数据库表中的所有行级更改记录在更改事件流中,应用程序只需读取这些流即可按照它们发生的相同顺序查看更改事件。

简单来说:Debezium 类似Canal、Flink CDC等组件,也是一款可以监视数据实时变化并捕获数据的组件。可以将数据库中的数据实时同步到其余的组件中(如kafka)。

需要明确的是Debezium是依赖基于日志的CDC(Change Data Capture)技术实现的组件。我们应该知道另外存在基于查询的CDC技术,之前关于Canal的文章中已经简单介绍过,需要回顾的小伙伴可以重新回顾一下。

Debezium支持的数据源类型

当前最新版本支持的数据源类型为:

MySQL

MongoDB

PostgreSQL

Oracle

SQL Server

Db2

Cassandra

Vitess

二、Debezium基础架构

我们分别介绍上图的五个部分:

  1. 第一部分是我们要捕获的数据来源,一般是类似于MySql、PostgreSQL的数据库组件。或者Oracle、SqlServer等。

  2. 第二部分是Kafka Connect服务,其中包含Debezium MySQL以及Debezium PostgreSQL,他们是Debezium连接器,交由Kafka Connect服务管理,用来获取数据来源中的变更事件,并将事件发送到Kafka中。

  3. 第三部分是Apache Kafka组件,是一种高吞吐量的分布式发布订阅消息系统。Debezium连接器将采集到的变更事件存储在Kafka中。

  4. 第四部分也是Kafka Connect服务,其中包含了额外的连接器也就是JDBC Connector等,他们可以将Kafka中的数据消费写出到其余的组件上。

  5. 第五部分是常见的数据目的组件,比如elastic、Data Warehouse(数据仓库),第四部分的连接器消费到的消息最终会写入这些组件中。

到这里,我们显然可以看出Kafka Connect服务是Debezium依赖的重要对象,因此我们简单介绍一下Kafka Connect。

Kafka Connect

一句话概括:它是连接器的框架和运行时环境。

Kafka connector是一种处理数据的通用框架:kafka连接器制定了一种标准,用来约束kafka系统与其他系统的集成,简化了kafka连接器的开发、部署和管理过程。

这时候可能又有疑问?连接器是什么?

首先需要明确连接器分为两种:source connector以及sink connector。

source connector又称为源连接器,主要定义数据如何输入到Kafka中;sink connector则是将数据从Kafka中取出并放在其他地方。

而Kafka Connect可以简单理解为管理这些connector的一个服务。

到现在为止,我猜你会认为Debezium是一组源连接器。事实上Debezium的连接器(比如刚刚第二部分中的Debezium  MySQL以及Debezium  PostgreSQL)确实是属于源连接器,至于为什么会是一组连接器我们接下来会揭晓答案。目前我们只需要知道Debezium的主要内容就是各种连接器,然后我们会将 Debezium 连接器部署到 Kafka Connect 中。如果是 MySQL,他们会订阅 binlog,如果是Postgres,他们会订阅逻辑复制流,然后他们会将这些更改传播到相应的Kafka主题中。默认情况下, 每个捕获的表都有一个主题。

三、Debezium Connector

首先让我们简单介绍下Debezium是如何支持多种数据源的数据变更捕获的。

它本质上是基于事务日志的变更数据捕获,适用于各种数据库。问题是,去事务日志那里获取更改事件的想法很好,但不幸的是,没有单一的 API,没有单一的方法可以为所有数据库执行此操作。相反,我们需要弄清楚,我们如何从 Postgres中获取更改?我们如何将它们从MySQL中取出?这一直是一项原始的工程工作,这就是Debezium要做的事情。如何从这些不同的数据库中获取更改,然后产生更改事件,这些事件相当抽象,也相当通用。所以Debezium依据不同的数据库去封装不同的Connector去做 这个事情。

四、Debezium Architecture

4.1 基于Kafka的部署模式

最常见的情况就是我们之前介绍过的,通过 Apache Kafka Connect部署 Debezium。刚好我们再来简单回顾一下:

如图所示,部署了用于 MySQL 和 PostgresSQL 的 Debezium 连接器来捕获对这两种类型的数据库的更改。每个 Debezium 连接器都建立到其源数据库的连接:

  • MySQL 连接器使用客户端库来访问binlog .

  • PostgreSQL 连接器从逻辑复制流中读取。

Kafka Connect 作为 Kafka broker之外的单独服务运行。

默认情况下,来自同一个数据库表的更改将写入名称与表名相对应的 Kafka 主题。如果需要,我们可以通过配置 Debezium 的主题路由转换来调整目标主题名称。例如,我们可以:

  • 将记录路由到名称与表名不同的主题,比如说A表原本同步到Kafka的A主题,但是我们可以通过修改配置使A表同步到Kafka的B主题。

  • 将多个表的更改事件记录流式传输到单个主题中,比如说原本默认A表同步到Kafka的A主题,B表默认同步到Kafka的B主题,我们也可以通过修改配置使A表和B表的变更事件全部同步到Kafka的C主题。

更改事件记录在 Apache Kafka 中后,Kafka Connect 生态系统中的不同连接器可以将记录流式传输到其他系统和数据库中,例如 Elasticsearch、数据仓库和分析系统,或 Infinispan等缓存。

4.2 Debezium Server

部署 Debezium 的另一种方法是使用Debezium Server。Debezium Server是一个可配置的、即用型的应用程序,它将更改事件从源数据库流式传输到各种消息传递基础设施之上。

该模式的变更数据捕获管道的架构大概如下:

Debezium 服务器配置为使用Debezium连接器之一从源数据库捕获更改。更改事件可以序列化为不同的格式,如 JSON 或 Apache Avro,然后将事件发送到各种消息传递基础设施之上,如 Amazon Kinesis、Google Cloud Pub/Sub 或 Apache Pulsar。

4.3 Embedded Engine

另外一种使用Debezium连接器的方法是Embedded Engine。在这种情况下,Debezium 将不会通过Kafka Connect运行,而是作为嵌入到我们的自定义 Java 应用程序中的库。这对于在应用程序本身中使用更改事件(无需部署完整的Kafka和Kafka Connect集群)或将更改流式传输到 Amazon Kinesis 等替代消息传递代理非常有用。

五、Debezium 特性

Debezium连接器使用一系列相关功能和选项捕获数据更改:

快照:可选的,如果连接器已启动并且并非所有日志仍然存在,则可以拍摄数据库当前状态的初始快照。通常,当数据库已经运行了一段时间并且丢弃了事务恢复或复制不再需要的事务日志时,就会出现这种情况。执行快照有不同的模式,包括支持增量快照,可以在连接器运行时触发。

简单提一下快照的概念。首先我们知道事务日志存在于数据库中主要有两个原因,即事务恢复和复制。这意味着如果数据库表示“我不再需要这些日志”,它将丢弃它们。这意味着如果我们的数据库已经运行了一段时间,现在我们将设置 CDC,而它不会有两年前的事务日志文件,这就是快照的用武之地。当需要时Debezium将对当前数据进行一致的快照,然后,一旦快照完成,它将自动转到日志读取模式并继续从该确切时间点读取事务日志。

  • 过滤器:我们可以使用包含/排除列表过滤器来配置捕获的模式、表和列的集合。也就是说我们可以指定需要同步哪些表及列等。

  • 屏蔽:可以屏蔽来自特定列的值,例如,当它们包含敏感数据时。

  • 监控:大多数连接器都可以使用JMX进行监控。

  • 用于消息路由、过滤、事件扁平化等的即用型消息转换。

结语:

本篇主要内容到这里就结束了,本篇文章的主要目的在于帮助各位小伙伴了解Debezium大概是个什么东西,揭开它的神秘面纱,如果看到这里有个大概的了解,说明学习已经到位了。如果还是不太清楚,可能是由于本人功力不够深厚,没有说的通俗易懂,欢迎各位提出意见,thank you!

由于篇幅原因,本篇文章没有深入介绍相关特性,如果有需要,后期会详细介绍各种特性以及Debezium连接器的实现细节等。

CDC工具之Debezium相关推荐

  1. CDC框架之Debezium使用

    CDC框架之Debezium 简介 Debezium 是一组分布式服务,用于捕获数据库中的更改,以便您的应用程序可以看到这些更改并对其做出响应.Debezium 在更改事件流中记录每个数据库表中的所有 ...

  2. 深入理解CDC原理与Debezium数据接入流程和原理

    深入理解CDC原理与Debezium数据接入流程和原理 一.什么是WAL 二.什么是CDC 三.理解CDC客户端 四.Debezium数据接入原理 1.postgresql数据库对CDC的支持 2.p ...

  3. 数据实时增量同步之CDC工具—Canal、mysql_stream、go-mysql-transfer、Maxwell

    数据实时增量同步之CDC工具-Canal.mysql_stream.go-mysql-transfer.Maxwell 什么是CDC? CDC工具对比 实现原理: Mysql binlog 讲解: m ...

  4. cdc工具 postgresql_基于 Flink SQL CDC 的实时数据同步方案

    作者:伍翀 (云邪) 整理:陈政羽(Flink 社区志愿者) Flink 1.11 引入了 Flink SQL CDC,CDC 能给我们数据和业务间能带来什么变化?本文由 Apache Flink P ...

  5. cdc工具 postgresql_零编码打造异构数据实时同步系统——异构数据源CDC之2

    前言: 本篇是<异构数据源的CDC实时同步系统>的续篇,继续介绍不同CDC的实际测试效果. <异构数据源的CDC实时同步系统> 系列第一篇 (已完成)<零编码打造异构数据 ...

  6. cdc工具 postgresql_SQLServer CDC数据通过Kafka connect实时同步至分析型数据库 AnalyticDB For PostgreSQL及OSS-阿里云开发者社区...

    背景 SQLServer为实时更新数据同步提供了CDC机制,类似于Mysql的binlog,将数据更新操作维护到一张CDC表中. 开启cdc的源表在插入INSERT.更新UPDATE和删除DELETE ...

  7. Hudi自带工具DeltaStreamer的实时入湖最佳实践

    摘要:本文介绍如何使用Hudi自带入湖工具DeltaStreamer进行数据的实时入湖. 本文分享自华为云社区<华为FusionInsight MRS实战 - Hudi实时入湖之DeltaStr ...

  8. 华为云FusionInsight MRS实战 - Hudi实时入湖之DeltaStreamer工具最佳实践

    背景 传统大数据平台的组织架构是针对离线数据处理需求设计的,常用的数据导入方式为采用sqoop定时作业批量导入.随着数据分析对实时性要求不断提高,按小时.甚至分钟级的数据同步越来越普遍.由此展开了基于 ...

  9. 华为云MRS基于Hudi和HetuEngine构建实时数据湖最佳实践

    数据湖与实时数据湖是什么? 各个行业企业都在构建企业级数据湖,将企业内多种格式数据源汇聚的大数据平台,通过严格的数据权限和资源管控,将数据和算力开放给各种使用者.一份数据支持多种分析,是数据湖最大的特 ...

最新文章

  1. VS2005 VSTO 项目创建
  2. 你怎么了珍妮,你醒醒啊珍妮~ | 今日最佳
  3. StringBuilder与StringBuffer的一点笔记
  4. window.open完美替代window.showModalDialog
  5. oracle01144,ORA-01144
  6. 如何清除web 服务器的缓存
  7. 13.3 mysql常用命令
  8. Dubbo使用multicast广播注册中心暴露服务地址时启动报错empty notify
  9. kuangbin专题一 简单搜索
  10. 2.1 软件开发生命周期模型
  11. 前沿重器[4] | 腾讯搜索的Quer理解如何直击心灵
  12. 驾驶本到期换新,要想照片拍的好看,办理不耽误时间请按照以下步骤进行
  13. PHP - 使用file_get_contents下载远程文件到本地
  14. 云服务器多开账号,怎么用云服务器多开模拟器
  15. ocr初始化失败怎么办_win10重置初始化失败怎么办_win10重置初始化失败的处理办法...
  16. lan代表计算机什么,LAN 是什么
  17. Angular 4 Router
  18. 好游戏必须知道玩家需要什么?
  19. 计算机发展历程结绳记事,从结绳记事到竹简纸张,从计算机存储到光盘刻录,人类从未停止______...
  20. java时间戳 秒_Java:如何为时间戳添加秒?

热门文章

  1. ubuntu18.04 安装UHD+GNU Radio总结
  2. Java编程-计算矩形的周长和面积
  3. 爬虫学习之抓取手机销量排名
  4. Python数据交互式可视化 - 地理数据
  5. 相亲微信聊天开场白,这样开场,迅速吸引妹子注意力
  6. 公众号完成定位打卡功能
  7. html文本框无填充颜色,将文本框设定为:无填充颜色和无线条颜色
  8. 【quote】free HRTF Databases available on-line
  9. 大数据应用除了在体育项目中,还有这些切身感受得到的应用案例
  10. C++:char转换为int(char to int )