Debezuim详细介绍

参考视频:

        【尚硅谷】大数据Debezium开源工具(安装/部署/使用)_哔哩哔哩_bilibili

介绍:

  • Debezuim是用于捕获变更数据的开源工具,可以响应数据库的所有插入,修改,删除操作。
  • 它是一种CDC工具,工作原理和大家所熟悉的Canal,Maxwell一样,均是抽取 数据库日志 来变更的
  • Debezuim是构建在 Apach Kafka之上,并提供Kafka连接器来监视特定的数据库管理
  • 官网: https://debezuim.io/

架构

1 基于Kafka connector 部署Debezuim

        1.1 source connector : 负责把数据库中的记录发送到Kafka(Debezuim)

        1.2 sink connector : 负责把kafka topic中的数据发送到其他系统,如flume,es等,这个就不是debezuim做的了

2 使用Debezuim Server 部署 Debezuim(用的不多)

        Debezuim服务器是一个可配置的,随时可用的应用程序。它将变化数据从源数据库流式传输到其他系统(目前只支持sink到kinesis)

3 嵌入式引擎(最大的优点)

        Debezuim 作为嵌入式引擎,内置到其他应用中,然后就可以实时读取数据库的变化数据

        目前比较火的Flink的CDC,就是Debezuim

安装

准备:

        Mysql,Kafka,Zookeeper

1 数据库准备

1.1 mysql开启binlog
sudo vim /etc/my.cnf

