Debezium发布历史129

原文地址: https://debezium.io/blog/2022/10/06/debezium-oracle-series-part-2/

欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.

Debezium for Oracle - Part 2: Running the connector
October 6, 2022 by Chris Cranford
debezium oracle examples

这篇文章是一个由三部分组成的系列文章的一部分,该系列文章旨在探讨使用Debezum来吸收甲骨文数据库中使用甲骨文日志程序的更改。如果你错过了,本系列的第一部分是 在这里 .

在第二部分中,我们将在第一部分的基础上,使用动物园管理员、卡夫卡和卡夫卡连接来部署甲骨文连接器。我们将讨论连接器的各种配置选项,以及它们为什么重要。最后,我们将看到连接器的运行!

建立卡夫卡连接和先决条件
为了使用Debezum,需要启动三个单独的服务:

zookeeper

kafka broker

kafka connect

我们会利用 码头工人 运行上述服务的集装箱。使用单独的容器简化了部署过程,这样您就可以看到Debez铵在起作用。此外,我们亦会下载 甲骨文JDBC驱动程序 并将其挂载为卡夫卡连接容器的一部分。

在生产中使用这些服务的多个实例提供性能、可靠性和容错性。部署通常会涉及一个平台,比如用于管理多个容器的开放转移或库伯内特斯,或者您将使用专用硬件并手动管理这个。

对于这个博客,我们将使用每个服务的单个实例来保持它的简单性。

动物园管理员和卡夫卡容器是短暂的。通常情况下,卷将被安装在主机机器上,以便在容器停止时,由容器管理的数据会继续存在。为了简单起见,我们跳过了这一步,这样当容器停止时,数据将丢失。

先决条件:动物园管理员
动物园管理员服务是第一个开始的服务。卡夫卡经纪人使用动物园管理员处理卡夫卡经纪人的领导权选举,并管理集群中的服务发现,以便每个经纪人知道当一个经纪人终止时,一个兄弟姐妹何时加入或离开,以及新的领导人是为某个特定主题/分区元组服务的。

打开一个新的终端窗口并运行以下命令:

docker run -it --rm --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888
quay.io/debezium/zookeeper:1.9
… 饲养员 集装箱以交互方式启动,并在停止时销毁。容器被命名为zookeeper ,这在启动未来集装箱时非常重要。

先决条件:开始卡夫卡
卡夫卡服务是必须启动的第二项服务,它取决于动物园管理员的服务。Debezum生成更改事件发送到由卡夫卡经纪人管理的主题。

打开一个新的终端窗口并运行以下命令:

docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper
quay.io/debezium/kafka:1.9
… 卡夫卡 集装箱以交互方式启动,并在停止时销毁。容器被命名为kafka ,这将是重要的启动未来的容器。此外, 卡夫卡 服务还链接到 饲养员 服务,意思是标准名称zookeeper 会对运行 饲养员 服务。

先决条件:下载甲骨文JDBC驱动程序
德贝兹卡夫卡连接图像不与甲骨文JDBC驱动程序发送。若要对甲骨文使用Debezns,JDBC驱动程序必须手动下载并安装到Debezikafka连接图像中。

航行到 JDBC驱动程序 下载页面。在发布时,甲骨文最新的数据库是甲骨文21,所以点击ojdbc8.jar 链接在甲骨文21C部分。下载的JAR将在下一节中使用,将驱动程序添加到Debezns的卡夫卡连接容器的基本图像中。

先决条件:启动卡夫卡连接
卡夫卡连接服务是第三个也是最后一个必须启动的服务,它依赖于卡夫卡服务。卡夫卡连接负责管理所有连接器及其相关工作负载,并且是运行甲骨文的Debezum连接器的运行时的运行时环境。

打开一个新的终端窗口并运行以下命令:

