专栏首页SmartSiDebezium 初了解

Debezium 初了解

Debezium 版本:1.6

在研究 Flink CDC 时,其中涉及了 Debezium,便决定研究一下 Debezium。这篇文章简单介绍了 Debezium 是什么,以及它的架构和特性。后续文章中会后续介绍其功能特性以及如何使用。

1. Debezium是什么

Debezium 是一个分布式平台,可将您现有的数据库转换为事件流,因此应用程序可以感知到数据库中的每个行级更改并对此做出立即响应。

Debezium 构建在 Apache Kafka 之上,并提供与 Kafka Connect 兼容的 Connector 以便监控指定的数据库管理系统。从您的应用程序开始使用数据库的时候,Debezium 就会在 Kafka Log 中记录它们数据变更的历史记录。这会使您的应用程序可以轻松消费所有正确且完整的事件。即使您的应用程序意外停止,它也不会丢失任何事件:当应用程序重新启动时,会继续从上次它停止的位置重新消费。

2. 架构

2.1 基于 Kafka Connect

最常见的架构是通过 Apache Kafka Connect 部署 Debezium。Kafka Connect 为在 Kafka 和外部存储系统之间系统数据提供了一种可靠且可伸缩性的方式。它为 Connector 插件提供了一组 API 和一个运行时:Connect 负责运行这些插件,它们则负责移动数据。通过 Kafka Connect 可以快速实现 Source Connector 和 Sink Connector 进行交互构造一个低延迟的数据 Pipeline:

  • Source Connector(例如,Debezium):将记录发送到 Kafka
  • Sink Connector:将 Kafka Topic 中的记录发送到其他系统

下图展示了基于 Debezium 的变更数据捕获 Pipeline 架构:

如上图所示,部署了 MySQL 和 PostgresSQL 的 Debezium Connector 以捕获这两种类型数据库的变更。每个 Debezium Connector 都会与其源数据库建立连接:

  • MySQL Connector 使用客户端库来访问 binlog。
  • PostgreSQL Connector 从逻辑副本流中读取数据。

除了 Kafka Broker 之外,Kafka Connect 也作为一个单独的服务运行。默认情况下,数据库表的变更会写入名称与表名称对应的 Kafka Topic 中。如果需要,您可以通过配置 Debezium 的 Topic 路由转换来调整目标 Topic 名称。例如,您可以:

  • 将记录路由到名称与表名不同的 Topic 中
  • 将多个表的变更事件记录流式传输到一个 Topic 中

变更事件记录在 Apache Kafka 中后,Kafka Connect 生态系统中的不同 Sink Connector 可以将记录流式传输到其他系统、数据库,例如 Elasticsearch、数据仓库、分析系统或者缓存(例如 Infinispan)。

2.2 Debezium Server

另一种部署 Debezium 的方法是使用 Debezium Server。Debezium Server 是一个可配置的、随时可用的应用程序,可以将变更事件从源数据库流式传输到各种消息中间件上。

下图展示了基于 Debezium Server 的变更数据捕获 Pipeline 架构:

Debezium Server 配置使用 Debezium Source Connector 来捕获源数据库中的变更。变更事件可以序列化为不同的格式,例如 JSON 或 Apache Avro,然后发送到各种消息中间件,例如 Amazon Kinesis、Google Cloud Pub/Sub 或 Apache Pulsar。

2.3 嵌入式引擎

使用 Debezium Connector 的另一种方法是嵌入式引擎。在这种情况下,Debezium 不会通过 Kafka Connect 运行,而是作为嵌入到您自定义 Java 应用程序中的库运行。这对于在您的应用程序本身内获取变更事件非常有帮助,无需部署完整的 Kafka 和 Kafka Connect 集群,也不用将变更流式传输到 Amazon Kinesis 等消息中间件上。

3. 特性

Debezium 是一组用于 Apache Kafka Connect 的 Source Connector。每个 Connector 都通过使用该数据库的变更数据捕获 (CDC) 功能从不同的数据库中获取变更。与其他方法(例如轮询或双重写入)不同,Debezium 的实现基于日志的 CDC:

  • 确保捕获所有的数据变更。
  • 以极低的延迟生成变更事件,同时避免因为频繁轮询导致 CPU 使用率增加。例如,对于 MySQL 或 PostgreSQL,延迟在毫秒范围内。
  • 不需要更改您的数据模型,例如 ‘Last Updated’ 列。
  • 可以捕获删除操作。
  • 可以捕获旧记录状态以及其他元数据,例如,事务 ID,具体取决于数据库的功能和配置。

Debezium Connector 可以通过一系列相关功能和选项来捕获数据变化:

  • 快照:当 Connector 启动时,并非所有的日志都存在,我们可以选择性的对数据库当前所有状态进行一次初始化快照。通常,当数据库运行了一段时间并丢弃了不再需要进行事务恢复或复制的事务日志时,就会出现这种情况。
  • 过滤器:可以通过包含/排除列表过滤器来配置捕获 Schema、表以及列。
  • 屏蔽:可以屏蔽指定列的值,例如,某列包含敏感数据时。
  • 监控:大多数 Connector 都可以使用 JMX 进行监控。
  • 开箱即用的消息转换:

