Debezium 版本:1.6
在研究 Flink CDC 时,其中涉及了 Debezium,便决定研究一下 Debezium。这篇文章简单介绍了 Debezium 是什么,以及它的架构和特性。后续文章中会后续介绍其功能特性以及如何使用。
Debezium 是一个分布式平台,可将您现有的数据库转换为事件流,因此应用程序可以感知到数据库中的每个行级更改并对此做出立即响应。
Debezium 构建在 Apache Kafka 之上,并提供与 Kafka Connect 兼容的 Connector 以便监控指定的数据库管理系统。从您的应用程序开始使用数据库的时候,Debezium 就会在 Kafka Log 中记录它们数据变更的历史记录。这会使您的应用程序可以轻松消费所有正确且完整的事件。即使您的应用程序意外停止,它也不会丢失任何事件:当应用程序重新启动时,会继续从上次它停止的位置重新消费。
最常见的架构是通过 Apache Kafka Connect 部署 Debezium。Kafka Connect 为在 Kafka 和外部存储系统之间系统数据提供了一种可靠且可伸缩性的方式。它为 Connector 插件提供了一组 API 和一个运行时:Connect 负责运行这些插件,它们则负责移动数据。通过 Kafka Connect 可以快速实现 Source Connector 和 Sink Connector 进行交互构造一个低延迟的数据 Pipeline:
下图展示了基于 Debezium 的变更数据捕获 Pipeline 架构:
如上图所示,部署了 MySQL 和 PostgresSQL 的 Debezium Connector 以捕获这两种类型数据库的变更。每个 Debezium Connector 都会与其源数据库建立连接:
除了 Kafka Broker 之外,Kafka Connect 也作为一个单独的服务运行。默认情况下,数据库表的变更会写入名称与表名称对应的 Kafka Topic 中。如果需要,您可以通过配置 Debezium 的 Topic 路由转换来调整目标 Topic 名称。例如,您可以:
变更事件记录在 Apache Kafka 中后,Kafka Connect 生态系统中的不同 Sink Connector 可以将记录流式传输到其他系统、数据库,例如 Elasticsearch、数据仓库、分析系统或者缓存(例如 Infinispan)。
另一种部署 Debezium 的方法是使用 Debezium Server。Debezium Server 是一个可配置的、随时可用的应用程序,可以将变更事件从源数据库流式传输到各种消息中间件上。
下图展示了基于 Debezium Server 的变更数据捕获 Pipeline 架构:
Debezium Server 配置使用 Debezium Source Connector 来捕获源数据库中的变更。变更事件可以序列化为不同的格式,例如 JSON 或 Apache Avro,然后发送到各种消息中间件,例如 Amazon Kinesis、Google Cloud Pub/Sub 或 Apache Pulsar。
使用 Debezium Connector 的另一种方法是嵌入式引擎。在这种情况下,Debezium 不会通过 Kafka Connect 运行,而是作为嵌入到您自定义 Java 应用程序中的库运行。这对于在您的应用程序本身内获取变更事件非常有帮助,无需部署完整的 Kafka 和 Kafka Connect 集群,也不用将变更流式传输到 Amazon Kinesis 等消息中间件上。
Debezium 是一组用于 Apache Kafka Connect 的 Source Connector。每个 Connector 都通过使用该数据库的变更数据捕获 (CDC) 功能从不同的数据库中获取变更。与其他方法(例如轮询或双重写入)不同,Debezium 的实现基于日志的 CDC:
Debezium Connector 可以通过一系列相关功能和选项来捕获数据变化:
欢迎关注我的公众号和博客: