这篇文章是一个由三部分组成的系列文章的一部分,探索如何使用Debezium使用Oracle LogMiner开云体育官方注册网址从Oracle数据库中摄取更改。开云体育电动老虎机如果您错过了它,本系列的第一部分是在这里

在第二部分中,我们将在第一部分的基础上,使用Zookeeper、Kafka和Kafka Connect部署Oracle连接器。我们将讨论连接器的各种配置选项,以及它们为何如此重要。最后,我们将看到连接器的实际操作!

设置Kafka Connect和先决条件

为了使用Debezium,需要启开云体育官方注册网址动三个单独的服务:

我们将使用码头工人容器来运行上述服务。使用单独的容器简化了部署过程,这样您就可以看到Debezium的实际运行。开云体育官方注册网址此外,我们还将下载Oracle JDBC驱动程序并将其作为Kafka Connect容器的一部分。

在生产环境中使用这些服务的多个实例可以提供性能、可靠性和容错能力。部署通常需要使用OpenShift或Kubernetes这样的平台来管理多个容器,或者使用专用硬件并手动管理。

对于本博客,我们将使用每个服务的单个实例来简化。

Zookeeper和Kafka容器是短暂的。通常,卷将被挂载在主机上,这样当容器停止时,容器管理的数据将继续存在。为了简单起见,我们跳过了这一步,这样当容器停止时,数据就会丢失。

前提条件:启动Zookeeper

Zookeeper服务是第一个启动的服务。Kafka代理使用Zookeeper来处理Kafka代理的领导选举,并管理集群内的服务发现,以便每个代理都知道兄弟成员何时加入或何时离开,以及给定主题/分区元组的新领导是谁。

打开新的终端窗口,执行如下命令:

Docker运行-it——rm——name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 \ quay.io/debez开云体育官方注册网址ium/zookeeper:1.9

动物园管理员容器以交互模式启动,并在停止时销毁。容器被命名为动物园管理员,这在启动未来的容器时非常重要。

前提条件:启动Kafka

Kafka服务是第二个必须启动的服务,它依赖于Zookeeper服务。开云体育官方注册网址Debezium产生变更事件,发送到Kafka代理管理的主题。

打开新的终端窗口,执行如下命令:

Docker运行-it——rm——name kafka -p 9092:9092——link zookeeper:zookeeper \ quay.io/debezi开云体育官方注册网址um/kafka:1.9

卡夫卡容器以交互模式启动,并在停止时销毁。容器被命名为卡夫卡,这对于未来的容器来说非常重要。此外,卡夫卡服务还链接到动物园管理员服务,即规范名称动物园管理员将解析到运行动物园管理员服务。

前提条件:下载Oracle JDBC驱动程序

Debe开云体育官方注册网址zium Kafka Connect镜像没有随Oracle JDBC驱动程序一起发布。为了在Orac开云体育官方注册网址le中使用Debezium,必须手动下载JDBC驱动程序,并将其挂载到Debezium Kafka Connect映像中。

导航到Oracle数开云体育电动老虎机据库JDBC驱动程序下载页面。在本文发布时,最新的Oracle数据库是Oracle 21,因此单击开云体育电动老虎机ojdbc8.jarOracle 21c节下的链接。下载的jar将在下一节中使用,将驱动程序添加到Debezium的Kafka Connect容器的基本映像中。开云体育官方注册网址

前提条件:启动Kafka Connect

Kafka Connect服务是第三个也是最后一个必须启动的服务,它依赖于Kafka服务。Kafka Connect负责管理所有连接器及其相关的工作负载,并且当我们很快部署Debezium连接器时,它是负责运行Oracle Debezium连接器的运行时环境。开云体育官方注册网址

打开新的终端窗口,执行如下命令:

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_offset \ -e STATUS_STORAGE_TOPIC=my_connect_status \——link kafka:kafka \——link dbz_oracle21:dbz_oracle21 \ -v /path/to/ojdbc8.jar:/kafka/libs/ojdbc8.jar \ quay.io/debeziu开云体育官方注册网址m/connect:1.9

连接容器以交互模式启动,并在停止时销毁。容器被命名为连接,几个环境变量控制几个必需的主题和一些必需的配置参数的命名。此外,连接容器链接到卡夫卡容器,即规范名称卡夫卡将解析到运行卡夫卡代理服务。

与以前的容器不同,我们使用- v命令。参数的格式为局部路径:容器路径

局部路径表示ojdbc8.jar文件在主机上存在。的容器路径应该保持/卡夫卡/ libs / ojdbc8.jar,在Kafka Connect类路径上安装驱动程序。

创建一些初始测试数据

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

在一个新的终端中,让我们使用SQL*Plus连接到数据库,并用一些初始数据创建一开云体育电动老虎机个新表。下面以普通用户连接可插拔数据库开云体育电动老虎机ORCLPDB1.当连接到具有要捕获的表的现有环境时,可以安全地跳过此步骤。

docker exec -it -e ORACLE_SID=ORCLPDB1 dbz_oracle21 sqlplus c## #dbzuser@ORCLPDB1

一旦连接,使用下面的SQL创建一个表和一些初始数据:

创建表格客户(身份证号码(90主要的关键、名称varchar250));插入客户1001萨勒斯托马斯);插入客户1002乔治贝利);插入客户1003爱德华•沃克);插入客户1004安妮Kretchmar);提交

默认情况下,重做日志只捕获关于更改的最小信息客户表,因为补充日志记录仅在数据库级别设置。开云体育电动老虎机

如果你熟悉PostgreSQL的副本的身份或MySQL的binlog_format, Oracle提供了一种类似的机制,称为表级补充日志记录,我们在本系列的第一部分中提到过。当用户修改行时,表级的补充日志控制重做日志中捕获的列。将表的补充日志级别设置为(全部)列保证Oracle捕获与插入更新,删除重做日志中的操作。

使用下面的SQL语句设置表的补充日志级别:

改变表格客户添加补充日志数据(所有

假设捕获表的补充日志级别设置不正确。在这种情况下,连接器将记录一个警告,让您知道存在问题,以便您可以调整表的设置以捕获所有更改。

值得指出的是,虽然本例使用相同的用户帐户来创建该文件客户在Oracle数据库中,连接器使用的用户与拥有Oracle数据库中表的用户是不同的,这一点并不罕见。开云体育电动老虎机在这种情况下,连接器用户必须具有读取捕获表的权限,因此需要选择每个表的权限。

部署Oracle连接器

现在,我们已经准备好部署Debezium Oracle连接器。开云体育官方注册网址在用Kafka Connect注册连接器之前,让我们深入了解一下配置。

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

的名字customers-connector配置: {connector.classio.开云体育官方注册网址debezium.connector.oracle.OracleConnectortasks.max1开云体育电动老虎机database.hostnamedbz_oracle21开云体育电动老虎机database.port1521开云体育电动老虎机database.userc # # dbzuser开云体育电动老虎机database.passworddbz开云体育电动老虎机database.dbnameORCLCDB开云体育电动老虎机database.pdb.nameORCLPDB1开云体育电动老虎机database.server.nameserver1table.include.listC # # DBZUSER。客户开云体育电动老虎机database.history.kafka.bootstrap.servers卡夫卡:9092开云体育电动老虎机database.history.kafka.topic模式变化}}

让我们深入了解这些配置选项的含义。

的名字

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

connector.class

这是已部署连接器的类实现。每个Debezium源连开云体育官方注册网址接器都有一个唯一的类名,用于标识正在部署的连接器。

tasks.max

这是Kafka Connect中分配给连接器部署的最大任务数。大多数De开云体育官方注册网址bezium连接器按顺序从源数据库读取更改,因此值为开云体育电动老虎机1通常是有道理的。

开云体育电动老虎机database.hostname

这是数据库主机名或IP地开云体育电动老虎机址。因为我们指定了到的链接dbz_oracle21当启动Kafka Connect时,我们可以使用这个名称来标识运行Oracle数据库的容器。开云体育电动老虎机如果在另一台主机上存在已存在的Oracle环境,请在此配置属性中指定该主机的名称。

开云体育电动老虎机database.port

这是数据库用来监听连接的端口。开云体育电动老虎机Oracle默认端口为1521但是数据库管开云体育电动老虎机理员可以将其配置为任何可用端口。如果连接到已存在的Oracle实例,请使用数据库使用的端口。开云体育电动老虎机

开云体育电动老虎机database.user

这是用于JDBC连接的数开云体育电动老虎机据库用户帐户。这应该是在本系列的第一部分中创建的普通用户c # # dbzuser用户。如果您正在连接到不支持多租户的环境,那么这将是您在根数据库中创建的用户,不带普通用户前缀。开云体育电动老虎机

开云体育电动老虎机database.password

这是数据库用户的密码。开云体育电动老虎机

开云体育电动老虎机database.dbname

这是连接器与之通信的数据开云体育电动老虎机库服务。无论是否启用多租户,都将始终是单一或根容器数据库。开云体育电动老虎机

开云体育电动老虎机database.pdb.name

这是可选的可插入数据库系统标识符。开云体育电动老虎机当连接到支持多租户并引用PDB的数据库时,必须提供此属性。开云体育电动老虎机如果省略该字段,连接器假设数据库不支持多租户。开云体育电动老虎机

开云体育电动老虎机database.server.name

连接器创建的所有主题使用的前缀。这个值必须在Kafka Connect集群中的所有主题部署中唯一。

table.include.list

格式的正则表达式或简单表名的逗号分隔列表< schema >。<表>确定连接器将捕获哪些表。

开云体育电动老虎机database.history.kafka.bootstrap.servers

这是Kafka代理的URL,数据库历史主题将存储在这里。开云体育电动老虎机因为我们指定了到的链接卡夫卡当启动Kafka Connect时,我们可以使用这个名称来指向代理和它的端口。

开云体育电动老虎机database.history.kafka.topic

这是存储数据库模式历史记录的主题的名称。开云体育电动老虎机当连接器重新启动时,将恢复此主题,从此主题填充内存中的关系模型。

除了Po开云体育官方注册网址stgreSQL之外,所有Debezium连接器都使用模式历史来存储所有表的模式。这对于Oracle数据库来说通常不是理想的,特别是在部署没有多租户的连开云体育电动老虎机接器时。

要将存储限制为仅包含列表中的表,请通过设置开云体育电动老虎机database.history.store.only.captured.tables.ddl财产真正的

有关其他连接器属性的更多信息,可以查看Oracle文档欲知详情。

要部署连接器,请将上述配置保存到名为register-oracle.json.现在,打开一个新的终端窗口并使用旋度将连接器注册到Kafka Connect:

curl -i -X POST -H "Accept:application/json" \ -H "Content-Type:application/json" \ localhost:8083/connectors

如果注册成功,则该终端所在连接容器正在运行时,将开始对数据进行快照客户表格我们还可以通过使用Kafka控制台消费者工具并将主题的内容读取到本地终端来确认数据存在于Kafka中。

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

Docker exec -it kafka/ kafka/bin/kafka-console-consumer.sh \——bootstrap-server 0.0.0.0:9092 \——from-beginning \——属性打印。key=true \——topic server1. c_dbzuser . customers

主题转换模式名C # # DBZUSERC__DBZUSER因为主题命名策略自动保证主题的名称与不允许散列符号字符的Avro兼容。

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

模式: {},有效载荷: {之前: {ID1001的名字萨勒斯托马斯},: {版本1.9.6.Final连接器甲骨文的名字server1ts_ms1665102121000快照真正的dbORCLPDB1序列模式C # # DBZUSER表格客户txId视交叉上核2868546commit_scnlcr_positionrs_idssn0redo_thread},人事处rts_ms1665102126961事务}}

现在可以使用创建初始测试数据的SQLPlus终端插入更新,或删除记录在客户表格的末尾,您将在终端中看到相应的更改事件server1.C__DBZUSER.CUSTOMERS的话题。

注意SQLPlus没有启用自动提交类中的数据更改时,请确保自动提交更改客户表,以便它对连接器的挖掘过程可见。

结论

在本系列的第一部分中,我们讨论了Oracle是什么,为什么它在数据库世界中如此受欢迎,以及如何安装和配置数据库。开云体育电动老虎机在本系列的这一部分中,我们讨论了如何安装所有必备服务,包括Zookeeper、Apache Kafka和Apache Kafka Connect。此外,我们还部署了一个示例Oracle连接器,用于捕获更改客户表格

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

克里斯克兰福德

克里斯是红帽公司的软件工程师。他以前是Hibernate ORM团队的成员,现在在Debezium工作。开云体育官方注册网址他住在北卡罗来纳州,距离红帽塔只有几个小时的路程。


关于Debe开云体育官方注册网址zium

开云体育官方注册网址Debezium是一个开源的分布式平台,它将现有数据库转换为事件流,因此应用程序几乎可以立即看到并响应数据库中提交的每一个行级更改。开云体育电动老虎机开云体育官方注册网址Debezium是建立在卡夫卡并提供卡夫卡连接监控特定数据库管理系统的兼容连接器。开云体育电动老虎机开云体育官方注册网址Debezium在Kafka日志中记录了数据更改的历史,所以你的应用程序可以在任何时候停止和重新启动,并且可以很容易地使用它没有运行时错过的所有事件,确保所有事件都被正确和完整地处理。开云体育官方注册网址Debezium是开源Apache许可证,版本2.0

参与

我们希望您觉得Debezium有趣开云体育官方注册网址且有用,并愿意尝试一下。在Twitter上关注我们@开云体育官方注册网址debezium在Zulip上和我们聊天,或加入我们的邮件列表与社区对话。所有的代码都是开源的GitHub上,因此在本地构建代码并帮助我们改进现有连接器并添加更多连接器。如果您发现了问题或对我们如何改进Debezium有想法,请告诉我们开云体育官方注册网址记录问题