欢迎关注我的公众号和博客:

参考:Debezium Architecture

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「首席看架构」CDC (捕获数据变化) Debezium 介绍

    Debezium是一个分布式平台,它将您现有的数据库转换为事件流,因此应用程序可以看到数据库中的每一个行级更改并立即做出响应。Debezium构建在Apache...

    首席架构师智库
  • Flink CDC 原理、实践和优化

    CDC 是变更数据捕获(Change Data Capture)技术的缩写,它可以将源数据库(Source)的增量变动记录,同步到一个或多个数据目的(Sink)...

    腾讯云大数据
  • Flink CDC 原理、实践和优化

    CDC 是变更数据捕获(Change Data Capture)技术的缩写,它可以将源数据库(Source)的增量变动记录,同步到一个或多个数据目的(Sink)...

    KyleMeow
  • Debezium-Flink-Hudi:实时流式CDC

    Debezium是一个开源的分布式平台,用于捕捉变化数据(change data capture)的场景。它可以捕捉数据库中的事件变化(例如表的增、删、改等),...

    zhisheng
  • FlinkSQL实时计算Demo

    用户8483969
  • 在confluent上测试connect source和sink

    为了实现分库分表前期的安全操作, 希望分表的数据还是能够暂时合并到原表中, 使用基于kafka connect实现, debezium做connect sour...

    XING辋
  • mongodb:实时数据同步(一)

    关于mongodb数据实时同步,如果只是做数据备份的话,直接搭建一个replica set集群或者shard集群就可以实现目的了。但这样的话作为备份库的节点都是...

    cosmozhu
  • Mysql实时数据变更事件捕获kafka confluent之debezium

    如果你的后端应用数据存储使用的MySQL,项目中如果有这样的业务场景你会怎么做呢?

    XING辋
  • Flink + Debezium CDC 实现原理及代码实战

    Debezium 是一个分布式平台,它将现有的数据库转换为事件流,应用程序消费事件流,就可以知道数据库中的每一个行级更改,并立即做出响应。

    kk大数据
  • kafka 连接器实现 Mysql 数据同步 Elasticsearch

    Mysql 作为传统的关系型数据库,主要面向 OLTP,性能优异,支持事务,但是在一些全文检索,复杂查询上面并不快。Elasticsearch 底层基于 Luc...

    Se7en258
  • Debezium结合kafka connect实时捕获mysql变更事件写入elasticsearch实现搜索流程

    本文将会实现一套完整的Debezium结合Kafka Connect实时捕获MySQL变更事件写入Elasticsearch并实现查询的流程.

    XING辋
  • 实时监视同步数据库变更,这个框架真是神器

    我们数据库中的数据一直在变化,有时候我们希望能监听数据库数据的变化并根据变化做出一些反应,比如更新对应变化数据的缓存、增量同步到其它数据源、对数据进行检测和审计...

    程序猿DD
  • Debezium教程翻译01:概览

    Debezium是一组分布式服务,用于捕获数据库中的更改,以便应用程序看到这些更改并作出响应。Debezium在一个变更事件流中记录每个数据库表中所有行级别的变...

    IT云清
  • 深入解读flink sql cdc的使用以及源码分析

    CDC,Change Data Capture,变更数据获取的简称,使用CDC我们可以从数据库中获取已提交的更改并将这些更改发送到下游,供下游使用。这些变更可以...

    大数据技术与应用实战
  • Debezium kafka connector 运行报错1236

    今天发现stag环境kafka connector运行报错( curl 172.18.1.1:8083/connectors/order-center-conn...

    XING辋
  • Flink Connector MongoDB CDC实现原理

    CDC全称是Change Data Capture,我们通常将能够捕获数据变更的技术称为CDC。目前通常描述的CDC技术主要面向数据库的变更,是一种用于捕获数据...

    代来
  • Flink社区 | Flink CDC 2.0 正式发布,核心改进详解

    摘要:本文由社区志愿者陈政羽整理,内容来源自阿里巴巴高级开发工程师徐榜江 (雪尽) 7 月 10 日在北京站 Flink Meetup 分享的《详解 Flink...

    大数据技术架构
  • 基于 Flink SQL CDC 的实时数据同步方案

    Flink 1.11 引入了 Flink SQL CDC,CDC 能给我们数据和业务间能带来什么变化?本文由 Apache Flink PMC,阿里巴巴技术专家...

    Spark学习技巧
  • 如何利用 Flink CDC 实现数据增量备份到 Clickhouse

    首先什么是CDC ?它是Change Data Capture的缩写,即变更数据捕捉的简称,使用CDC我们可以从数据库中获取已提交的更改并将这些更改发送到下游,...

    麒思妙想

扫码关注云+社区

领取腾讯云代金券