docker run -it --rm --name connect -p 8083:8083
-e GROUP_ID=1
-e CONFIG_STORAGE_TOPIC=my_connect_configs
-e OFFSET_STORAGE_TOPIC=my_connect_offsets
-e STATUS_STORAGE_TOPIC=my_connect_statuses
–link kafka:kafka
–link dbz_oracle21:dbz_oracle21
-v /path/to/ojdbc8.jar:/kafka/libs/ojdbc8.jar
quay.io/debezium/connect:1.9
… 连接 集装箱以交互方式启动,并在停止时销毁。容器被命名为connect ,几个环境变量控制几个需要的主题和一些需要的配置参数的命名。此外, 连接 集装箱连结至 卡夫卡 容器,意思是标准名称kafka 会对运行 卡夫卡 经纪服务。

与先前的容器不同,我们使用-v 指挥官。论点采用了local-path:container-path .

… 当地路径 代表了ojdbc8.jar 文件存在于主机上.… 集装箱式通道 应保留/kafka/libs/ojdbc8.jar ,在卡夫卡连接类路径上安装驱动程序。

创建一些初始测试数据
如果在本系列的第一部分中创建的甲骨文数据库使用甲骨文容器注册表映像,则数据库中不存在初始数据。虽然这并不一定会带来问题,但理想的情况下,我们希望在部署甲骨文连接器时快照一些数据;因此,在部署之前必须存在一些初始数据。

在一个新的终端中,让我们使用sql+连接到数据库,并创建一个带有一些初始数据的新表。下面使用普通用户,连接到可插入数据库ORCLPDB1 .在连接到具有要捕获的表的现有环境时,可以安全地跳过这一步。

docker exec -it -e ORACLE_SID=ORCLPDB1 dbz_oracle21 sqlplus c##dbzuser@ORCLPDB1
连接后,使用以下SQL创建表和一些初始数据:

CREATE TABLE customers (id number(9,0) primary key, name varchar2(50));
INSERT INTO customers VALUES (1001, ‘Salles Thomas’);
INSERT INTO customers VALUES (1002, ‘George Bailey’);
INSERT INTO customers VALUES (1003, ‘Edward Walker’);
INSERT INTO customers VALUES (1004, ‘Anne Kretchmar’);
COMMIT;
默认情况下,重做日志只捕获最小的更改信息。CUSTOMERS 因为补充日志记录只设置在数据库级别。

如果你熟悉后格来格的REPLICA IDENTITY 或者我的binlog_format 甲骨文提供了一个类似的机制,称为表级补充日志记录,我们在本系列的第一部分中提到了它。表级别的补充日志控制用户修改行时重做日志中捕获的列。将表的补充日志级别设置为(ALL) COLUMNS 甲骨文捕捉到与之相关的变化的保证INSERT ,UPDATE ,以及DELETE 重做日志中的操作。

使用以下SQL设置表的补充日志级别:

ALTER TABLE customers ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
假设捕获的表的补充日志级别设置错误。在这种情况下,连接器将记录一个警告,让您知道存在一个问题,这样您就可以调整表的设置来捕获所有更改。

值得注意的是,虽然这个示例使用相同的用户帐户来创建这个。CUSTOMERS 连接器用来连接的表,连接器使用的用户与甲骨文数据库中拥有表的用户有所不同,这一点并不少见。在这种情况下,连接器用户必须拥有读取捕获的表的权限,要求SELECT 每桌允许。

部署甲骨文连接器
我们现在准备好了,准备好了。在注册卡夫卡连接连接器之前,让我们深入研究一下配置。

下面是我们将在这个示例中使用的示例配置:

{
“name”: “customers-connector”,
“config”: {
“connector.class”: “io.debezium.connector.oracle.OracleConnector”,
“tasks.max”: “1”,
“database.hostname”: “dbz_oracle21”,
“database.port”: “1521”,
“database.user”: “c##dbzuser”,
“database.password”: “dbz”,
“database.dbname”: “ORCLCDB”,
“database.pdb.name”: “ORCLPDB1”,
“database.server.name”: “server1”,
“table.include.list”: “C##DBZUSER.CUSTOMERS”,
“database.history.kafka.bootstrap.servers”: “kafka:9092”,
“database.history.kafka.topic”: “schema-changes”
}
}
让我们来看看这些配置选项的含义。