[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=row

注意:

不可修改my.cnf的权限,否则mysql就会忽略这个配置文件

修改之后重启mysql: sudo systemctl restart mysqld

检查binlog是否开启成功:    mysql -uroot -paaaaaa -e "show variables like '%log_bin%'"

        查看到 log_bin 为 on 状态

2 准备测试的数据库和表

3 安装Mysql Connector

        3.1 下载

mysql connector :  debezuim-connector-mysq-1.7.1.Final-plugin.tar.gz

        3.2 解压
mkdir -p /opt/.../debezuim/connector # 创建一个目录,用于解压
tar -zxvf debezuim-connector-mysq-1.7.1.Final-plugin.tar.gz -C /opt/.../debezuim/connector

4 Kafka里配置        

cd ../kafka-2.4.1/config
vim connect-distributed.properties


[distributed.properties]
#kafka地址
bootstrap.servers=ip:9092,ip2:9092,ip3:9092
group.id= #自己配置

# 默认都是json格式,不做更改
key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter

# 是否存schema格式,格式会更复杂,根据需要可以开启或关闭
key.converter.schemas.enable=false
value.converter.schemas.enable=false

#offset的副本数,安全点设置成2
offset.storage.partitions=2

#放开插件的参数,配置到这一步即可,再往下配置会识别不出来
plugin.path=/opt/.../debezuim/connector

分发配置文件到其他集群,重启Kafka集群

5 启动各个组件

        启动 mysql connector
/opt/.../kafka-2.4.1/bin/connect-distributed.sh -daemon /opt/.../kafka-2.4.1/config/connect-distributed.properties


jps
查看ConnectDistributed是否存在
如果报错没有起来,则查看日志
cd /opt/.../kafka-2.4.1/log
cat connectDistributed.out

    6 检测Kafka Connector是否正常工作

# 检测kafka连接器的服务状态 
curl -H 'Accept:application/json' ip:8083

# 检查像kafka connect 注册的 连接器列表
curl -H 'Accept:application/json' ip:8083/connectors 

7 部署 Debezuim Mysql Connector

配置信息 

{

        # 连接器的名字

        “name”:"mydebezuim-mysql-connector",

        "config":{

                "connector.class": "io.debezuim.connector.mysql.MySqlConnector", #写死的

                "database.host":"ip", # 数据库的所在地址

                "database.port":"3306",

                "database.user":"root",

                "database.password":"123456",

                "database.server.id":"184054", # 连接器作为slave来工作,不和主机id一样即可

                "database.server.name":"bigdata", # 服务器名,会成为topic的前缀                

                "database.include.list":"database1,database2", #要监控的数据库列表,不列则监控所有

                "database.history.kafka.bootstrap.servers":"hadoop2:9092", # 存一些历史数据

                "database.history.kafka.topic ":"schema-changes.inventory", # schema的一些配置

        }

}

生成的topic :   [database.server.name].[database.include.list].[表名]  ,

        eg :  bigdata.database1.student

注册连接信息
curl -i -X POST -H "Appect:application/json" -H "Connect-Type:application/json" ip/8083/connectors/ -d '上面的配置信息json' 

快照:

        debezuim第一次启动,默认情况会把mysql的数据全都采集过来(以后只监控变化数据,再次重启也不会有快照),称为快照(canal没有此功能)

注意:

        oracle数据库不推荐,可能会出现一些问题

问答:

1 Debezuim能不能同步历史数据?

答: 可以。使用参数: snapshot.mode=initial 来控制,当第一次监控某个表的时候会先同步所有历史数据,然后再通过mysql的binlog监控所有变更的数据

2 Debezuim同步历史数据(做快照)的时候,这个时候如果有向Mysql的表写数据怎么办?

答:给表加锁: snapshot.locking.mode=minimal

3 默认是一个表一个topic,是否支持某个库下所有的表进入同一个topic?

答:支持,使用topic.routing.但有前提条件,这些表需要有相同的schema,也就是表结构

可参考文档:

Debezium是什么-CSDN博客实时数据同步利器debezium教程_debezium server-CSDN博客Debezium是什么-CSDN博客

CDC工具之Debezium-CSDN博客

spring 结合debezium :Debezium的基本使用(以MySQL为例)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/408485.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年12月CCF-GESP编程能力等级认证C++编程七级真题解析

一、单选题(共15题,共30分) 第1题 定义变量 double x ,如果下面代码输入为 100 ,输出最接近( )。 A:0 B:-5 C:-8 D:8 答案:B 第2题 对于下面动态规划方法实现的函数,以下选项中最适合表达其状态转移函数的为( )。 A: B: C: D:

[LWC] Components Communication

目录 Overview ​Summary Sample Code 1. Parent -> Child - Public Setter / Property / Function a. Public Property b. Public getters and setters c. Public Methods 2. Child -> Parent - Custom Event 3. Unrelated Components - LMS (Lightning Message…

Vue packages version mismatch 报错解决

问题 npm run dev 运行项目的过程中,报错 Vue packages version mismatch 解决方法 根据报错不难看出是 vue 与 vue-template-compiler 版本产生了冲突,vue 与 vue-template-compiler 的版本是需要匹配的。所以解决的办法就是先修改其中一个的版本将 v…

[C++]宏定义

C/C宏的基本使用方法 宏是C/C所支持的一种语言特性,我对它最初的印象就是它可以替换代码中的符号,最常见的例子便是定义一个圆周率PI,之后在代码中使用 PI 来代替具体圆周率的值。 确实如此,宏提供了一种机制,能够使…

动力学约束下的运动规划算法——两点边界值最优控制问题 OBVP

OBVP 即 optimal bundary value problem,即最优的BVP, BVP 问题其实就是解决 state sampled lattice planning 的基本操作方法。 如果,我们期望无人机从一个状态移动到另一个状态,即给定初始状态和终点状态,求解两个状…

每日五道java面试题之spring篇(五)

目录: 第一题. 使用 Spring 有哪些方式?第二题. 什么是Spring IOC 容器?第三题. 控制反转(IoC)有什么作用?第四题. IOC的优点是什么?第五题. BeanFactory 和 ApplicationContext有什么区别? 第一题. 使用 Spring 有哪…

【Web】CTFSHOW 常用姿势刷题记录(全)

目录 web801 web802 web803 web804 web805 web806 web807 法一:反弹shell 法二:vps外带 web808 web809 web810 web811 web812 web813 web814 web815 web816 web817 web818 web819 web820 web821 web822 web823 web824 web825…

03|Order by与Group by优化

索引顺序依次是 : name,age,position 案例1 EXPLAIN SELECT * FROM employees WHERE name LiLei AND position dev ORDER BY age;分析: 联合索引中只是用到了name字段做等值查询[通过key_len 74可以看出因为name字段的len74],在这个基础上使用了age进…

Javaweb之SpringBootWeb案例之配置优先级的详细解析

1. 配置优先级 在我们前面的课程当中,我们已经讲解了SpringBoot项目当中支持的三类配置文件: application.properties application.yml application.yaml 在SpringBoot项目当中,我们要想配置一个属性,可以通过这三种方式当中…

什么是MapReduce

1.1 MapReduce到底是什么 Hadoop MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。这个定…

docker build基本命令

背景 我们经常会构建属于我们应用自己的镜像,这种情况下编写dockerfile文件不可避免,本文就来看一下常用的dockerfile的指令 常用的dockerfile的指令 首先我们看一下docker build的执行过程 ENV指令: env指令用于设置shell的环境变量&am…

DBAPI如何使用数组类型参数

DBAPI如何使用数组类型参数 需求 根据多个id去查询学生信息 API创建 在基本信息标签&#xff0c;创建参数ids &#xff0c;参数类型选择 Array<bigint> 在执行器标签&#xff0c;填写sql&#xff0c;使用in查询 select * from student where id in <foreach ope…

《Docker 简易速速上手小册》第6章 Docker 网络与安全(2024 最新版)

文章目录 6.1 Docker 网络概念6.1.1 重点基础知识6.1.2 重点案例&#xff1a;基于 Flask 的微服务6.1.3 拓展案例 1&#xff1a;容器间的直接通信6.1.4 拓展案例 2&#xff1a;跨主机容器通信 6.2 配置与管理网络6.2.1 重点基础知识6.2.2 重点案例&#xff1a;配置 Flask 应用的…

设计模式学习笔记 - 面向对象 - 7.为什么要多用组合少用继承?如何决定该用组合还是继承?

前言 在面向对象编程中&#xff0c;有一条非常经典的设计原则&#xff1a;组合优于继承&#xff0c;多用组合少用继承。 为什么不推荐使用继承&#xff1f; 组合比继承有哪些优势&#xff1f; 如何判断该用组合还是继承&#xff1f; 为什么不推荐使用继承&#xff1f; 继承…

企业微信怎么变更企业名称?

企业微信变更主体有什么作用&#xff1f;现在很多公司都用企业微信来加客户&#xff0c;有时候辛辛苦苦积累了很多客户&#xff0c;但是公司却因为各种各样的原因需要注销&#xff0c;那么就需要通过企业微信变更主体的方法&#xff0c;把企业微信绑定的公司更改为最新的。企业…

内核解读之内存管理(8)什么是page cache

文章目录 0. 文件系统的层次结构1.什么是page cache2.感观认识page cache3. Page Cache的优缺点3.1 Page Cache 的优势3.2 Page Cache 的劣势 0. 文件系统的层次结构 在了解page cache之前&#xff0c;我们先看下文件系统的层次结构。 1 VFS 层 VFS &#xff08; Virtual Fi…

Gitflow:一种依据 Git 构建的分支管理工作流程模式

文章目录 前言Gitflow 背景Gitflow 中的分支模型Gitflow 的版本号管理简单模拟 Gitflow 工作流 前言 Gitflow 工作流是一种版本控制流程&#xff0c;主要适用于较大规模的团队。这个流程在团队中进行合作时可以避免冲突&#xff0c;并能快速地完成项目&#xff0c;因此在很多软…

人工智能与机器学习行业新闻:颠覆企业运营方式的 AI 趋势

AI 推动业务转型 人工智能 (AI) 和机器学习已经在重塑各行各业的业务模式。AI 通过处理和整合数据支持战略决策的制定&#xff0c;其规模和速度远远超过了人脑。无疑&#xff0c;未来我们还将在 AI 领域取得许多重大突破&#xff0c;而拥有大量数据的行业可能会从人工智能革命…

Mac OS 下载安装与破解Typora

文章目录 下载Typora破解Typora1. 进入安装目录2. 找到并打开Lincense文件3. 修改激活状态4. 重新打开Typora 下载Typora 官网地址&#xff1a;typora官网 下载最新Mac版&#xff0c;正常安装即可 破解Typora 打开typora,可以看到由于未激活&#xff0c;提示使用期限还剩下15…

Three.js-01快速入门

1.导入three.js库 说明&#xff1a;资源在主页里面能够找到&#xff0c;如果不想使用本地的three.module.js文件&#xff0c;也可以使用在线的文件。 import * as THREE from "../three.module.js"// import * as THREE from https://unpkg.com/three/build/three.m…