Debezium 是由 Red Hat 开源的一种基于变更数据捕获(CDC) 的分布式平台,专为实时捕获和传播数据库的变更事件而设计。Debezium 常见的使用场景包括:

  • 实时数据集成:将数据库变更同步到数据仓库或数据湖,支撑实时分析。
  • 维护缓存一致性:源头数据库变更时自动失效或者更新 Redis/Memcached 中的缓存条目。
  • 微服务解耦:在单体应用拆分场景中,避免多系统“双写”一致性问题,通过 CDC 触发下游业务逻辑(如更新搜索索引、发送通知等)。
  • 共享数据库:当多个应用共用同一个数据库的时候,一个应用提交的更改通常要被另一个应用感知到。Debezium 可以让每个应用直接监控数据库的更改,并且响应更改。
  • 命令查询职责分离:在命令查询职责分离(CQRS)架构模式中,Debezium 捕获数据更改并且持久化到全序流里,然后供那些需要异步更新只读视图的服务消费。

系统架构

Debezium 提供了三种部署架构:Apache Kafka Connect、独立服务器、嵌入式引擎。

Apache Kafka Connect

大多数情况下使用 Apache Kafka Connect 部署 Debezium,如上图所示。其中:

  • Debezium 作为源端连接器,将变更记录发送给 Kafka;
  • 目标连接器将记录从 Kafka 主题传播到其他系统。

例如,Debezium 提供 MySQL 或者 PostgreSQL 连接器分别用于捕获这两种数据库的变更。每个 Debezium 连接器都会建立一个对应的源端数据库连接:

  • MySQL 连接器使用客户端代码库来访问 binlog。
  • PostgreSQL 连接器从逻辑复制流读取。

Kafka Connect 作为独立的服务运行。

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

  • 将记录路由到名称与表名不同的主题;
  • 多个表的变更事件记录到一个主题中。

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

独立服务器

另外一种部署方式就是使用 Debezium 服务器,如下图所示:

用户可以配置 Debezium 服务器使用源端连接器捕获数据库变更,然后将其序列化成不同的格式(例如 JSON 或者 Apache Avro),然后将结果发送给各种消息平台,例如 Redis、Amazon Kinesis,、Google Cloud Pub/Sub 或者 Apache Pulsar。

嵌入式引擎

这种部署方式不需要依赖 Kafka Connect,而是直接将 Debezium 连接器作为一个代码库嵌入 Java 应用程序中,捕获数据变更,提供给应用程序使用,或者将数据流转给消息平台。

功能特性

Debezium 提供的主要功能如下:

  • 支持各种源端数据库,包括 MySQL、MariaDB、MongoDB、PostgreSQL、Oracle、SQL Server、Db2、Cassandra、Vitess、Spanner、Informix 等;
  • 可以捕获完整的数据变更,并且只捕获已提交的事务,避免中间状态或回滚操作,保证数据一致性。
  • 通过读取数据库事务日志而非轮询表,确保高性能和低侵入性,不影响源库性能。例如,对于 MySQL 或者 PostgreSQL,延迟在毫秒级;
  • 不需要对数据模型进行修改,例如增加 Last Updated 字段;
  • 支持数据删除操作的捕获;
  • 基于 Java 开发,资源占用低,支持分布式部署和高可用架构。通过 Kafka Connect 框架横向扩展,应对大数据量同步需求;
  • 支持模式、表、字段级别的过滤,可以指定捕获的包含列表或者排除列表;
  • 支持指定字段的数据脱敏,保护敏感信息;
  • 支持消息转换,包括路由、筛选、扁平化等;
  • 大多数连接器都可以通过 JMX 进行监控。

下载安装

Debezium 官方推荐使用 Docker 进行部署,并且给出了一个详细的安装步骤和示例,地址如下:

https://debezium.io/documentation/reference/3.1/tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88427.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88427.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88427.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从面向对象编程语言PHP转到Go时的一些疑惑?

前言 1、php中面向对象编程时 与 Go中的区别? 2、php中最常使用laravel框架,不用过多关注依赖注入和反射,在go中又该如何使用呢?是 舍弃? 本文是一个系统化梳理,帮助从 语言哲学 → 依赖注入在 Go 的现状 →…

Vue3中使用konva插件动态制作海报以及可在画布上随意移动位置

