开云体育官方注册网址Debezium连接器用于Oracle
该连接器目前处于孵化状态,即准确的语义,配置选项等可能会根据我们收到的反馈在未来的修订中改变。如果您遇到任何问题,请告诉我们。 |
开云体育官方注册网址Debezium的Oracle Connector可以监视和记录Oracle服务器上数据库中的所有行级更改。开云体育电动老虎机最值得注意的是,连接器还不支持更改捕获表的结构(例如。ALTER TABLE……
)在初始快照完成后(请参阅dbz - 718).不过,它支持在连接器运行时捕获新添加的表(前提是新表的名称与连接器的筛选器配置匹配)。
概述
开云体育官方注册网址Debezium从Oracle中使用XStream API或直接通过LogMiner。为了使用XStream API,您需要拥有GoldenGate产品的许可证(尽管并不要求安装GoldenGate本身)。
安装Oracle
需要执行以下步骤来准备数据库,以便可以使用Debezium连接器。开云体育官方注册网址开云体育电动老虎机这假设多租户配置(具有容器数据库和至少一个可插拔数据库);开云体育电动老虎机如果您不使用此模型,请相应地调整步骤。
你可以在目录中找到在虚拟机中设置Oracle的模板(通过Vagrant)oracle-vagrant-box /存储库。
准备数据库开云体育电动老虎机
XStream
启用GoldenGate复制和归档日志模式:
ORACLE_SID=ORCLCDB dbz_oracle sqlplus /nolog CONNECT sys/top_secret AS SYSDBA alter system set db_recovery_file_dest_size = 5G;修改system set db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile;Alter system set enable_goldengate_replication=true;立即关闭数据库启动;开云体育电动老虎机打开数据库开云体育电动老虎机——应该显示“数据库日志模式:存开云体育电动老虎机档模式”存档日志列表退出;
此外,为了捕获之前更改行的状态,必须为捕获的表或数据库启用补充日志记录。开云体育电动老虎机例如,对于一个特定的表:
更改表库存。客户ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
LogMiner
LogMiner实现要求数据库配置最小数量的重做日志组和每个组的文件。开云体育电动老虎机建议至少要有 |
启用归档日志模式:
ORACLE_SID=ORACLCDB dbz_oracle sqlplus /nolog CONNECT sys/top_secret AS SYSDBA alter system set db_recovery_file_dest_size = 10G;修改system set db_recovery_file_dest = '/opt/oracle/oradta/recovery_area' scope=spfile;立即关闭数据库启动;开云体育电动老虎机打开数据库开云体育电动老虎机现在“数据库日志模式:存档模式开云体育电动老虎机”存档日志列表退出了吗
此外,为了捕获之前更改行的状态,必须为捕获的表或数据库启用补充日志记录。开云体育电动老虎机例如,对于一个特定的表:
更改表库存。客户ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
为连接器创建用户
XStream
在容器数据库中创建一个XStream管理用户(根据Oracle的建议来管理XStream):开云体育电动老虎机
/opt/oracle/oradata/ORCLCDB/xstream_adm_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE TABLESPACE xstream_adm_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/xstream_adm_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;
/opt/oracle/oradata/ORCLCDB/ORCLPDB1/xstream_adm_tbs DATAFILE . sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE xstream_adm_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/xstream_adm_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;
sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE USER c##xstrmadmin IDENTIFIED BY xsa DEFAULT TABLESPACE xstream_adm_tbs QUOTA UNLIMITED ON xstream_adm_tbs CONTAINER=ALL;授权创建会话,设置容器为c##xstrmadmin CONTAINER=ALL;DBMS_XSTREAM_AUTH开始。GRANT_ADMIN_PRIVILEGE(grantee => 'c##xstrmadmin', privilege_type => 'CAPTURE', grant_select_privileges => TRUE, container => 'ALL');结束;/退出;
创建XStream用户(Debezium连接器用于连接到XStre开云体育官方注册网址am出站服务器):
/opt/oracle/oradata/ORCLCDB/xstream_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE TABLESPACE xstream_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/xstream_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;
/opt/oracle/oradata/ORCLCDB/ORCLPDB1/xstream_tbs DATAFILE . sqlplus sys/ top_secrets @//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE xstream_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/xstream_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;
sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE USER c##xstrm IDENTIFIED BY xs DEFAULT TABLESPACE xstream_tbs QUOTA UNLIMITED ON xstream_tbs CONTAINER=ALL;授予c##xstrm CONTAINER=ALL创建会话权限;授予c##xstrm CONTAINER=ALL;授予V_$DATABASE的SELEC开云体育电动老虎机T权限给c##xstrm CONTAINER=ALL;给c##xstrm CONTAINER=ALL回闪任意表;退出;
LogMiner
创建LogMiner用户(Debezium连接器连接Oracle时使开云体育官方注册网址用):
/opt/oracle/oradata/ORCLCDB/logminer_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/logminer_tbs. sqldbf的大小25M重用自动扩展MAXSIZE无限制;退出;
/opt/oracle/oradata/ORCLCDB/ORCLPDB1/logminer_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/logminer_tbs. sqlplus sys/top_secret@//localhost:1521/ORCLPDB1 as sysdba CREATE TABLESPACE logminer_tbs DATAFILE 'dbf的大小25M重用自动扩展MAXSIZE无限制;退出;
sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba CREATE USER c##logminer IDENTIFIED BY lm DEFAULT TABLESPACE logminer_tbs QUOTA UNLIMITED ON logminer_tbs CONTAINER=ALL;给logminer CONTAINER创建会话GRANT SET CONTAINER TO c##logminer CONTAINER=ALL;logminer CONTAINER=开云体育电动老虎机ALLGRANT FLASHBACK任意表到c##logminer CONTAINER=ALL;GRANT LOGMINING TO c##logminer CONTAINER=ALL;logminer CONTAINER=ALL;退出;
创建一个XStream出站服务器
如果您正在使用LogMiner实现,则不需要此步骤。 |
sqlplus c##xstrmadmin/xsa@//localhost:1521/ORCLCDB声明表dbms_utilities . uncl_array;模式DBMS_UTILITY.UNCL_ARRAY;开始表(1):= NULL;schema (1):= 'd开云体育官方注册网址ebezium';DBMS_XSTREAM_ADM。创建_OUTBOUND( server_name => 'dbzxout', table_names => tables, schema_names => schemas); END; / exit;
修改XStream出站服务器以允许xstrm用户连接到它:
sqlplus sys/top_secret@//localhost:1521/ORCLCDB as sysdba BEGIN DBMS_XSTREAM_ADM. sqlALTER_OUTBOUND(server_name => 'dbzxout', connect_user => 'c##xstrm');结束;/退出;
注意,给定的出站服务器不能同时被多个连接器实例使用。如果希望设置Debezium Oracle连接器的多个实例,则每个实例都需要一个特定的XStre开云体育官方注册网址amOutbound服务器。
Oracle连接器如何工作
快照
大多数Oracle服务器都被配置为不在重做日志中保留数据库的完整历史,因此Debezium Oracle连接器将无法通过简单地读取日志来查看数据库的完整历开云体育电动老虎机史。开云体育官方注册网址因此,默认情况下(快照模式最初的)连接器将在第一次启动时执行初始化一致的快照数据库(意味着开云体育电动老虎机根据连接器的筛选器配置捕获的任何表中的结构和数据)。
每个快照由以下步骤组成:
确定要捕获的表
获得一个
独占模式
锁定每个被监视的表,以确保任何表都不会发生结构更改。读取服务器重做日志中的当前SCN(“系统更改号”)位置。
捕获所有相关表的结构。
释放在第2步中获得的锁,即锁只被持有一小段时间。
扫描所有相关的数据库表和模式,使其在步骤3中读取的开云体育电动老虎机SCN位置有效(
从scn123开始选择*
),并生成一个读
事件,并将该事件写入相应的特定于表的Kafka主题。在连接器偏移中记录快照的成功完成。
如果连接器失败,重新平衡,或者在步骤1开始后但在步骤7完成之前停止,重新启动连接器将开始一个新的快照。一旦Oracle连接器完成了它的初始快照,它将继续从第3步中的位置读取流,以确保它不会错过快照拍摄时发生的任何更新。如果连接器由于任何原因再次停止,在重新启动时,它将从之前停止的地方继续流式传输更改。
第二种快照模式为schema_only.在这种情况下,不应用上面描述的快照例程中的第6步。换句话说,连接器仍然捕获相关表的结构,但它不创建任何表读
表示连接器启动时的完整数据集的事件。如果您只对从现在开始的数据更改感兴趣,而不是对所有记录的完整当前状态感兴趣,这可能很有用。
读取重做日志
在第一次启动时,连接器获取捕获的表(DDL)结构的快照,并将此信息保存在其内部数据库历史主题中。开云体育电动老虎机然后,它继续从捕获模式结构的SCN监听更改事件。处理后的scn作为偏移量传递给Kafka Connect,并定期与数据库服务器确认(允许它丢弃旧的日志文件)。开云体育电动老虎机重新启动后,连接器将从之前停止的偏移量(SCN)恢复。
架构更改主题
模式更改主题消息的格式处于酝酿状态,可以在不另行通知的情况下进行更改。 |
Oracle连接器在数据库历史主题中存储数据库表的历史模式结构。开云体育电动老虎机此主题应被视为连接器的内部状态,用户不应使用。如果应用程序需要跟踪源数据库中的更改,则有面向公众的模式更改主题。开云体育电动老虎机主题名称与连接器配置中配置的逻辑服务器名称相同。
开云体育官方注册网址每当一个新表从这个主题流出来,或者当表的结构被改变时,Debezium就会向这个主题发出一条新消息(必须遵循模式演化过程).该消息包含表模式的逻辑表示。
该消息的示例是:
{"schema":{…}, "payload": {"source": {"version": "1.3.1. "Final", "connector": "oracle", "name": "server1", "ts_ms": 1588252618953, "snapshot": "true", "db": "ORCLPDB1", "schema": "开云体育官方注册网址DEBEZIUM", "table": "CUSTOMERS", "txId": null, "scn": "1513734", "commit_scn": "1513734", "lcr_position": nu开云体育电动老虎机ll}, "databaseName": "ORCLPDB1", "schemaName": "DEBEZIUM", "ddl": "CREATE table \"DEBEZIUM\"。\"客户" \n ("ID " NUMBER(9,0) NOT NULL ENABLE, \n "FIRST_NAME " VARCHAR2(255), \n "LAST_NAME" VARCHAR2(255), \n "EMAIL " VARCHAR2(255), \n主键("ID ") ENABLE,\n补充日志数据(ALL)列\n)段创建立即\n PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n NOCOMPRESS LOGGING\n STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n表空间\"USERS\" ", "tableChanges": [{"type": "CREATE", "id": "\"ORCLPDB1\".\"DEBEZIUM\"。开云体育官方注册网址\"CUSTOMERS\"", "table": {"defaultCharsetName": null, "primaryKeyColumnNames": ["ID"], "columns": [{"name": "ID", "jdbcType": 2, "nativeType": null, "typeName": "NUMBER", "typeExpression": "NUMBER", "charsetName": null, "length": 9, "scale": 0, "position": 1, "optional": false, "autoIncremented": false, "generated": false}, {"name": "FIRST_NAME", "jdbcType": 12, "nativeType": null, "typeName": "VARCHAR2", "typeExpression": "VARCHAR2", "charsetName": null, "length": 255, "scale":null, "position": 2, "optional": false, " autoincremental ": false, "charsetName": "LAST_NAME", "jdbcType": 12, "nativeType": null, "typeName": "VARCHAR2", "typeExpression": "VARCHAR2", "charsetName": null, "length": 255, "scale": null, "position": 3, "optional": false, " autoincremental ": false, "generated": false}, {"name": "EMAIL", "jdbcType": 12, "nativeType": null, "typeName": "VARCHAR2", "typeExpression": "VARCHAR2", "charsetName": null, "length": 255, "scale": "generated":假"},{"name": "EMAIL", "jdbcType": 12, "nativeType": null, "typeName": "VARCHAR2", "typeExpression": "VARCHAR2", "charsetName": null, "length": 255, "scale": "null, "position": 4, "optional": false, " autoincreented ": false, "generated": false}]}}]}}
的字段
开云体育电动老虎机数据库名
而且schemaName
描述哪个数据库/模式受到了影响开云体育电动老虎机ddl
包含负责模式更改的DDLtableChanges
数组包含DDL命令生成的一个或多个模式更改类型
描述更改的类型:创建
-表已创建改变
-表修改,下降
-删除表id
表的完整标识符吗表格
表示应用更改后的表元数据primaryKeyColumnNames
是组成表主键的列的列表吗列
列是每个列的元数据吗
模式更改消息使用更改应用到的数据库的名称作为键:开云体育电动老虎机
{"schema": {"type": "struct", "fields": [{"type": "string", "optional": false, "field": "data开云体育电动老虎机baseName"}], "optional": false, "name": "io. debez开云体育官方注册网址um .connector.oracle. schemachangekey "}, "payload": {"databaseName": "ORCLPDB1"}}
事件
由Oracle连接器产生的所有数据更改事件都有一个键和一个值,尽管键和值的结构依赖于产生更改事件的表(参见主题名称).
Debe开云体育官方注册网址zium Oracle连接器确保所有Kafka连接模式名是有效的Avro模式名.这意味着逻辑服务器名必须以拉丁字母或下划线开头(例如,[a-z, a-z, _]),逻辑服务器名中的其余字符以及模式和表名中的所有字符必须是拉丁字母、数字或下划线(例如,[a-z, a-z, 0-9,\_])。如果不是,则所有无效字符将自动替换为下划线字符。 当逻辑服务器名、模式名和表名包含其他字符时,这可能导致意外的冲突,并且表全名之间唯一的区分字符无效,因此被下划线取代。 |
开云体育官方注册网址Debezium和Kafka Connect就是围绕这个设计的连续的事件消息流,这些事件的结构可能会随着时间而改变。对于消费者来说,这可能很难处理,所以Kafka Connect让每个事件都是自包含的。每个消息键和值都有两部分模式而且有效载荷.模式描述有效负载的结构,而有效负载包含实际数据。
更改事件键
对于给定的表,更改事件的键将具有一个结构,该结构在创建事件时包含表的主键(或唯一键约束)中的每一列的字段。
考虑一个客户
表中定义的库存
开云体育电动老虎机数据库模式:
CREATE TABLE customers (id NUMBER(9) GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH 1001) NOT NULL PRIMARY KEY, first_name VARCHAR2(255) NOT NULL, last_name VARCHAR2(255) NOT NULL, email VARCHAR2(255) NOT NULL UNIQUE);
如果开云体育电动老虎机database.server.name
属性的值server1
,每变事件为客户
表,当它有这个定义时,将具有相同的键结构,在JSON中是这样的:
{"schema": {"type": "struct", "fields": [{"type": "int32", "optional": false, "field": "ID"}], "optional": false, "name": "server1.INVENTORY.CUSTOMERS. "Key"}, "payload": {"ID": 1004}}
的模式
密钥部分包含一个Kafka Connect模式,描述密钥部分中的内容,在我们的例子中,这意味着有效载荷
值不是可选的,是由名为server1.开云体育官方注册网址DEBEZIUM.CUSTOMERS.Key
,并且有一个名为id
类型的int32
.如果你看键的值有效载荷
字段,你可以看到它确实是一个结构(在JSON中只是一个对象)id
字段,值为1004
.
因此,可以将此键解释为描述inventory.customers
表(从命名的连接器输出server1
),其id
主键列的值为1004
.
更改事件值
与消息键一样,更改事件消息的值具有模式节和有效载荷部分。Oracle连接器产生的每个更改事件值的有效负载部分都有一个信封结构,使用以下字段:
人事处
必选字段,包含描述操作类型的字符串值。Oracle连接器的值为c
对于创建(或插入),u
对于更新,d
对于删除,和r
用于读取(在快照的情况下)。之前
是否是可选字段,如果存在则包含行状态之前事件发生了。该结构将由server1.INVENTORY.CUSTOMERS.Value
Kafka Connect模式,其中server1
对象中的所有行使用连接器inventory.customers
表格
该字段及其元素是否可用在很大程度上取决于补充日志应用于表的配置。 |
后
是否是可选字段,如果存在则包含行状态后事件发生了。结构的描述是相同的server1.INVENTORY.CUSTOMERS.Value
中使用的Kafka Connect模式之前
.源
是一个强制性的字段,其中包含一个结构描述元数据来源,在甲骨文中包含这些字段:Debezium版本,连接器名称、事件是否进行的一个快照,事务id(不是在快照),视交叉上核的变化,和一个时间戳,表示时间点记录改变时在源数据库(在快照,这是快照的时间点)。开云体育官方注册网址开云体育电动老虎机
的 |
ts_ms
是可选的,如果存在,则包含连接器处理事件的时间(使用运行Kafka Connect任务的JVM中的系统时钟)。
当然,还有模式事件消息值的一部分包含描述此信封结构及其内嵌套字段的模式。
创建事件
我们来看看a创建事件值可能看起来像客户
表:
{"模式":{“类型”:“结构”、“字段”:[{“类型”:“结构”、“字段”:[{“类型”:“int32”、“可选”:假的,“场”:“ID”},{“类型”:“弦”、“可选”:假的,“场”:“FIRST_NAME”},{“类型”:“弦”、“可选”:假的,“场”:“LAST_NAME”},{“类型”:“弦”、“可选”:假的,“场”:“电子邮件”}],“可选”:真的,“名字”:“server1.DEBEZIUM.CUSTOMERS。开云体育官方注册网址值","field": "before"}, {"type": "int32", "optional": false, "field": "ID"}, {"type": "string", "optional": false, "field": "FIRST_NAME"}, {"type": "string", "optional": false, "field": "LAST_NAME"}, {"type": "string", "optional": false, "field": "EMAIL"}], "optional": true, "name": "server1. debezum . customers。开云体育官方注册网址值”、“场”:“后”},{“类型”:“结构”、“字段”:[{“类型”:“弦”、“可选”:真的,“场”:“版本”},{“类型”:“弦”、“可选”:假的,“场”:“name”},{“类型”:“int64”、“可选”:真的,“场”:“ts_ms”},{“类型”:“弦”、“可选”:真的,“场”:“txId”},{“类型”:“int64”、“可选”:真的,“场”:“scn”},{“类型”:“int64”、“可选”:真的,“场”:“commit_scn”},{“类型”:“布尔”、“可选”:真的,“场”:“快照”}],“可选”:假的,“名字”:"io.开云体育官方注册网址 debezum .connector.oracle. source", "field": "source"}, {"type": "string", "optional": false, "field": "op"}, {"type": "int64", "optional": true, "field": "ts_ms"}], "optional": false, "name": "server1. debezum . customers . "信封”},“有效载荷”:{“前”:空,“后”:{" ID ": 1004年,“FIRST_NAME”:“安妮”,“LAST_NAME”:“Kretchmar”、“电子邮件”:“annek@noanswer.org”},“源”:{“版本”:“0.9.0。Alpha1", "name": "server1", "ts_ms": 1520085154000, "txId": "6.28.807", "scn": 2122185, "commit_scn": 2122185, "snapshot": false}, "op": "c", "ts_ms": 1532592105975}}
如果我们看模式
事件的一部分价值的模式信封的模式源
结构(特定于Oracle连接器并在所有事件中重用),以及表特定的模式之前
而且后
字段。
的模式名称 |
如果我们看有效载荷
事件的一部分价值,我们可以看到事件中的信息,即它正在描述创建的行(sinceop = c
),以及后
字段值包含新插入行的'ID
,FIRST_NAME
,LAST_NAME
,电子邮件
列。
事件的JSON表示形式似乎比它们描述的行要大得多。这是正确的,因为JSON表示必须包含模式和有效载荷部分信息。这是可能的,甚至建议使用Avro转换器以大幅减少写入Kafka主题的实际消息的大小。 |
更新事件
的值更新这个表上的Change事件实际上会有完全相同的结果模式,其有效负载的结构相同,但将持有不同的值。这里有一个例子:
{"schema":{…},“有效载荷”:{“前”:{" ID ": 1004年,“FIRST_NAME”:“安妮”,“LAST_NAME”:“Kretchmar”、“电子邮件”:“annek@noanswer.org”},“后”:{" ID ": 1004年,“FIRST_NAME”:“安妮”,“LAST_NAME”:“Kretchmar”、“电子邮件”:“anne@example.com”},“源”:{“版本”:“0.9.0。Alpha1", "name": "server1", "ts_ms": 1520085811000, "txId": "6.9.809", "scn": 2125544, "commit_scn": 2125544, "snapshot": false}, "op": "u", "ts_ms": 1532592713485}}
当我们把这个和插入事件中,我们看到了一些不同有效载荷
部分:
的
人事处
字段值现在是u
,表示该行因更新而更改的
之前
字段现在拥有数据库提交前包含值的行状态开云体育电动老虎机的
后
字段现在已经更新了行状态,这里可以看到电子邮件
价值就是现在anne@example.com
.的
源
字段结构具有与以前相同的字段,但值不同,因为此事件来自重做日志中的不同位置。的
ts_ms
显示了Debezium处理此事件的时间戳。开云体育官方注册网址
通过观察,我们可以学到很多东西有效载荷
部分。我们可以比较之前
而且后
结构来确定由于提交而在该行中实际更改的内容。的源
结构告诉我们Oracle关于这个变化记录的信息(提供可跟踪性),但更重要的是,我们可以将这个信息与这个和其他主题中的其他事件进行比较,以了解这个事件是在之前发生的,之后发生的,还是作为其他事件的一部分发生在同一个Oracle提交中。
当一行的主键/唯一键的列更新时,行键的值也发生了变化,因此Debezium将输出开云体育官方注册网址三个事件: |
删除事件
到目前为止,我们已经看到了样本创建而且更新事件。现在,我们来看看a的值删除事件。再一次,模式
的部分值将与创建而且更新事件:
{"schema":{…},“有效载荷”:{“前”:{" ID ": 1004年,“FIRST_NAME”:“安妮”,“LAST_NAME”:“Kretchmar”、“电子邮件”:“anne@example.com”},“后”:空,“源”:{“版本”:“0.9.0。Alpha1", "name": "server1", "ts_ms": 1520085153000, "txId": "6.28.807", "scn": 2122184, "commit_scn": 2122184, "snapshot": false}, "op": "d", "ts_ms": 1532592105960}}
如果我们看有效载荷
部分,我们看到了一些不同的比较创建或更新事件的有效载荷:
的
人事处
字段值现在是d
,表示该行已被删除的
之前
字段现在拥有在数据库提交时删除的行状态。开云体育电动老虎机的
后
字段为空,表示该行不再存在的
源
字段结构具有许多与以前相同的值,除了ts_ms
,视交叉上核
而且txId
领域发生了变化的
ts_ms
显示了Debezium处理此事件的时间戳。开云体育官方注册网址
此事件向使用者提供了用于处理删除该行的各种信息。
Oracle连接器的事件设计用于处理Kafka对数压缩,只要每个键至少保留最近的消息,就可以删除一些旧消息。这允许Kafka回收存储空间,同时确保主题包含一个完整的数据集,并可用于重新加载基于键的状态。
删除一行时,删除上面列出的event值仍然适用于日志压缩,因为Kafka仍然可以删除所有使用相同键的早期消息。但仅当消息值为时零
卡夫卡会知道它可以移除吗所有消息用同样的钥匙。为了实现这一点,Debezium的Oracle开云体育官方注册网址连接器总是遵循删除特别活动墓碑上具有相同but键的事件零
价值。
事务的元数据
开云体育官方注册网址Debezium可以生成表示事务元数据边界和丰富数据消息的事件。
事务边界
开云体育官方注册网址Debezium为每个事务生成事件开始
而且结束
.每个事件包含
状态
-开始
或结束
id
唯一事务标识符的字符串表示event_count
(结束
事件)——事务发出的事件总数data_collections
(结束
事件)-对的数组data_collection
而且event_count
它提供了由来自给定数据收集的更改所发出的事件数
下面是一条消息的示例:
{"status": "BEGIN", "id": "5.6.641", "event_count": null, "data_collections": null} {"status": "END", "id": "5.6.641", "event_count": 2, "data_collections": [{"data_collection": "ORCLPDB1.DEBEZ开云体育官方注册网址IUM. debezium . "CUSTOMER", "event_count": 1}, {"data_collection": "ORCLPDB1.DE开云体育官方注册网址BEZIUM。ORDER", "event_count": 1}]}
事务事件被写入指定的主题<开云体育电动老虎机 database.server.name > .transaction
.
数据事件丰富
启用事务元数据时,数据消息信封
是充实了新的事务
字段。这个字段以复合字段的形式提供关于每个事件的信息:
id
唯一事务标识符的字符串表示total_order
-该事件在事务生成的所有事件中的绝对位置data_collection_order
-该事件在事务发出的所有事件中的每数据收集位置
下面是一条消息的示例:
{“前”:零,“后”:{“pk”:“2”,“aa”:“1”},“源”:{…},“人事处”:“c”、“ts_ms”:“1580390884335”,“交易”:{" id ":“5.6.641”、“total_order”:“1”,“data_collection_order”:" 1 "}}
数据类型
如上所述,Debezium Oracle连接器用开云体育官方注册网址事件表示行更改,事件的结构类似于行所在的表。事件包含每个列值的字段,该值在事件中如何表示取决于列的Oracle数据类型。本节描述从Oracle数据类型到a的映射文字类型而且语义类型在事件字段中。
在这里,文字类型描述了如何使用Kafka Connect模式类型逐字表示值,即INT8
,INT16
,INT32
,INT64
,FLOAT32
,FLOAT64
,布尔
,字符串
,字节
,数组
,地图
,结构体
.
的语义类型描述了Kafka Connect模式如何捕获意义该字段使用Kafka Connect模式的名称。
对更多数据类型的支持将在后续版本中添加。请提交JIRA问题对于你遗漏的任何特定类型。
字符值
Oracle数据类型 |
文字类型(模式类型) |
语义类型(模式名) |
笔记 |
|
|
N/A |
|
|
|
N/A |
|
|
|
N/A |
|
|
|
N/A |
|
|
|
N/A |
数值
Oracle数据类型 |
文字类型(模式类型) |
语义类型(模式名) |
笔记 |
|
|
|
包含两个字段的结构: |
|
|
|
|
|
|
N/A |
|
|
|
|
|
|
|
|
|
|
|
|
处理等效于 |
|
|
|
处理等效于 |
|
|
N/A |
|
|
|
N/A |
|
|
|
|
包含两个字段的结构: |
|
|
|
包含两个字段的结构: |
|
|
|
包含两个字段的结构: |
十进制值
当decimal.handling.mode
配置属性设置为精确的
,那么连接器将使用预定义的Kafka Connectorg.apache.kafka.connect.data.Decimal
或io.开云体育官方注册网址debezium.data.VariableScaleDecimal
如上所述,数值列的逻辑类型。这是默认模式。
然而,当decimal.handling.mode
配置属性设置为双
,则连接器将这些值表示为具有模式类型的Java双精度值FLOAT64
.最后一个选项decimal.handling.mode
配置属性为字符串
.在这种情况下,连接器将用模式类型的格式化字符串表示值字符串
.
时间值
Oracle数据类型 |
文字类型(模式类型) |
语义类型(模式名) |
笔记 |
|
|
|
表示过去纪元的毫秒数,不包括时区信息。 |
|
|
|
表示过去纪元的毫秒数,不包括时区信息。 |
|
|
|
表示经过epoch的微秒数,不包括时区信息。 |
|
|
|
表示过去纪元的纳秒数,不包括时区信息。 |
|
|
|
带有时区信息的时间戳的字符串表示形式 |
|
|
|
属性的时间间隔的微秒数 |
部署连接器
由于许可要求,Debezium Oracle连接器不附带Oracle 开云体育官方注册网址JDBC驱动程序和XStream API JAR。你可以下载Oracle即时客户端.
将存档提取到一个目录中,例如/ / instant_client / /路径。复制文件_ojdbc8.jar而且xstreams.jar从即时客户端到卡夫卡的填词目录中。创建环境变量LD_LIBRARY_PATH
,指向即时客户端目录:
LD_LIBRARY_PATH = /道路/ / instant_client /
示例配置
下面是一个注册Debezium Oracle连接器实例的JSON请求示例:开云体育官方注册网址
{"name": "inventory-connector", "config": {"connector.class": "io.deb开云体育官方注册网址ezium.connector.oracle.OracleConnector", "tasks. debezium.connector.oracle. oracleconnector ", "Max ": "1", "开云体育电动老虎机database.server.name": "server1", "database. name"。Hostname ": "", "开云体育电动老虎机数据库。端口":"1521","数据库。开云体育电动老虎机user" : "c##xstrm", "database.password" : "xs", "database.dbname" : "ORCLCDB", "database.pdb.name" : "ORCLPDB1", "database.out.server.name" : "dbzxout", "database.history.kafka.bootstrap.servers" : "kafka:9092", "database.history.kafka.topic": "schema-changes.inventory" } }
选择适配器
开云体育官方注册网址Debezium提供了多种从Oracle获取变更事件的方法。默认情况下,Debez开云体育官方注册网址ium使用XStream API,但这并不总是适用于每个安装。
下面的示例配置通过添加开云体育电动老虎机database.connection.adapter
,连接器可以切换到使用LogMiner实现。
{"name": "inventory-connector", "config": {"connector.class": "io.deb开云体育官方注册网址ezium.connector.oracle.OracleConnector", "tasks. debezium.connector.oracle. oracleconnector ", "Max ": "1", "开云体育电动老虎机database.server.name": "server1", "database. name"。Hostname ": "", "开云体育电动老虎机数据库。端口":"1521","数据库。开云体育电动老虎机user" : "c##xstrm", "database.password" : "xs", "database.dbname" : "ORCLCDB", "database.pdb.name" : "ORCLPDB1", "database.out.server.name" : "dbzxout", "database.history.kafka.bootstrap.servers" : "kafka:9092", "database.history.kafka.topic": "schema-changes.inventory" "database.connection.adapter": "logminer" } }
我们鼓励使用LogMiner实现进行测试,并向我们提供您的反馈,但我们还不建议在生产中使用它,因为它仍在积极开发中。 |
监控
除了Zo开云体育官方注册网址okeeper、Kafka和Kafka Connect内置的对JMX指标的支持外,Debezium Oracle连接器还有三种指标类型。
详情请参阅监控文档了解如何通过JMX公开这些指标的详细信息。
快照指标
的MBean是开云体育官方注册网址debezium.oracle: type = connector-metrics上下文=快照,server =<开云体育电动老虎机 database.server.name >
.
属性 | 类型 | 描述 |
---|---|---|
|
连接器读取的最后一个快照事件。 |
|
|
自连接器读取并处理最近事件以来的毫秒数。 |
|
|
自上次启动或重置以来,此连接器已看到的事件总数。 |
|
|
已由连接器上配置的包含/排除列表筛选规则筛选的事件数。 |
|
|
连接器监视的表的列表。 |
|
|
用于在快照和主Kafka Connect循环之间传递事件的队列长度。 |
|
|
用于在快照和主Kafka Connect循环之间传递事件的队列的空闲容量。 |
|
|
快照中包含的表的总数。 |
|
|
快照尚未复制的表数。 |
|
|
快照是否启动。 |
|
|
快照是否中止。 |
|
|
快照是否完成。 |
|
|
快照到目前为止所花费的总秒数,即使没有完成。 |
|
|
映射,其中包含为快照中的每个表扫描的行数。在处理期间将表增量地添加到Map中。每扫描10,000行并在完成一个表时更新一次。 |
流指标
的MBean是开云体育官方注册网址debezium.oracle: type = connector-metrics、上下文=流媒体服务器=<开云体育电动老虎机 database.server.name >
.
属性 | 类型 | 描述 |
---|---|---|
|
连接器读取的最后一个流事件。 |
|
|
自连接器读取并处理最近事件以来的毫秒数。 |
|
|
自上次启动或重置以来,此连接器已看到的事件总数。 |
|
|
已由连接器上配置的包含/排除列表筛选规则筛选的事件数。 |
|
|
连接器监视的表的列表。 |
|
|
用于在streamer和主Kafka Connect循环之间传递事件的队列长度。 |
|
|
用于在streamer和主Kafka Connect循环之间传递事件的队列的空闲容量。 |
|
|
标志,该标志表示连接器当前是否连接到数据库服务器。开云体育电动老虎机 |
|
|
从最后一个更改事件的时间戳到连接器处理它之间的毫秒数。这些值将包含运行数据库服务器和连接器的机器上的时钟之间的任何差异。开云体育电动老虎机 |
|
|
提交的已处理事务的数量。 |
|
|
上次接收事件的坐标。 |
|
|
最后处理的事务的事务标识符。 |
LogMiner指标
的MBean是开云体育官方注册网址debezium.oracle: type = connector-metrics、上下文= log-miner服务器=<开云体育电动老虎机 database.server.name >
.
属性 | 类型 | 描述 |
---|---|---|
|
最近的SCN已经处理完毕。 |
|
|
观察到的DML操作的数量。 |
|
|
当前重做日志的文件名。 |
|
|
重做日志的当前状态。 |
|
|
重做日志切换的次数。 |
|
|
上一次日志挖掘查询准备处理结果所花费的时间。 |
|
|
日志挖掘查询为处理准备结果所花费的平均时间。 |
|
|
执行的日志挖掘查询的数量。 |
|
|
处理最后一个日志挖掘查询结果所花费的时间。 |
|
|
处理日志挖掘查询结果所花费的平均时间。 |
|
|
已处理的日志挖掘查询结果个数。 |
|
|
日志挖掘查询每次数据库往返获取的条目数。开云体育电动老虎机 |
|
|
在从日志挖掘视图获取另一批结果之前,连接器休眠的毫秒数。 |
架构历史指标
的MBean是开云体育官方注册网址debezium.mysql: type = connector-metrics、上下文= schema-history服务器=<开云体育电动老虎机 database.server.name >
.
属性 | 类型 | 描述 |
---|---|---|
|
之一 |
|
|
恢复开始的时间(以epoch秒为单位)。 |
|
|
在恢复阶段读取的更改数。 |
|
|
在恢复和运行时应用的模式更改的总数。 |
|
|
自上次更改从历史存储区恢复以来所经过的毫秒数。 |
|
|
自应用最后一次更改以来所经过的毫秒数。 |
|
|
从历史存储中恢复的最后一次更改的字符串表示形式。 |
|
|
最后应用的更改的字符串表示形式。 |
连接器属性
以下配置属性为要求除非有默认值可用。
财产 |
默认的 |
描述 |
连接器的唯一名称。尝试使用相同的名称再次注册将失败。(所有Kafka Connect连接器都需要这个属性。) |
||
连接器的Java类的名称。始终使用值 |
||
|
应该为此连接器创建的最大任务数。Oracle连接器总是使用单个任务,因此不使用这个值,所以默认值总是可以接受的。 |
|
Oracle数据库服务器的IP地址或主机名。开云体育电动老虎机 |
||
Oracle数据库服务器的整数端口号。开云体育电动老虎机 |
||
连接Oracle数据库服务器时使用的用户名。开云体育电动老虎机 |
||
连接Oracle数据库时使用的密码。开云体育电动老虎机 |
||
要连接的数据库的名称。开云体育电动老虎机当使用CDB + PDB模型时,必须是CDB名称。 |
||
使用CDB + PDB模型时要连接的PDB的名称。 |
||
数据库中配置的XStream出站服务器的名称。开云体育电动老虎机 |
||
逻辑名称,用于标识并提供被监视的特定Oracle数据库服务器的名称空间。开云体育电动老虎机逻辑名在所有其他连接器中应该是唯一的,因为它被用作从该连接器发出的所有Kafka主题名的前缀。只能使用字母数字字符和下划线。 |
||
|
要使用的适配器实现。 |
|
Kafka主题的全称,连接器将在其中存储数据库模式历史。开云体育电动老虎机 |
||
一个主机/端口对列表,连接器将使用它建立到Kafka集群的初始连接。此连接将用于检索以前由连接器存储的数据库模式历史,并用于写入从源数据库读取的每个DDL语开云体育电动老虎机句。这应该指向Kafka Connect进程使用的相同的Kafka集群。 |
||
最初的 |
一种对所捕获表的结构和可选数据进行初始快照的模式。支持的值为最初的(将捕获表的结构和数据的快照;如果主题应该用捕获表中的数据的完整表示来填充,则很有用)和schema_only(只对捕获的表的结构进行快照;有用的是,从现在开始发生的变化应该传播到主题)。快照完成后,连接器将继续从数据库的重做日志中读取更改事件。开云体育电动老虎机 |
|
空字符串 |
一个可选的逗号分隔的正则表达式列表,它匹配要监控的表的完全限定表标识符;任何未包含在包含列表中的表都将被排除在监视之外。每个标识符都是这样的schemaName.的表.默认情况下,连接器将监视每个被监视数据库中的每个非系统表。开云体育电动老虎机不得与 |
|
空字符串 |
一个可选的逗号分隔的正则表达式列表,它与要排除在监视之外的表的完全限定表标识符匹配;任何不在排除列表中的表都将被监控。每个标识符都是这样的schemaName.的表.不得与 |
|
N/A |
一个以逗号分隔的可选正则表达式列表,它匹配基于字符的列的完全限定名称,这些列的值应该是更改事件消息值中的假名,字段值由使用该算法的散列值组成 可以在单个配置中使用具有不同长度的多个属性,尽管每个属性的长度必须为正整数或零。列的完全限定名的格式为pdbName.schemaName.的表.columnName. 例子: column.mask.hash.sha with.salt——256.。CzQMA0cB5K =库存。订单。customerName, inventory.shipment.customerName 在哪里 注:取决于 |
|
|
指定连接器应如何处理的浮点值 |
|
|
指定连接器在事件处理期间应如何对异常作出反应。 |
|
|
正整数值,指定阻塞队列的最大大小,从数据库日志中读取的更改事件在写入Kafka之前被放置在其中。开云体育电动老虎机例如,当写入Kafka较慢或Kafka不可用时,该队列可以为binlog阅读器提供反压力。出现在队列中的事件不包括在此连接器定期记录的偏移量中。属性中指定的最大批处理大小,默认值为8192 |
|
|
正整数值,指定在此连接器的每次迭代期间应处理的每批事件的最大大小。默认为2048年。 |
|
|
正整数值,指定连接器在每次迭代期间等待新更改事件出现的毫秒数。缺省值为1000毫秒,即1秒。 |
|
|
控制是否在删除事件之后生成墓碑事件。 |
|
空字符串 |
与完全限定的表和列匹配以映射主键的正则表达式的分号列表。 |
|
N/A |
一个以逗号分隔的可选正则表达式列表,它与基于字符的列的完全限定名匹配,如果字段值长于指定的字符数,则这些列的值应在更改事件消息值中被截断。可以在单个配置中使用具有不同长度的多个属性,尽管每个属性的长度必须为正整数。列的完全限定名的格式为pdbName.schemaName.的表.columnName. |
|
N/A |
一个以逗号分隔的可选正则表达式列表,该列表与基于字符的列的完全限定名称匹配,这些列的值应在更改事件消息值中被替换为由指定数量的星号( |
|
N/A |
一个以逗号分隔的可选正则表达式列表,它与列的完全限定名称相匹配,这些列的原始类型和长度应该作为参数添加到发出的更改消息中的相应字段模式中。模式参数 |
|
N/A |
一个以逗号分隔的可选正则表达式列表,它与特定于数据库的数据类型名称相匹配,这些列的原始类型和长度应该作为参数添加到发出的更改消息中的相应字段模开云体育电动老虎机式中。模式参数 |
|
|
控制心跳消息的发送频率。 |
|
|
控制要向其发送心跳消息的主题的命名。 |
|
连接器启动后在快照之前应该等待的间隔(以毫秒为单位); |
||
|
指定在进行快照时应一次性从每个表读取的最大行数。连接器将以这个大小的多个批次读取表内容。默认为2000。 |
|
|
是否对字段名进行消毒以符合Avro命名要求。看到Avro命名欲知详情。 |
|
|
当设置为 看到事务的元数据更多细节。 |