name
这是分配给连接器的名称,在卡夫卡连接集群中,连接器必须是唯一的。

connector.class
这是已部署连接器的类实现。每一个Debezum源连接器都有一个唯一的类名称来标识正在部署的连接器。

tasks.max
这是分配给卡夫卡连接中连接器部署的最大任务数。大多数德贝兹连接器依次从源数据库读取昌塞,因此,一个值1 很有道理。

database.hostname
这是数据库主机名或IP地址。因为我们指定了一个链接dbz_oracle21 当启动卡夫卡连接时,我们可以在这里使用这个名称来标识运行甲骨文数据库的容器。如果在另一个主机上有一个原有的甲骨文环境,请在此配置属性中指定该主机的名称。

database.port
这是数据库用来监听连接的端口。甲骨文的默认端口是1521 但是数据库管理员可以将其配置为任何可用端口。如果您正在连接到先前的甲骨文实例,请使用数据库使用的端口。

database.user
这是用于JDBC连接的数据库用户帐户。这应该是本系列第一部分中创建的通用用户,即c##dbzuser 用户。如果您正在连接到一个不支持多租户的环境,那么这将是您在没有普通用户前缀的根数据库中创建的用户。

database.password
这是数据库用户帐户密码.

database.dbname
这是连接器通信的数据库服务。不管是否启用了多租户,这总是单数或根容器数据库。

database.pdb.name
这是可选的可插入数据库系统标识符。在连接到支持多租户并引用PDB的数据库时,必须提供此属性。如果省略此字段,连接器假设数据库不支持多租户。

database.server.name
连接器创建的所有主题的前缀。在卡夫卡连接集群中的所有主题部署中,这个值必须是唯一的。

table.include.list
用逗号分隔的正则表达式或简单的表名称列表.

识别连接器将捕获的表。

database.history.kafka.bootstrap.servers
这是存储数据库历史主题的卡夫卡代理的URL。因为我们指定了一个链接kafka 当启动卡夫卡连接时,我们可以在这里使用这个名称来指向代理及其端口。

database.history.kafka.topic
这是将存储数据库架构历史的主题名称。连接器重新启动时将恢复此主题,从此主题填充内存中的关系模型。

除了后GERGSQL之外,所有的Debezum连接器都使用架构历史来存储所有表的模式。这通常不适合甲骨文数据库,特别是在部署没有多租赁的连接器时。

若要将存储限制为仅包含列表中的表,请通过设置database.history.store.only.captured.tables.ddl 财产true .

有关其他连接器属性的更多信息,您可以查看甲骨文 文件 更多的细节。

若要部署连接器,请将上述配置保存到一个称为register-oracle.json .现在,打开一个新的终端窗口curl 命令用卡夫卡连接注册连接器:

curl -i -X POST -H “Accept:application/json”
-H “Content-Type:application/json”
localhost:8083/connectors
-d @register-oracle.json
如注册成功,则由 连接 容器正在运行,将开始执行数据在CUSTOMERS 表我们还可以通过使用卡夫卡控制台消费者工具和将主题的内容读取到本地终端来确认卡夫卡中存在的数据。

要检查主题的内容,请使用注册连接器的相同终端并执行以下命令:

docker exec -it kafka /kafka/bin/kafka-console-consumer.sh
–bootstrap-server 0.0.0.0:9092
–from-beginning
–property print.key=true
–topic server1.C__DBZUSER.CUSTOMERS
主题将架构名称从C##DBZUSER 到C__DBZUSER 因为主题命名策略自动保证主题的名称与avro兼容,后者不允许哈希符号字符。

上述命令的输出应类似于以下内容:

{
“schema”:{

},
“payload”:{
“before”:null,
“after”:{
“ID”:“1001”,
“NAME”:“Salles Thomas”
},
“source”:{
“version”:“1.9.6.Final”,
“connector”:“oracle”,
“name”:“server1”,
“ts_ms”:1665102121000,
“snapshot”:“true”,
“db”:“ORCLPDB1”,
“sequence”:null,
“schema”:“C##DBZUSER”,
“table”:“CUSTOMERS”,
“txId”:null,
“scn”:“2868546”,
“commit_scn”:null,
“lcr_position”:null,
“rs_id”:null,
“ssn”:0,
“redo_thread”:null
},
“op”:“r”,
“ts_ms”:1665102126961,
“transaction”:null
}
}