1、下载konva插件 官网地址 npm install vue-konva konva --save2、在主文件中引入,如main.js import VueKonva from vue-konva; app.use(VueKonva);3、组件内使用,我现在的布局是左侧是画布,右侧是相关设置(颜色、标题等&#…

政安晨【开源人工智能硬件】【ESP乐鑫篇】 —— 在macOS上部署工具开发环境(小资的非开发者用苹果系统也可以玩乐鑫)

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 前言 开源人工智能硬件会给你带来无限可能,玩开源硬件,环境和工具少…

Vue3 学习教程,从入门到精通,vue3学习中的JavaScript ES6 特性详解与案例(5)

vue3学习中的JavaScript ES6 特性详解与案例 ES6(ECMAScript 2015)是 JavaScript 的一个重要版本,引入了许多新特性,极大地提升了语言的表达能力和开发效率。本文将详细介绍 ES6 的主要特性,包括 let 和 const 命令、变…

深度学习模型1:理解LSTM和BiLSTM

深度学习模型1:理解LSTM和BiLSTM 因为最近科研复现论文中需要了解单向LSTM和双向LSTM,所以就学习了一下LSTM的基本原理,下面孬孬带着大家一起学习一下,感谢大家的一键三连 一、RNN 因为谈到LSTM,就必不可少的会考虑RNN…

[论文阅读] 软件工程 | 一篇关于开源许可证管理的深度综述

关于开源许可证管理的深度综述 论文标题:Open Source, Hidden Costs: A Systematic Literature Review on OSS License ManagementarXiv:2507.05270 Open Source, Hidden Costs: A Systematic Literature Review on OSS License Management Boyuan Li, Chengwei Liu…

Qt悬浮动态

粉丝悬浮动态,及抽奖程序#include "masklabel.h"MaskLabel::MaskLabel(int pos_x,QString fans_name,QWidget*parent):QLabel(parent) {this->setAlignment(Qt::AlignHCenter);//设置字体居中this->setStyleSheet("color:white;font-size:20px…

深入拆解Spring思想:DI(依赖注入)

在简单了解IoC与DI中我们已经了解了DI的基本操作,接下来我们来详解DI。(IoC详解请看这里)我们已经知道DI是“你给我,我不用自己创建”的原则。现在我们来看看Spring是如何实现“给”这个动作的,也就是依赖注入的几种方式。 Spring主要提供了…

Arcgis连接HGDB报错

文章目录环境症状问题原因解决方案环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:6.0 症状 Arcgis连接HGDB报错: 无法连接到数据库服务器来检索数据库列表;请检查服务器名称、用户名和密码信息,然后…

Android 应用常见安全问题

背景:OWASP MASVS(Mobile Application Security Verification Standard 移动应用安全验证标准)是移动应用安全的行业标准。 一、MASVS-STORAGE:存储 1.1 不当暴露FileProvider目录 配置不当的 FileProvider 会无意中将文件和目录暴露给攻击者…

Netty的内存池机制怎样设计的?

大家好,我是锋哥。今天分享关于【Netty的内存池机制怎样设计的?】面试题。希望对大家有帮助; Netty的内存池机制怎样设计的? 超硬核AI学习资料,现在永久免费了! Netty的内存池机制是为了提高高并发环境下的内存分配与回收效率…

Python 项目快速部署到 Linux 服务器基础教程

Linux的开源特性和强大的命令行工具使得部署流程高度自动化,可重复性强。本文将详细介绍如何从零开始快速部署Python项目到Linux服务器。 Linux系统因其稳定性、安全性和性能优化,成为Python项目部署的首选平台。无论是使用flask构建Web应用、FastAPI创…

SQL Server通过CLR连接InfluxDB实现异构数据关联查询技术指南

一、背景与需求场景 在工业物联网和金融监控场景中,实时时序数据(InfluxDB)需与业务元数据(SQL Server)联合分析: 工业场景:设备传感器每秒采集温度、振动数据(InfluxDB),需关联工单状态、设备型号(SQL Server)金融场景:交易流水时序数据(每秒万条)需实时匹配客…

机器学习详解

## 深入解析机器学习:核心概念、方法与未来趋势机器学习(Machine Learning, ML)作为人工智能的核心分支,正深刻重塑着我们的世界。本文将系统介绍机器学习的基本概念、主要方法、实际应用及未来挑战,为您提供全面的技术…

汽车间接式网络管理的概念

在汽车网络管理中,直接式和间接式管理是两种用于协调车载电子控制单元(ECUs)之间通信与行为的机制。它们主要用于实现车辆内部不同节点之间的协同工作,特别是在涉及网络唤醒、休眠、状态同步等场景中。### 直接式管理直接式网络管…

npm : 无法加载文件 D:\Node\npm.ps1,因为在此系统上禁止运行脚本。

npm : 无法加载文件 D:\Node\npm.ps1,因为在此系统上禁止运行脚本。 安装高版本的node.js,可能会导致这个问题, 脚本的权限被限制了,需要你设置用户权限。 get-ExecutionPolicy set-ExecutionPolicy -Scope CurrentUser remotesig…

搜索算法讲解

搜索算法讲解 深度优先搜索-DFS P1219 [USACO1.5] 八皇后 Checker Challenge 一个如下的 666 \times 666 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线&#xff…

深度学习---Rnn-文本分类

# 导入PyTorch核心库 import torch # 导入神经网络模块 import torch.nn as nn # 导入优化器模块 import torch.optim as optim # 导入函数式API模块 import torch.nn.functional as F # 导入数据集和数据加载器 from torch.utils.data import Dataset, DataLoader # 导入NumPy…

20250709解决KickPi的K7开发板rk3576-android14.0-20250217.tar.gz编译之后刷机启动不了

【整体替换】 Z:\20250704\rk3576-android14.0\rkbin清理编译的临时结果: rootrootrootroot-X99-Turbo:~$ cd 14TB/versions/rk3576-android14.0-20250217k7/ rootrootrootroot-X99-Turbo:~/14TB/versions/rk3576-android14.0-20250217k7$ ll rootrootrootroot-X99-…

怎么创建新的vue项目

首先,新建一个文件点文件路径,输入cmd