现在您可以使用sql+终端,在那里您创建了初始测试数据。INSERT ,UPDATE ,或DELETE 的纪录CUSTOMERS 表您将在终端看到相应的更改事件,该事件正在跟踪server1.C__DBZUSER.CUSTOMERS 专题。

你要注意到,斯格auto-commit 默认情况下,请确保在更改数据时自动提交更改。CUSTOMERS 表,以便连接器的挖掘过程能够看到它。

结论
在本系列的第一部分中,我们讨论了甲骨文是什么,为什么它在数据库世界如此流行,以及如何安装和配置数据库。在本系列的这一部分中,我们讨论了如何安装所有的先决服务,包括动物园管理员、阿帕奇卡夫卡和阿帕奇卡夫卡连接。此外,我们还为CUSTOMERS 表

在本系列的下一部分中,我将讨论性能、如何监视连接器、最关键的度量标准以及为什么它们是必需的。我们甚至可以构建一个带有度量的小型仪表板。

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

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

相关文章

微服务间请求响应定义方式对比 (Apache Dubbo, IDL 定义,RESTful API)

服务间请求响应定义方式对比 1. Apache Dubbo 分布式RPC Apache Dubbo 是一种分布式服务框架,它提供了一种透明的 RPC 机制,可以让服务之间像调用本地方法一样进行调用。Dubbo 使用 IDL 来定义服务接口,并使用各种协议(如 HTTP、…

Ubuntu下Anaconda+PyCharm搭建PyTorch环境

这里主要介绍在condapytorch都正确安装的前提下,如何通过pycharm建立开发环境; Ubuntu下AnacondaPyCharm搭建PyTorch环境 系统环境:Ubuntu22.04 conda: conda 23.11.0 pycharm:如下 condapytorch的安装教程介绍,请点击这里&…

jmeter-问题四:json断言时,预期结果那里如何不写成固定值?

文章目录 json断言时,预期结果那里如何不写成固定值?定义用户参数,然后在json断言的expected value处引用使用csv数据,然后在json断言的expected value处引用 json断言时,预期结果那里如何不写成固定值? 定…

软件实例分享,茶楼收银软件管理系统,支持计时计费商品销售会员管理定时语音提醒功能

软件实例分享,茶楼收银软件管理系统,支持计时计费商品销售会员管理定时语音提醒功能 一、前言 以下软件教程以 佳易王茶社计时计费管理系统软件V18.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 问:这个软…

腾讯云4核8G服务器多少钱?

腾讯云4核8G服务器多少钱?轻量应用服务器4核8G12M带宽一年446元、646元15个月,云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元,5年6490.44元,标准型SA2服务器1444.8元一年,在txy.wiki可以查询详细配置和精准报价…

arkTS开发鸿蒙OS个人商城案例【2024最新 新年限定开发案例QAQ】

龙年前述 源码获取>文章下方二维码,回复关键字“鸿蒙OS商场源码” 前言 arkTS是华为自己研发的一套前端语言,是在js和ts技术的基础上又进行了升级而成! 本篇文章会带领大家通过arkTSnode.jsmongoDB来完成一个鸿蒙OS版本的商城案例&…

一起玩儿Proteus仿真(C51)——06. 红绿灯仿真(二)

摘要:本文介绍如何仿真红绿灯 今天来看一下红绿灯仿真程序的具体实现方法。先来看一下整个程序的原理图。 在这个红绿灯仿真实验中,每个路口需要控制的设备是2位数码管显示倒计时以及红黄绿灯的亮灭。先来看一下数码管的连接方法。 数码管的8根LED显示…

Go语言的GC

参考链接 https://liangyaopei.github.io/2021/01/02/golang-gc-intro/ Go语言的垃圾回收机制是一种自动管理内存的机制,它负责在运行时自动回收不再被使用的内存。 以下是关于Go语言GC的一些关键点: 1. 并发标记清除算法(Concurrent Mark a…

php5.0到5.6的新特性,开发时应注意版本的兼容性

php5.0 使用了Zend 2 引擎。 增加完善的面向对象模型 增加了新关键字,包括this,try,catch,public,private,protected等 改变strrpos() 和 strripos()使用整个字符串作为 needle。 改变array_merge() 只接受数组 改变非法使用字符串偏移量会导致 E_ERROR 而不是…

大模型Layer normalization知识

Layer Norm 的计算公式 Layer Norm(层归一化)是一种用于神经网络中的归一化技术,用于提高模型的训练效果和泛化能力。 RMS Norm 的计算公式 RMS Norm 的作用是通过计算输入 X 的均方根,将每个样本的特征进行归一化,使…

AD域国产替代方案,助力某金融企业麒麟信创电脑实现“真替真用”

近期收到不少企业客户反馈采购的信创PC电脑用不起来,影响信创改造的进度。例如,某金融企业积极响应国产化信创替代战略,购置了一批麒麟操作系统电脑。分发使用中发现了如下问题: • 当前麒麟操作系统电脑无法做到统一身份认证&…

优秀网络安全运营专家的成长之路

文章目录 前言一、基础阶段:掌握必要的网络安全运营技能1、了解网络系统2、网络安全监控3、网络流量分析4、日志分析和搜索能力5、端点安全保护6、加入活跃的网络和安全社区7、紧跟最新的行业咨询二、中级阶段:更深入地了解网络威胁1、情报分析能力2、云计算安全3、主动威胁搜…

【Java】零基础蓝桥杯算法学习——线性动态规划(一维dp)

线性dp——一维动态规划 1、考虑最后一步可以由哪些状态得到,推出转移方程 2、考虑当前状态与哪些参数有关系,定义几维数组来表示当前状态 3、计算时间复杂度,判断是否需要进行优化。 一维动态规划例题:最大上升子序列问题 Java参…

面试技术栈 —— 2024网易雷火暑期实习真题

面试技术栈 —— 2024网易雷火暑期实习真题 1. 最长递增子序列。2. 集中限流和单机限流你觉得哪个好?3. redis部署服务器配置,为什么不用哨兵?4. 讲讲分布式session的原理。5. 数据库:表数据量大了,如何分表&#xff1…

Python 读取pdf文件

Python 实现读取pdf文件简单示例。 安装命令 需要安装操作pdf的三方类库,命令如下: pip install pdfminer3K 安装过程如下: 引入类库 需要引入很多的类库。 示例如下: import sys import importlib importlib.reload(sys)fr…

cordic算法圆周系统计算sin、cos、平方和开根、atan、坐标系变换

cordic算法圆周系统计算sin、cos、平方和开根、atan 一、cordic圆周系统旋转模式和向量模式1.1 旋转模式1.2 向量模式 二、一些需要考虑的事项2.1角度范围2.2输入正负2.3关于迭代精度2.4坐标系旋转 参考文献: 若想计算 s i n sin sin、 c o s cos cos、 x 2 y 2 \s…

SpringCloud入门概述

1. 介绍 Spring Cloud 1.1 什么是 Spring Cloud Spring Cloud 是一个基于 Spring Boot 的微服务架构开发工具集,它为开发者提供了一系列开箱即用的工具和库,用于构建分布式系统中的微服务架构。Spring Cloud 提供了诸如服务发现、配置中心、负载均衡、…

【MySQL】索引事务

MySQL索引事务 1. 索引1.1 概念1.2 作用1.3 使用场景1.4 使用1.5 案例 2. 事务2.2 事物的概念2.3 使用 3. 内容重点总结 1. 索引 1.1 概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类…

【leetcode热题100】不同的二叉搜索树

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出:5示例 2: 输入:n 1 输出:1 …

算法学习——LeetCode力扣回溯篇2

算法学习——LeetCode力扣回溯篇2 40. 组合总和 II 40. 组合总和 II - 力扣(LeetCode) 描述 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字…