开云体育官方注册网址Debezium连接器用于SQL Server

想帮助我们进一步磨练和改进它吗?学习如何

Debe开云体育官方注册网址zium SQL Server连接器捕获SQL Server数据库模式中发生的行级更改。开云体育电动老虎机

有关与此连接器兼容的SQL Server版本的信息,请参见开云体育官方注册网址Debezium发布概述

Debezium SQL Server连接器第一开云体育官方注册网址次连接到SQL Server数据库或集群时,它会对数据库中的模式进行一致的快照。开云体育电动老虎机在初始快照完成后,连接器将连续捕获行的级别更改插入更新,或删除提交到CDC启用的SQL Server数据库的操作。开云体育电动老虎机连接器为每个数据更改操作生成事件,并将它们传输到Kafka主题。连接器将一个表的所有事件流传输到一个专用的Kafka主题。然后,应用程序和服务可以使用来自该主题的数据更改事件记录。

概述

Debe开云体育官方注册网址zium SQL Server连接器是基于变更数据捕获中可用的特性SQL Server 2016 Service Pack 1 (SP1)及以上版本标准版或企业版。SQL Server捕获过程监视指定的数据库和表,并将更改存储到指定的创建中开云体育电动老虎机改变表具有存储过程外观的。

为了使Debezium SQ开云体育官方注册网址L Server连接器能够捕获数据库操作的变更事件记录,您必须首先在SQL Server数据库上启用变更数据捕获。开云体育电动老虎机必须在数据库和要捕获的每个表上启用CDC。开云体育电动老虎机在源数据库上设置CDC之后,连接器可以捕获行级开云体育电动老虎机插入更新,删除数据库中发生的操作。开云体育电动老虎机连接器将每个源表的事件记录写入专门用于该表的Kafka主题。每个捕获的表都有一个主题。客户端应用程序读取它们所遵循的数据库表的Kafka主题,并可以响应它们从这些主题消费的行级事件。开云体育电动老虎机

当连接器第一次连接到SQL Server数据库或集群时,它会对所有表的模式进行一致的快照,并将此状态传输到Kafka。开云体育电动老虎机快照完成后,连接器将持续捕获后续发生的行级更改。通过首先建立所有数据的一致视图,连接器可以继续读取,而不会丢失快照发生时所做的任何更改。

Debe开云体育官方注册网址zium SQL Server连接器具有容错能力。当连接器读取更改并产生事件时,它会定期记录事件在数据库日志中的位置(开云体育电动老虎机LSN /日志序列号).如果连接器因任何原因停止(包括通信故障、网络问题或崩溃),重新启动后连接器将继续读取SQL Server疾病预防控制中心从它读取的最后一个点开始。

偏移量定期提交。它们不会在发生变更事件时提交。因此,在停机之后,可能会生成重复的事件。

容错也适用于快照。也就是说,如果连接器在快照期间停止,则连接器在重新启动时开始一个新的快照。

SQL Server连接器如何工作

为了优化配置和运行Debezium SQL Server连接器,了开云体育官方注册网址解连接器如何执行快照、流更改事件、确定Kafka主题名称以及使用元数据是很有帮助的。

快照

SQL Server CDC不是为存储数据库更改的完整历史而设计的。开云体育电动老虎机为了让Debez开云体育官方注册网址ium SQL Server连接器为数据库的当前状态建立基线,它使用了一个名为开云体育电动老虎机快照

您可以配置连接器创建快照的方式。默认情况下,连接器的快照模式设置为最初的.基于此最初的快照模式,连接器第一次启动时执行初始化一致的快照数据库的。开云体育电动老虎机类定义的条件所匹配的任何表的结构和数据包括排除为连接器配置的属性(例如,table.include.listcolumn.include.listtable.exclude.list,等等)。

当连接器创建快照时,它将完成以下任务:

  1. 确定要捕获的表。

  2. 获取启用CDC的SQL Server表上的锁,以防止在创建快照期间发生结构更改。锁的级别由snapshot.isolation.mode配置选项。

  3. 读取服务器事务日志中的最大日志序列号(LSN)位置。

  4. 捕获所有相关表的结构。

  5. 如果需要,释放在步骤2中获得的锁。在大多数情况下,锁只持有很短的一段时间。

  6. 根据步骤3中读取的LSN位置扫描要捕获的SQL Server源表和模式,生成一个为表中的每一行创建一个事件,并将事件写到Kafka topic中。

  7. 在连接器偏移量中记录快照的成功完成。

生成的初始快照捕获为CDC启用的表中每一行的当前状态。从这个基线状态,连接器捕获发生的后续更改。

Ad hoc快照

默认情况下,连接器仅在第一次启动后运行初始快照操作。在初始快照之后,在正常情况下,连接器不会重复快照过程。连接器捕获的任何未来更改事件数据都只通过流处理传入。

但是,在某些情况下,连接器在初始快照期间获得的数据可能会过时、丢失或不完整。为了提供一种重新捕获表数据的机制,Debezium包含了一个执行临时快照的选项。开云体育官方注册网址数据库中的以下更改可能会导致执行临时快照:开云体育电动老虎机

  • 连接器配置被修改以捕获一组不同的表。

  • Kafka主题被删除,必须重新构建。

  • 数据损坏是由于配置错误或其他问题造成的。

您可以对先前捕获快照的表重新运行快照,方法是启动所谓的特别的快照.临时快照需要使用信号表.通过向Debezium信令表发送信号请求,可以启动一个临时快照。开云体育官方注册网址

当您初始化现有表的临时快照时,连接器将内容追加到已存在的表主题。如果先前存在的主题被删除,Debezium可以自动创建一个主题开云体育官方注册网址自动创建主题启用。

临时快照信号指定要包含在快照中的表。快照可以捕获数据库的全部内容,也可以仅捕获数据库中表的一个子集。开云体育电动老虎机此外,快照可以捕获数据库中表内容的一个子集。开云体育电动老虎机

指定要捕获的表execute-snapshot发送到信令表的消息。属性的类型execute-snapshot信号增量,并提供要包含在快照中的表的名称,如下表所示:

表1。ad hoc的例子execute-snapshot信号记录
默认的 价值

类型

增量

指定要运行的快照类型。
可选设置类型。目前,您只能请求增量快照。

数据收集

N/A

包含与要快照的表的完全限定名称匹配的正则表达式的数组。
名称的格式与signal.data.collection配置选项。

附加条件

N/A

一个可选字符串,它根据表的列指定一个条件,以捕获表内容的一个子集。

触发临时快照

属性添加项来初始化临时快照execute-snapshot发送到信令表的信号类型。连接器处理消息后,开始快照操作。快照进程读取第一个和最后一个主键值,并使用这些值作为每个表的起点和终点。根据表中条目的数量和配置的块大小,Debezium将表划分为块,然后依次对每个块进行快照,每次快照一个。开云体育官方注册网址

目前,execute-snapshot动作类型触发器增量快照只有。有关更多信息,请参见增量快照

增量快照

为了提供管理快照的灵活性,Debezium包含了一个补充的快照机制,称为开云体育官方注册网址增量快照.增量快照依赖于Debezium机制开云体育官方注册网址发送信号到Debezium连接器开云体育官方注册网址.增量快照基于DDD-3设计文档。

在增量快照中,Debezium不像在初始快照中那样一次性捕获数据库的全部状态,而是在一系列可配置的块中分阶段捕获每个表。开云体育官方注册网址开云体育电动老虎机可以指定希望快照捕获的表和每个块的大小.块大小决定了快照在数据库上的每次获取操作期间收集的行数。开云体育电动老虎机增量快照的默认chunk大小为1kb。

随着增量快照的进行,Debezium使用水印来跟踪进度,维护它捕获的每个表开云体育官方注册网址行的记录。与标准的初始快照过程相比,这种分阶段捕获数据的方法具有以下优点:

  • 您可以在流数据捕获的同时并行运行增量快照,而不是将流数据延迟到快照完成。在整个快照过程中,连接器继续从更改日志中捕获接近实时的事件,并且两个操作都不会阻塞另一个操作。

  • 当增量快照进程中断时,可以恢复增量快照,不会丢失数据。进程恢复后,快照将从它停止的位置开始,而不是从开始重新捕获表。

  • 您可以在任何时候按需运行增量快照,并根据需要重复该过程以适应数据库更新。开云体育电动老虎机例如,在修改连接器配置以向其添加表之后,可以重新运行快照table.include.list财产。

增量快照流程

运行增量快照时,Debezium根据主键对每个表进行排序,然后根据主键将表分开云体育官方注册网址成块配置的块大小.它逐个块工作,然后捕获块中的每个表行。对于它捕获的每一行,快照都会发出一个事件。该事件表示块快照开始时行的值。

随着快照的进行,其他进程可能会继续访问数据库,可能会修改表记录。开云体育电动老虎机为了反映这些变化,插入更新,或删除操作像往常一样提交到事务日志中。类似地,正在进行的Debezium流处理继续检开云体育官方注册网址测这些更改事件,并向Kafka发出相应的更改事件记录。

Debe开云体育官方注册网址zium如何解决具有相同主键的记录之间的冲突

在某些情况下,更新删除流流程发出的事件按顺序接收。也就是说,流处理过程可能在快照捕获包含表行的块之前发出修改表行的事件事件。当快照最终发出相应的事件时,其值已被取代。为了确保按正确的逻辑顺序处理不按顺序到达的增量快照事件,Debezium采用了一种缓冲方案来解决冲突。开云体育官方注册网址只有在快照事件和流事件之间的冲突被解决之后,Debezium才会向Kafka发送事件记录。开云体育官方注册网址

快照窗口

协助解决晚到车辆之间的碰撞事件和流事件修改同一表行,Debezium采用了所谓的开云体育官方注册网址快照窗口.快照窗口定义了增量快照为指定表块捕获数据的时间间隔。在块的快照窗口打开之前,Debezium遵循其通常的行为,从事务日志中直接向下游的目标Kaf开云体育官方注册网址ka主题发送事件。但是从特定块的快照打开的那一刻起,直到它关闭,Debezium执行重复数据删除步骤来解决具有相同主键的事件之间的冲突。开云体育官方注册网址

对于每个数据收集,Debezium会发出两种类型的事件,并将开云体育官方注册网址它们的记录存储在一个目的地Kafka主题中。它直接从表捕获的快照记录发出为操作。同时,随着用户继续更新数据收集中的记录,事务日志被更新以反映每次提交,Debezium就会发出开云体育官方注册网址更新删除每个更改的操作。

当快照窗口打开时,Debezium开始处理快照块,它将快照记录传递到开云体育官方注册网址内存缓冲区。的主键在快照窗口期间缓冲区中的事件与传入流事件的主键进行比较。如果没有匹配到,流事件记录将直接发送到Kafka。如果D开云体育官方注册网址ebezium检测到匹配,它将丢弃缓冲事件,并将流记录写入目标主题,因为流事件在逻辑上取代静态快照事件。块的快照窗口关闭后,缓冲区仅包含不存在相关事务日志事件的事件。开云体育官方注册网址Debezium释放这些剩余的事件到表的Kafka主题。

连接器对每个快照块重复该过程。

在运行增开云体育官方注册网址量快照时,用于SQL Server的Debezium连接器不支持模式更改。

触发增量快照

目前,创建增量快照的唯一方式是发送自组织快照信号到源数据库上的信令表。开云体育电动老虎机将一个信号作为SQL提交给信令表插入查询。

在Debez开云体育官方注册网址ium检测到信号表中的变化后,它读取信号,并运行所请求的快照操作。

提交的查询指定要包含在快照中的表,还可以指定快照操作的类型。目前,快照操作的唯一有效选项是默认值,增量

若要指定要包含在快照中的表,请提供数据收集列出表的数组或用于匹配表的正则表达式数组,例如
{“数据收集”:["。MyFirstTable”、“公众。MySecondTable ")}

数据收集增量快照信号阵列没有默认值。如果数据收集数组为空时,Debezium检测开云体育官方注册网址到不需要任何操作,因此不执行快照。

如果要包含在快照中的表的名称包含点()中的数据库、模式或表的名称,以将表添加到开云体育电动老虎机数据收集数组时,必须用双引号转义名称的每个部分。

类中存在的表公共Schema,它有名字我的。表格,请使用以下格式:“公共”。“My.Table”

先决条件
过程
  1. 发送一个SQL查询,将临时增量快照请求添加到信令表:

    插入< signalTable >(id, type, data)' < id > '' < snapshotType >”, '{"data-collections": ["<表>”、“<表>“,”类型”:“< snapshotType >”、“附加条件”:“<附加条件>“}”);

    例如,

    INSERT INTO myschema.开云体育官方注册网址debezium_signal (id, type, data)(1)值(“ad-hoc-1”,(2)“execute-snapshot”,(3)”{代码基于schema1中“数据收集”:["。表1”、“schema2.table2”),(4)“类型”:“增量”},(5)“附加条件”:“颜色=蓝色“}”);(6)

    的值id类型,数据命令中的参数对应信令表字段

    样例中参数说明如下:

    表2。向信令表发送增量快照信号的SQL命令字段说明
    价值 描述

    1

    myschema.开云体育官方注册网址debezium_signal

    指定源数据库上信令表的全限定名。开云体育电动老虎机

    2

    ad-hoc-1

    id参数指定分配为id信号请求的标识符。
    使用此字符串标识信令表中条目的日志消息。开云体育官方注册网址Debezium不使用这个字符串。相反,在快照期间,Debezium生成自己的快照开云体育官方注册网址id字符串作为水印信号。

    3.

    execute-snapshot

    指定类型参数指定信号要触发的操作。

    4

    数据收集

    的必需组件数据信号的字段,该字段指定表名或正则表达式的数组,以匹配要包含在快照中的表名。
    对象中指定连接器的信令表的名称时使用的格式相同,该数组列出了根据表的全限定名匹配表的正则表达式signal.data.collection配置属性。

    5

    增量

    一个可选的类型组成部分数据信号的字段,指定要运行的快照操作的类型。
    目前,唯一有效的选项是默认值,增量
    如果不指定值,连接器将运行增量快照。

    6

    附加条件

    一个可选字符串,它根据表的列指定一个条件,以捕获表内容的子集。有关的更多信息附加条件参数,看到的临时增量快照附加条件

的临时增量快照附加条件

如果希望快照仅包含表中内容的子集,则可以通过添加附加条件参数表示快照信号。

典型快照的SQL查询形式如下:

Select * from<表>....

通过添加附加条件参数,则追加一个在哪里输入SQL查询的条件,示例如下:

Select * from<表>在哪里<附加条件>....

下面的示例显示了一个SQL查询,该查询向信令表发送一个附加条件的临时增量快照请求:

插入< signalTable >(id, type, data)' < id > '' < snapshotType >”, '{"data-collections": ["<表>”、“<表>“,”类型”:“< snapshotType >”、“附加条件”:“<附加条件>“}”);

例如,假设你有一个产品表,包含以下列:

  • id(主键)

  • 颜色

  • 数量

的增量快照产品表中仅包含其中的数据项颜色=蓝色,可以使用下面的SQL语句触发快照:

INSERT INTO myschema.开云体育官方注册网址debezium_signal (id, type, data) VALUES('ad-hoc-1', 'execute-snapshot', '{"data-collections": ["schema1. data ", ' "data-collections": ["schema1. data ")产品”),“类型”:“增量”、“附加条件”:“颜色=蓝色"});

附加条件参数还允许您传递基于多个列的条件。例如,使用产品表中,您可以提交一个查询,该查询将触发一个增量快照,该快照仅包含那些项目的数据颜色=蓝色量> 10

INSERT INTO myschema.开云体育官方注册网址debezium_signal (id, type, data) VALUES('ad-hoc-1', 'execute-snapshot', '{"data-collections": ["schema1. data ", ' "data-collections": ["schema1. data ")product "],"type":"incremental", "additional-condition":"color=blue AND quantity>10"}');

下面的示例显示了连接器捕获的增量快照事件的JSON。

[示例]增量快照事件消息
{“前”:零,“后”:{“pk”:“1”,“价值”:“新数据”},“源”:{…“快照”:“增量”(1)},“人事处”:“r”,(2)"ts_ms":"1620393591654", "transaction":null}
字段名 描述

1

快照

指定要运行的快照操作的类型。
目前,唯一有效的选项是默认值,增量
指定一个类型您提交给信令表的SQL查询中的值是可选的。
如果不指定值,连接器将运行增量快照。

2

人事处

事件类型。
快照事件的值为r,表示操作。

停止增量快照

您还可以通过向源数据库上的表发送信号来停止增量快照。开云体育电动老虎机通过发送SQL向表提交停止快照信号插入查询在Debez开云体育官方注册网址ium检测到信号表中的变化后,它将读取信号,如果增量快照操作正在进行,则停止增量快照操作。

提交的查询指定的快照操作增量,以及要删除的当前运行快照的表(可选)。

先决条件
过程
  1. 向信令表发送一个SQL查询来停止临时增量快照:

    插入< signalTable >(id, type, data)' < id > ', 'stop-snapshot', '{"data-collections": ["<表>”、“<表>”,“类型”:“增量”}’);

    例如,

    INSERT INTO myschema.开云体育官方注册网址debezium_signal (id, type, data)(1)值(“ad-hoc-1”,(2)“stop-snapshot”,(3)”{代码基于schema1中“数据收集”:["。表1”、“schema2.table2”),(4)“类型”:“增量”}’);(5)

    的值id类型,数据signal命令中的参数对应信令表字段

    样例中参数说明如下:

    表3。向信令表发送停止增量快照信号的SQL命令字段说明
    价值 描述

    1

    myschema.开云体育官方注册网址debezium_signal

    指定源数据库上信令表的全限定名。开云体育电动老虎机

    2

    ad-hoc-1

    id参数指定分配为id信号请求的标识符。
    使用此字符串标识信令表中条目的日志消息。开云体育官方注册网址Debezium不使用这个字符串。

    3.

    stop-snapshot

    指定类型参数指定信号要触发的操作。

    4

    数据收集

    的可选组件数据信号的字段,该字段指定表名或正则表达式数组,以匹配要从快照中删除的表名。
    对象中指定连接器的信令表的名称时使用的格式相同,该数组列出了根据表的全限定名匹配表的正则表达式signal.data.collection配置属性。如果这个分量数据字段,则信号停止正在进行的整个增量快照。

    5

    增量

    的必需组件数据信号的字段,该字段指定要停止的快照操作的类型。
    目前,唯一有效的选项是增量
    如果没有指定类型值时,信号停止增量快照失败。

读取更改数据表

当连接器第一次启动时,它获取捕获的表的结构快照,并将此信息持久化到其内部数据库模式历史主题。开云体育电动老虎机然后连接器为每个源表标识一个更改表,并完成以下步骤。

  1. 对于每个更改表,连接器将读取在最后存储的最大LSN和当前最大LSN之间创建的所有更改。

  2. 连接器根据提交LSN和更改LSN的值升序对读取的更改进行排序。这种排序顺序可以确保Debezium以它们在数据库中发生的相同顺序重播更改。开云体育官方注册网址开云体育电动老虎机

  3. 连接器将提交和更改LSNs作为偏移量传递给Kafka Connect。

  4. 连接器保存最大LSN,并重新启动步骤1开始的进程。

重新启动后,连接器从它读取的最后一个偏移量(提交和更改lsp)开始恢复处理。

连接器能够检测CDC是否为所包含的源表启用或禁用,并调整其行为。

数据库中没有记录最大LSN开云体育电动老虎机

可能存在数据库中没有记录最大LSN的情况,因为:开云体育电动老虎机

  1. SQL Server代理未运行

  2. 变更表中还没有记录变更

  3. 开云体育电动老虎机数据库活动较低,cdc清理作业定期从cdc表中清除条目

在这些可能性中,由于运行SQL Server代理是先决条件,第1。是一个真正的问题(而第二。和3。是正常的)。

为了缓解这个问题,区分第一个。和其他,检查SQL Server代理的状态是通过以下查询完成的"SELECT CASE WHEN dss. "[status]=4 THEN 1 ELSE 0 END AS isRunning FROM [#db].sys. txtdm_server_services dss WHERE dss[servicename] LIKE N ' sql Server Agent (%';".如果SQL Server代理未运行,则在日志中写入ERROR: "No maximum LSN recorded in the database;开云体育电动老虎机SQL Server代理未运行”。

SQL Server Agent运行状态查询需要查看服务器状态服务器许可。方法将此权限授予已配置的用户,可以选择配置自己的查询开云体育电动老虎机database.sqlserver.agent.status.query财产。您可以定义一个函数,如果SQL Server代理正在运行,则返回true或1(否则返回false或0),并安全地使用高级权限,而不像这里解释的那样授予它们我需要向用户提供什么最低权限才能检查SQL Server代理服务的状态?或者在这里安全、轻松地使用高级权限而不授予任何人:服务器级.查询属性的配置如下所示:开云体育电动老虎机database.sqlserver.agent.status.query=SELECT [#db].func_is_sql_server_agent_running()-你需要使用(# db)作为数据库名称的占位符。开云体育电动老虎机

限制

SQL Server特别要求基本对象是一个表,以便创建变更捕获实例。因此,从索引视图(aka。物化视图)不支持SQL Server,因此Debezium SQL Server连接器。开云体育官方注册网址

主题名称

默认情况下,SQL Server连接器为所有人写入事件插入更新,删除对特定于该表的单个Apache Kafka主题的表中发生的操作。连接器使用以下约定来命名更改事件主题:< topicPrefix >< schemaName ><表>

下面的列表提供了默认名称组件的定义:

topicPrefix

属性所指定的服务器的逻辑名称topic.prefix配置属性。

schemaName

发生更改事件的数据库模式的名称。开云体育电动老虎机

的表

发生更改事件的数据库表的名称。开云体育电动老虎机

例如,如果实现服务器名和dbo是模式名,数据库包含有名称的表吗开云体育电动老虎机产品products_on_hand客户,订单,连接器会将更改事件记录流到以下Kafka主题:

  • fulfillment.testDB.dbo.products

  • fulfillment.testDB.dbo.products_on_hand

  • fulfillment.testDB.dbo.customers

  • fulfillment.testDB.dbo.orders

连接器应用类似的命名约定来标记其内部数据库模式历史主题,开云体育电动老虎机架构更改主题,事务元数据主题

如果默认的主题名称不满足您的需求,您可以配置自定义的主题名称。要配置自定义主题名称,需要在逻辑主题路由SMT中指定正则表达式。有关使用逻辑主题路由SMT自定义主题命名的详细信息,请参见主题的路由

架构更改主题

对于每个启用CDC的表,Debezium SQL Server连接器存储应用于数据库中捕获开云体育官方注册网址的表的模式更改事件的历史。开云体育电动老虎机连接器将模式更改事件写入名为< topicPrefix >,在那里topicPrefix中指定的逻辑服务器名是否为topic.prefix配置属性。

连接器发送到模式更改主题的消息包含有效负载,并且还可选地包含更改事件消息的模式。架构更改事件消息的有效负载包括以下元素:

开云体育电动老虎机数据库名

语句应用到的数据库的名称。开云体育电动老虎机的价值开云体育电动老虎机数据库名作为消息键。

tableChanges

模式更改后的整个表模式的结构化表示。的tableChanges字段包含一个数组,其中包含表中每列的条目。由于结构化表示以JSON或Avro格式表示数据,消费者可以轻松读取消息,而无需首先通过DDL解析器处理它们。

当连接器被配置为捕获表时,它不仅在模式更改主题中存储表的模式更改历史,而且还在内部数据库模式历史主题中存储。开云体育电动老虎机内部数据库模式历史记录主题开云体育电动老虎机仅供连接器使用,不打算由消费应用程序直接使用。确保需要模式更改通知的应用程序只使用来自模式更改主题的信息。

连接器向其模式更改主题发出的消息的格式处于酝酿状态,可以在不通知的情况下更改。

开云体育官方注册网址当发生以下事件时,Debezium会向模式更改主题发出一条消息:

  • 为表启用CDC。

  • 为一个表禁用CDC。

  • 方法更改已启用CDC的表的结构模式演化过程

示例:发送到SQL Server连接器模式更改主题的消息

下面的示例显示模式更改主题中的消息。该消息包含表模式的逻辑表示。

{"schema":{…}, "payload": {"source": {"version": "2.1.2. "Final", "connector": sqlserver", "name": "server1", "ts_ms": 0, "snapshot": "true", "db": "testDB", "schema": "dbo", "table": "customers", "change_lsn": null, "commit_lsn": "00000025:00000d98:00a2", "event_serial_no": null}, "ts_ms": 1588252618953,(1)“开云体育电动老虎机数据库名”:“testDB”,(2)"schemaName": "dbo", "ddl": null,(3)“tableChanges”:((4){"type": "CREATE",(5)“id”:\“\”,\“testDB dbo \“\”,\“客户,(6)"表":{(7)"defaultCharsetName": null, "primaryKeyColumnNames": [(8)"id"], "columns": [(9){"name": "id", "jdbcType": 4, "nativeType": null, "typeName": "int身份","typeExpression": "int身份","charsetName": null, "length": 10, "scale": 0, "position": 1, "optional": false, "autoIncremented": false, "generated": false}, {"name": "first_name", "jdbcType": 12, "nativeType": null, "typeName": "varchar", "typeExpression": "varchar", "charsetName": null, "length": 255, "scale": null, "position": 2, "optional": false, "autoIncremented": false, "generated": false}, {"name": "int身份","typeExpression": "varchar", "charsetName": null, "length": 255, "scale": null, "position": false}, {"name":"last_name", "jdbcType": 12, "nativeType": null, "typeName": "varchar", "typeExpression": "varchar", "charsetName": null, "length": 255, "scale": null, "position": 3, "optional": false, "autoIncremented": false, "generated": false}, {"name": "email", "jdbcType": 12, "nativeType": null, "typeName": "varchar", "typeExpression": "varchar", "charsetName": null, "length": 255, "scale": null, "position": 4, "optional": false, "autoIncremented": false, "generated": false}], "attributes": [(10){"customAttribute": "attributeValue"}]}}}}
表4。发送到模式更改主题的消息中的字段的描述
字段名 描述

1

ts_ms

可选字段,显示连接器处理事件的时间。该时间基于运行Kafka Connect任务的JVM中的系统时钟。

在源对象中,ts_ms表示在数据库中进行更改的时间。开云体育电动老虎机通过比较payload.source的值。Ts_ms和payload的值。ts_ms,you can determine the lag between the source database update and Debezium.

2

开云体育电动老虎机数据库名
schemaName

标识包含更改的数据库和模式。开云体育电动老虎机

3.

ddl

总是SQL Server连接器。对于其他连接器,此字段包含负责模式更改的DDL。此DDL对SQL Server连接器不可用。

4

tableChanges

包含DDL命令生成的模式更改的一个或多个项的数组。

5

类型

描述变化的类型。取值为:

  • 创建-表已创建

  • 改变-表格修改

  • 下降-删除表

6

id

创建、修改或删除的表的完整标识符。

7

表格

表示应用更改后的表元数据。

8

primaryKeyColumnNames

组成表主键的列列表。

9

已更改表中每列的元数据。

10

属性

每个表更改的自定义属性元数据。

在连接器发送到模式更改主题的消息中,键是包含模式更改的数据库的名称。开云体育电动老虎机在下面的示例中,使用有效载荷字段包含键:

{"schema": {"type": "struct", "fields": [{"type": "string", "optional": false, "field": "data开云体育电动老虎机baseName"}], "optional": false, "name": "io. debez开云体育官方注册网址um .connector.sqlserver. schemachangekey "}, "payload": {"databaseName": "testDB"}}

数据变更事件

Debe开云体育官方注册网址zium SQL Server连接器为每个行级生成一个数据更改事件插入更新,删除操作。每个事件包含一个键和一个值。键和值的结构取决于所更改的表。

开云体育官方注册网址Debezium和Kafka Connect就是围绕这个设计的连续的事件消息流.但是,这些事件的结构可能会随着时间的推移而改变,这对消费者来说可能很难处理。为了解决这个问题,每个事件都包含其内容的模式,或者,如果使用模式注册中心,则包含消费者可以用来从注册中心获取模式的模式ID。这使得每个事件都是自包含的。

下面的JSON骨架显示了变更事件的四个基本部分。然而,你如何配置你选择在你的应用程序中使用的Kafka Connect转换器,决定了这四个部分在变更事件中的表示。一个模式字段仅在配置转换器以产生该字段时才处于更改事件中。同样,事件键和事件有效负载只有在配置转换器以产生它时才位于更改事件中。如果你使用JSON转换器并配置它来生成所有四个基本的更改事件部分,则更改事件的结构如下:

{"schema": {(1)...}, "有效载荷":{(2)...}, "schema": {(3)...}, "有效载荷":{(4)...}},
表5所示。变更事件基本内容概述
字段名 描述

1

模式

第一个模式字段是事件键的一部分。它指定了一个Kafka Connect模式,用来描述事件键的内容有效载荷部分。换句话说,是第一个模式字段描述已更改表的主键的结构,如果表没有主键,则描述唯一键。

属性可以覆盖表的主键message.key.columns连接器配置属性.在本例中,第一个模式字段描述由该属性标识的键的结构。

2

有效载荷

第一个有效载荷字段是事件键的一部分。它具有前面所描述的结构模式字段,它包含已更改行的键。

3.

模式

第二个模式字段是事件值的一部分。它指定Kafka Connect模式,描述事件值中的内容有效载荷部分。换句话说,是第二种模式描述已更改行的结构。通常,这个模式包含嵌套的模式。

4

有效载荷

第二个有效载荷字段是事件值的一部分。它具有前面所描述的结构模式字段,它包含已更改行的实际数据。

默认情况下,连接器流将事件记录更改为主题,其名称与事件的原始表相同。看到主题名称

SQL Server连接器确保所有Kafka Connect模式名称都遵循Avro模式名称格式.这意味着逻辑服务器名必须以拉丁字母或下划线开头,即a-z、a-z或_。逻辑服务器名中的每个剩余字符以及数据库名和表名中的每个字符必须是拉丁字母、数字或下划线,即a-z、a-z、0-9或\_。开云体育电动老虎机如果存在无效字符,则将其替换为下划线字符。

如果逻辑服务器名、数据库名或表名包含无效字符,并且区分名称之间的唯一字符无效,因此用下划线替换,则可能导致意外冲突。开云体育电动老虎机

更改事件键

更改事件的键包含已更改表的键和已更改行的实际键的模式。在连接器创建事件时,模式及其对应的有效负载都为已更改表的主键(或唯一键约束)中的每一列包含一个字段。

考虑以下几点客户表,后面是此表的更改事件键的示例。

例表
CREATE TABLE customers (id INTEGER IDENTITY(1001,1) NOT NULL PRIMARY KEY, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE);
更改事件键的示例

对象的更改的每个更改事件客户表具有相同的事件键模式。只要客户表具有前面的定义,则捕获对的更改的每个更改事件客户table有如下的键结构,在JSON中是这样的:

{"schema": {(1)"type": "struct", "fields": [(2){“类型”:“int32”、“可选”:假的,“场”:“id”}],“可选”:假的,(3)“名称”:“server1.testDB.dbo.customers.Key”(4)}, "有效载荷":{(5)id: 1004}}
表6所示。更改事件键的描述
字段名 描述

1

模式

密钥的模式部分指定了一个Kafka Connect模式,该模式描述了密钥中的内容有效载荷部分。

2

字段

属性中期望的每个字段有效载荷,包括每个字段的名称、类型以及是否需要。在本例中,有一个名为id类型的int32

3.

可选

指示事件键是否必须在其中包含值有效载荷字段。在本例中,需要键的有效负载中的值。当表没有主键时,键的有效载荷字段中的值是可选的。

4

server1.dbo.testDB.customers.Key

定义键的有效负载结构的模式的名称。此模式描述已更改表的主键的结构。关键模式名具有该格式connector-name开云体育电动老虎机数据库模式名表名关键.在这个例子中:

  • server1生成此事件的连接器的名称。

  • dbo已更改的表的数开云体育电动老虎机据库模式。

  • 客户已更新的表。

5

有效载荷

包含为其生成此更改事件的行的键。在本例中,键包含一个单键id字段,其值为1004

虽然column.exclude.listcolumn.include.list连接器配置属性允许您仅捕获表列的一个子集,主键或唯一键中的所有列始终包含在事件的键中。

如果表没有主键或唯一键,则更改事件的键为空。这是有意义的,因为没有主键或唯一键约束的表中的行不能被唯一标识。

更改事件值

change事件中的值比键稍微复杂一些。和键一样,值也有模式Section和a有效载荷部分。的模式类的模式信封的结构有效载荷节,包括其嵌套字段。用于创建、更新或删除数据的操作的更改事件都具有具有信封结构的值有效负载。

考虑用于显示更改事件键示例的同一个示例表:

CREATE TABLE customers (id INTEGER IDENTITY(1001,1) NOT NULL PRIMARY KEY, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE);

该表的更改的更改事件的值部分将针对每种事件类型进行描述。

创建事件

对象中创建数据的操作所生成的更改事件的值部分,示例如下客户表:

{"schema": {(1)"type": "struct", "fields": [{"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.dbo.testDB.customers.Value",(2)"field": "before"}, {"type": "struct", "fields": [{"type": "int32", "optional": false, "field": "id"}, {"type": "string", "optional": false, "field": "last_name"}, {"type": "string", "optional": false, "field": "email"}], "optional": true, "name": "server1.dbo.testDB.customers。价值", "field": "after" }, { "type": "struct", "fields": [ { "type": "string", "optional": false, "field": "version" }, { "type": "string", "optional": false, "field": "connector" }, { "type": "string", "optional": false, "field": "name" }, { "type": "int64", "optional": false, "field": "ts_ms" }, { "type": "boolean", "optional": true, "default": false, "field": "snapshot" }, { "type": "string", "optional": false, "field": "db" }, { "type": "string", "optional": false, "field": "schema" }, { "type": "string", "optional": false, "field": "table" }, { "type": "string", "optional": true, "field": "change_lsn" }, { "type": "string", "optional": true, "field": "commit_lsn" }, { "type": "int64", "optional": true, "field": "event_serial_no" } ], "optional": false, "name": "io.debezium.connector.sqlserver.Source",(3)"field": "source"}, {"type": "string", "optional": false, "field": "op"}, {"type": "int64", "optional": true, "field": "ts_ms"}], "optional": false, "name": "server1.dbo.testDB.customers.Envelope"(4)}, "有效载荷":{(5)“之前”:空,(6)"后":{(7)“id”:1005年,“first_name”:“约翰”,“last_name”:“母鹿”、“电子邮件”:“john.doe@example.org”},“源”:{(8)“版本”:“2.1.2。Final", "connector": sqlserver, "name": server1, "ts_ms": 1559729468470, "snapshot": false, "db": "testDB", "schema": "dbo", "table": "customers", "change_lsn": "00000027:00000758:0003", "commit_lsn": "00000027:00000758:0005", "event_serial_no": "1"}, "op": "c",(9)“ts_ms”:1559729471739(10)}}
表7所示。的描述创建事件值字段
字段名 描述

1

模式

值的模式,它描述值的有效负载的结构。连接器为特定表生成的每个更改事件中,更改事件的值模式都是相同的。

2

的名字

模式节中,每的名字Field指定值的有效负载中字段的模式。

server1.dbo.testDB.customers.Value有效负载的模式是之前字段。此模式特定于客户表格

的模式名称之前字段的格式为logicalName开云体育电动老虎机database-schemaName的表value,确保模式名在数据库中是唯一的。开云体育电动老虎机这意味着当使用Avro转换器,每个逻辑源中每个表的结果Avro模式都有自己的演变和历史。

3.

的名字

io.开云体育官方注册网址debezium.connector.sqlserver.Source有效负载的模式是字段。这个模式是特定于SQL Server连接器的。连接器将其用于生成的所有事件。

4

的名字

server1.dbo.testDB.customers.Envelope有效负载的总体结构的模式在哪里server1是连接器名称,dbo数据库模式名和开云体育电动老虎机客户是桌子。

5

有效载荷

该值为实际数据。这是变更事件提供的信息。

事件的JSON表示形式似乎比它们描述的行要大得多。这是因为JSON表示必须包括消息的模式和有效负载部分。然而,通过使用Avro转换器,你可以显著减少连接器流到Kafka主题的消息的大小。

6

之前

可选字段,指定事件发生之前行的状态。当人事处字段是c对于create,就像在本例中一样之前字段是因为这个更改事件是针对新内容的。

7

可选字段,指定事件发生后行的状态。在本例中,字段包含新行的值idfirst_namelast_name,电子邮件列。

8

描述事件的源元数据的必填字段。此字段包含可用于将此事件与其他事件进行比较的信息,包括事件的起源、事件发生的顺序以及事件是否是同一事务的一部分。源元数据包括:

  • 开云体育官方注册网址Debezium版本

  • 连接器类型和名称

  • 开云体育电动老虎机数据库和模式名称

  • 在数据库中进行更改的时间戳开云体育电动老虎机

  • 如果事件是快照的一部分

  • 包含新行的表的名称

  • 服务器日志偏移量

9

人事处

返回string,描述导致连接器产生事件的操作类型。在这个例子中,c表示该操作创建了一行。有效值为:

  • c=创建

  • u=更新

  • d=删除

  • r= read(仅适用于快照)

10

ts_ms

可选字段,显示连接器处理事件的时间。在事件消息信封中,时间基于运行Kafka Connect任务的JVM中的系统时钟。

对象,ts_ms指示在数据库中提交更改的时间。开云体育电动老虎机通过比较的值payload.source.ts_ms的值payload.ts_ms,您可以确定源数据库更新和Debezium之间的延迟。开云体育官方注册网址开云体育电动老虎机

更新事件

样例中更新的更改事件的值客户表的模式与创建事件。同样,事件值的有效负载具有相同的结构。事件值有效负载中包含不同的值更新事件。中的更新中连接器生成的事件中的更改事件值的示例客户表:

{"schema":{…}, "payload": {"before": {(1)“id”:1005年,“first_name”:“约翰”,“last_name”:“母鹿”、“电子邮件”:“john.doe@example.org”},“后”:{(2)“id”:1005年,“first_name”:“约翰”,“last_name”:“母鹿”、“电子邮件”:“noreply@example.org”},“源”:{(3)“版本”:“2.1.2。Final", "connector": sqlserver", "name": server1", "ts_ms": 1559729995937, "snapshot": false, "db": "testDB", "schema": "dbo", "table": "customers", "change_lsn": "00000027:00000ac0:0002", "commit_lsn": "00000027:00000ac0:0007", "event_serial_no": "2"}, "op": "u",(4)“ts_ms”:1559729998706(5)}}
表8所示。的描述更新事件值字段
字段名 描述

1

之前

可选字段,指定事件发生之前行的状态。在一个更新事件值,则之前字段包含每个表列的字段以及数据库提交前该列中的值。开云体育电动老虎机在本例中,电子邮件值是john.doe@example.org。

2

可选字段,指定事件发生后行的状态。你可以比较之前结构来确定对该行的更新内容。在本例中,电子邮件价值就是现在noreply@example.org

3.

描述事件的源元数据的必填字段。的字段结构中的字段与创建事件,但有些值是不同的,例如,示例更新事件具有不同的偏移量。源元数据包括:

  • 开云体育官方注册网址Debezium版本

  • 连接器类型和名称

  • 开云体育电动老虎机数据库和模式名称

  • 在数据库中进行更改的时间戳开云体育电动老虎机

  • 如果事件是快照的一部分

  • 包含新行的表的名称

  • 服务器日志偏移量

event_serial_no字段区分具有相同提交和更改LSN的事件。当此字段的值不是时的典型情况1

  • 更新事件的值设置为2因为更新在SQL Server的CDC更改表中产生了两个事件(有关详细信息,请参阅源文档).第一个事件包含旧值,第二个事件包含新值。连接器使用第一个事件中的值来创建第二个事件。连接器删除第一个事件。

  • 当主键更新时,SQL Server会发出两个事件。一个删除事件,以删除具有旧主键值的记录创建事件,以添加具有新主键的记录。这两个操作共享相同的提交和更改LSN,它们的事件编号为12,分别。

4

人事处

返回string,描述操作类型。在一个更新事件值,则人事处字段值为u,表示该行因更新而更改。

5

ts_ms

可选字段,显示连接器处理事件的时间。在事件消息信封中,时间基于运行Kafka Connect任务的JVM中的系统时钟。

对象,ts_ms指示将更改提交到数据库的时间。开云体育电动老虎机通过比较的值payload.source.ts_ms的值payload.ts_ms,您可以确定源数据库更新和Debezium之间的延迟。开云体育官方注册网址开云体育电动老虎机

更新一行的主键/唯一键的列将更改该行键的值。当一个键改变时,Debezium输出开云体育官方注册网址三个事件:删除事件和墓碑上的事件用旧键表示行,后面跟着创建事件,使用该行的新键。

删除事件

的值删除改变事件有相同之处模式部分为创建更新同一表的事件。的有效载荷的一部分删除事件。客户表是这样的:

{"schema":{…}},“有效载荷”:{“前”:{< >“id”:1005年,“first_name”:“约翰”,“last_name”:“母鹿”、“电子邮件”:“noreply@example.org”},“后”:空,(2)“源”:{(3)“版本”:“2.1.2。Final", "connector": sqlserver", "name": server1", "ts_ms": 1559730445243, "snapshot": false, "db": "testDB", "schema": "dbo", "table": "customers", "change_lsn": "00000027:00000db0:0005", "commit_lsn": "00000027:00000db0:0007", "event_serial_no": "1"}, "op": "d",(4)“ts_ms”:1559730450205(5)}}
表9所示。的描述删除事件值字段
字段名 描述

1

之前

可选字段,指定事件发生之前行的状态。在一个删除事件值,则之前字段包含在数据库提交时删除该行之前该行中的值。开云体育电动老虎机

2

可选字段,指定事件发生后行的状态。在一个删除事件值,则字段是,表示该行已不存在。

3.

描述事件的源元数据的必填字段。在一个删除事件值,则字段结构与for相同创建更新同一表的事件。许多字段值也相同。在一个删除事件值,则ts_mspos字段值以及其他值可能已经更改。但是,字段在删除事件值提供相同的元数据:

  • 开云体育官方注册网址Debezium版本

  • 连接器类型和名称

  • 开云体育电动老虎机数据库和模式名称

  • 在数据库中进行更改的时间戳开云体育电动老虎机

  • 如果事件是快照的一部分

  • 包含新行的表的名称

  • 服务器日志偏移量

4

人事处

返回string,描述操作类型。的人事处字段值为d,表示该行已被删除。

5

ts_ms

可选字段,显示连接器处理事件的时间。在事件消息信封中,时间基于运行Kafka Connect任务的JVM中的系统时钟。

对象,ts_ms指示在数据库中进行更改的时间。开云体育电动老虎机通过比较的值payload.source.ts_ms的值payload.ts_ms,您可以确定源数据库更新和Debezium之间的延迟。开云体育官方注册网址开云体育电动老虎机

SQL Server连接器事件设计用于处理Kafka对数压缩.日志压缩允许删除一些较旧的消息,只要每个键至少保留最近的消息。这让Kafka回收存储空间,同时确保主题包含一个完整的数据集,并可用于重新加载基于键的状态。

墓碑上的事件

删除一行时,删除event值仍然适用于日志压缩,因为Kafka可以删除所有具有相同键的早期消息。然而,Kafka要删除所有具有相同键的消息,消息值必须为.为了实现这一点,在Debezium的SQL Server连开云体育官方注册网址接器发出一个删除事件时,连接器发出一个特殊的墓碑事件,该事件具有相同的键,但具有价值。

事务的元数据

开云体育官方注册网址Debezium可以生成表示事务边界的事件,并丰富数据更改事件消息。

Debezium何时接收事务元开云体育官方注册网址数据的限制

开云体育官方注册网址Debezium仅为部署连接器后发生的事务注册和接收元数据。部署连接器之前发生的事务的元数据不可用。

开云体育电动老虎机数据库事务由语句块表示,语句块被封装在开始结束关键词。开云体育官方注册网址类生成事务边界事件开始结束每个事务中的分隔符。事务边界事件包含以下字段:

状态

开始结束

id

唯一事务标识符的字符串表示形式。

ts_ms

事务边界事件的时间(开始结束事件)。如果数据源没有向Debezium提供事件时间,则该字段表示Debeziu开云体育官方注册网址m处理事件的时间。

event_count(结束事件)

事务发出的事件总数。

data_collections(结束事件)

对的数组data_collectionevent_count元素,该元素指示连接器为源自数据集合的更改发出的事件数。

Debezium无法可靠地识别交易何时结开云体育官方注册网址束。事务结束因此,只有在另一个事务的第一个事件到达之后才会触发标记。这可能会导致延迟交货结束在低交通系统的情况下标记。

下面的例子显示了一个典型的事务边界消息:

示例:SQL Server连接器事务边界事件
{"status": "BEGIN", "id": "00000025:00000d08:0025", "ts_ms": 1486500577125, "event_count": null, "data_collections": null} {"status": "END", "id": "00000025:00000d08:0025", "ts_ms": 1486500577691, "event_count": 2, "data_collections": [{"data_collection": " testdb . dbod . testdb . dbod . testdb . dbod . ts_ms": "为多”、“event_count”:1},{:“data_collection testDB.dbo.testDB。Tableb ", "event_count": 1}]}

方法覆盖topic.transaction选项时,事务事件被写入指定的主题< topic.prefix >.transaction

更改数据事件丰富

启用事务元数据时,数据消息信封是充实了新的事务字段。这个字段以复合字段的形式提供关于每个事件的信息:

id

唯一事务标识符的字符串表示形式

total_order

事件在事务生成的所有事件中的绝对位置

data_collection_order

事件在事务发出的所有事件中的每数据收集位置

下面的例子显示了一个典型的消息是什么样的:

{“前”:零,“后”:{“pk”:“2”,“aa”:“1”},“源”:{…},“人事处”:“c”、“ts_ms”:“1580390884335”,“交易”:{" id ":“00000025:00000d08:0025”、“total_order”:“1”,“data_collection_order”:" 1 "}}

数据类型映射

Debe开云体育官方注册网址zium SQL Server连接器通过产生结构类似于行所在表的事件来表示对表行数据的更改。每个事件都包含字段,用于表示该行的列值。事件表示操作的列值的方式取决于列的SQL数据类型。在这种情况下,连接器将每个SQL Server数据类型的字段映射到两个数据库文字类型和一个语义类型

连接器可以将SQL Server数据类型映射到两者文字语义类型。

文字类型

描述如何使用Kafka Connect模式类型逐字表示值,即INT8INT16INT32INT64FLOAT32FLOAT64布尔字符串字节数组地图,结构体

语义类型

描述Kafka Connect模式如何捕获意义该字段使用Kafka Connect模式的名称。

如果默认的数据类型转换不能满足您的需求,您可以这样做创建自定义转换器对于连接器。

基本类型

下表显示连接器如何映射基本SQL Server数据类型。

表10。SQL Server连接器使用的数据类型映射
SQL Server数据类型 文字类型(模式类型) 语义类型(模式名)和Notes

布尔

N/A

非常小的整数

INT16

N/A

短整型

INT16

N/A

INT

INT32

N/A

长整型数字

INT64

N/A

真正的

FLOAT32

N/A

浮动((N))

FLOAT64

N/A

CHAR ((N))

字符串

N/A

VARCHAR ((N))

字符串

N/A

文本

字符串

N/A

NCHAR ((N))

字符串

N/A

NVARCHAR ((N))

字符串

N/A

NTEXT

字符串

N/A

XML

字符串

io.开云体育官方注册网址debezium.data.Xml

包含XML文档的字符串表示形式

DATETIMEOFFSET ((P))

字符串

io.开云体育官方注册网址debezium.time.ZonedTimestamp

带有时区信息的时间戳的字符串表示形式,其中时区为GMT

其他数据类型映射将在下面几节中描述。

如果存在,列的默认值将被传播到相应字段的Kafka Connect模式。更改消息将包含字段的默认值(除非给出了显式的列值),因此很少需要从模式获取默认值。传递默认值有助于满足兼容性规则使用Avro与Confluent模式注册中心一起作为序列化格式。

时间值

除了SQL Server之外DATETIMEOFFSET类型的值(包含时区信息),其他时态类型取决于time.precision.mode配置属性。当time.precision.mode配置属性设置为自适应(默认值),那么连接器将根据列的数据类型定义确定时态类型的文字类型和语义类型,以便事件完全表示数据库中的值:开云体育电动老虎机

SQL Server数据类型 文字类型(模式类型) 语义类型(模式名)和Notes

日期

INT32

io.开云体育官方注册网址debezium.time.Date

表示自纪元以来的天数。

时间(0)时间(1)时间(2)(3)

INT32

io.开云体育官方注册网址debezium.time.Time

表示午夜过后的毫秒数,不包括时区信息。

(4)时间(5)(6)

INT64

io.开云体育官方注册网址debezium.time.MicroTime

表示午夜过后的微秒数,不包括时区信息。

时间(7)

INT64

io.开云体育官方注册网址debezium.time.NanoTime

表示午夜过后的纳秒数,不包括时区信息。

DATETIME

INT64

io.开云体育官方注册网址debezium.time.Timestamp

表示经过纪元的毫秒数,不包括时区信息。

SMALLDATETIME

INT64

io.开云体育官方注册网址debezium.time.Timestamp

表示经过纪元的毫秒数,不包括时区信息。

DATETIME2 (0)DATETIME2 (1)DATETIME2 (2)DATETIME2 (3)

INT64

io.开云体育官方注册网址debezium.time.Timestamp

表示经过纪元的毫秒数,不包括时区信息。

DATETIME2 (4)DATETIME2 (5)DATETIME2 (6)

INT64

io.开云体育官方注册网址debezium.time.MicroTimestamp

表示经过epoch的微秒数,不包括时区信息。

DATETIME2 (7)

INT64

io.开云体育官方注册网址debezium.time.NanoTimestamp

表示纪元后的纳秒数,不包括时区信息。

time.precision.mode配置属性设置为连接,那么连接器将使用预定义的Kafka Connect逻辑类型。当用户只知道内置的Kafka Connect逻辑类型而无法处理可变精度的时间值时,这可能很有用。另一方面,由于SQL Server支持十分之一微秒精度,由连接器生成的事件与连接时间精度模式导致精度的损失当数据库列具有开云体育电动老虎机分数秒精度取值大于3:

SQL Server数据类型 文字类型(模式类型) 语义类型(模式名)和Notes

日期

INT32

org.apache.kafka.connect.data.Date

表示自纪元以来的天数。

时间([P])

INT64

org.apache.kafka.connect.data.Time

表示从午夜开始的毫秒数,不包括时区信息。SQL Server允许P在0-7范围内存储高达十分之一微秒的精度,尽管这种模式会导致精度损失P> 3。

DATETIME

INT64

org.apache.kafka.connect.data.Timestamp

表示从纪元开始的毫秒数,不包括时区信息。

SMALLDATETIME

INT64

org.apache.kafka.connect.data.Timestamp

表示经过纪元的毫秒数,不包括时区信息。

DATETIME2

INT64

org.apache.kafka.connect.data.Timestamp

表示从纪元开始的毫秒数,不包括时区信息。SQL Server允许P在0-7范围内存储高达十分之一微秒的精度,尽管这种模式会导致精度损失P> 3。

时间戳值

DATETIMESMALLDATETIMEDATETIME2类型表示不包含时区信息的时间戳。这些列将转换为基于UTC的等效Kafka Connect值。例如DATETIME2取值“2018-06-20 15:13:16.945104”由a表示io.开云体育官方注册网址debezium.time.MicroTimestamp值为“1529507596945104”。

注意,运行Kafka Connect和Debezium的JVM的时区不会影响这种转换。开云体育官方注册网址

十进制值

开云体育官方注册网址的设置来处理小数decimal.handling.mode连接器配置属性

decimal.handling.mode =精确
表11所示。映射时decimal.handling.mode =精确
SQL Server类型 文字类型(模式类型) 语义类型(模式名)

数字((P (S)))

字节

org.apache.kafka.connect.data.Decimal
规模模式参数包含一个整数,表示小数点移位了多少位。

小数((P (S)))

字节

org.apache.kafka.connect.data.Decimal
规模模式参数包含一个整数,表示小数点移位了多少位。

SMALLMONEY

字节

org.apache.kafka.connect.data.Decimal
规模模式参数包含一个整数,表示小数点移位了多少位。

字节

org.apache.kafka.connect.data.Decimal
规模模式参数包含一个整数,表示小数点移位了多少位。

decimal.handling.mode =双
表12。映射时decimal.handling.mode =双
SQL Server类型 文字类型 语义类型

数字((M [D]))

FLOAT64

N/A

小数((M [D]))

FLOAT64

N/A

SMALLMONEY ((M [D]))

FLOAT64

N/A

钱((M [D]))

FLOAT64

N/A

decimal.handling.mode =字符串
表13。映射时decimal.handling.mode =字符串
SQL Server类型 文字类型 语义类型

数字((M [D]))

字符串

N/A

小数((M [D]))

字符串

N/A

SMALLMONEY ((M [D]))

字符串

N/A

钱((M [D]))

字符串

N/A

设置SQL Server

为了让D开云体育官方注册网址ebezium从SQL Server表中捕获更改事件,具有必要权限的SQL Server管理员必须首先运行一个查询,以便在数据库上启用CDC。开云体育电动老虎机然后,管理员必须为希望Debezium捕获的每个表启用CDC。开云体育官方注册网址

默认情况下,到Microsoft SQL Server的JDBC连接受SSL加密保护。如果SQL Server数据库未启用SSL,或者希望不使用SSL连接到数据库,开云体育电动老虎机则可以通过设置开云体育电动老虎机database.encrypt属性中的

在应用CDC之后,它捕获所有的插入更新,删除提交给启用了CDD的表的操作。然后De开云体育官方注册网址bezium连接器可以捕获这些事件并将它们发送到Kafka主题。

在SQL Server数据库上启用CDC开云体育电动老虎机

在为表启用CDC之前,必须为SQL Server数据库启用CDC。开云体育电动老虎机SQL Server管理员通过运行系统存储过程启用CDC。系统存储过程可以通过使用SQL Server Management Studio或Transact-SQL来运行。

先决条件
  • 你是系统管理员SQL server的固定服务器角色。

  • 您是数据库的db_owner。开云体育电动老虎机

  • SQL Server Agent正在运行。

SQL Server CDC特性只处理在用户创建的表中发生的更改。不能在SQL Server上启用CDC开云体育电动老虎机数据库。
过程
  1. 视图2 .在“SQL Server Management Studio”菜单中单击模板资源管理器

  2. 模板的浏览器,扩大SQL Server模板

  3. 扩大更改Data Capture >配置然后点击启用CDC数据开云体育电动老虎机库

  4. 文件中的数据库名称开云体育电动老虎机使用语句,其中包含要为CDC启用的数据库的名称。开云体育电动老虎机

  5. 运行存储过程sys.sp_cdc_enable_db为CDC启用数据库。开云体育电动老虎机

    为CDC启用数据库后开云体育电动老虎机,一个名称为疾病预防控制中心与CDC用户、元数据表和其他系统对象一起创建。

    下面的示例显示如何为数据库启用CDC开云体育电动老虎机MyDB

    示例:CDC模板启用SQL Server数据库开云体育电动老虎机
    使用MyDB GO EXEC系统。sp_cdc_enable_db去

在SQL Server表上启用CDC

SQL Server管理员必须在您希望Debezium捕获的源表上启用更改数据捕获。开云体育官方注册网址CDC的开云体育电动老虎机数据库必须已经启用。若要在表上启用CDC, SQL Server管理员将运行存储过程sys.sp_cdc_enable_table在桌子上。存储过程可以通过使用SQL Server Management Studio或Transact-SQL来运行。必须为希望捕获的每个表启用SQL Server CDC。

先决条件
  • SQL Server数据库已启用CDC。开云体育电动老虎机

  • SQL Server Agent正在运行。

  • 你是db_owner数据库的固定开云体育电动老虎机数据库角色。

过程
  1. 视图2 .在“SQL Server Management Studio”菜单中单击模板资源管理器

  2. 模板的浏览器,扩大SQL Server模板

  3. 扩大更改Data Capture >配置,然后按启用表指定文件组选项

  4. 中的表名使用语句中包含要捕获的表的名称。

  5. 运行存储过程sys.sp_cdc_enable_table

    下面的示例显示如何为该表启用CDCMyTable

    示例:为SQL Server表启用CDC
    使用MyDB GO EXEC系统。sp_cdc_enable_table @source_schema = N'dbo', @source_name = N' mytable ',(1)@role_name = N' myrole ',(2)@filegroup_name = N' mydb_ct ',(3)@supports_net_changes = 0 GO
    1 指定要捕获的表的名称。
    2 指定角色MyRole您可以向其中添加您想要授予的用户选择对源表的捕获列的权限。用户系统管理员db_owner角色还可以访问指定的更改表。设置的值@role_name的成员系统管理员db_owner可以完全访问所捕获的信息。
    3. 指定了filegroupSQL Server在其中放置捕获表的更改表。指定的filegroup必须已经存在。最好不要将更改表定位在同一个目录中filegroup用于源表。

验证用户可以访问CDC表

SQL Server管理员可以运行系统存储过程来查询数据库或表,以检索其CDC配置信息。开云体育电动老虎机存储过程可以通过使用SQL Server Management Studio或Transact-SQL来运行。

先决条件
  • 你有选择捕获实例的所有捕获列的权限。委员会成员db_owner开云体育电动老虎机数据库角色可以查看所有已定义捕获实例的信息。

  • 您拥有为查询包含的表信息定义的任何门控角色的成员资格。

过程
  1. 视图2 .在“SQL Server Management Studio”菜单中单击对象资源管理器

  2. 从对象资源管理器展开开云体育电动老虎机数据库,然后展开数据库对象,例如,开云体育电动老虎机MyDB

  3. 扩大可编程性>存储过程>系统存储过程

  4. 运行sys.sp_cdc_help_change_data_capture存储过程来查询表。

    查询不应返回空结果。

    下面的示例运行存储过程sys.sp_cdc_help_change_data_capture关于数据库开云体育电动老虎机MyDB

    示例:查询CDC配置信息
    使用MyDB;GO EXEC sys。sp_cdc_help_change_data_capture去

    查询返回数据库中为CDC启用的每个表的配置信息,其中包含授权调用者访问的更改数据。开云体育电动老虎机如果结果为空,请验证用户是否拥有访问捕获实例和CDC表的特权。

Azure上的SQL Server

Debe开云体育官方注册网址zium SQL Server连接器可以与Azure上的SQL Server一起使用。指这个例子在Azure上为SQL Server配置CDC,并与Debezium一起使用。开云体育官方注册网址

SQL Server始终开启

SQL Server连接器可以从始终打开只读副本捕获更改。

先决条件
  • 在主节点上配置并启用了变更数据捕获。SQL Server不支持在副本上直接使用CDC。

  • 配置选项开云体育电动老虎机database.applicationIntent设置为只读的.这是SQL Server所要求的。当Debe开云体育官方注册网址zium检测到这个配置选项时,它会采取以下操作进行响应:

    • snapshot.isolation.mode快照,这是对只读副本支持的唯一一种事务隔离模式。

    • 在每次执行流查询循环时提交(只读)事务,这对于获得CDC数据的最新视图是必要的。

SQL Server捕获作业代理配置对服务器负载和延迟的影响

当数据库管理员开云体育电动老虎机为源表启用更改数据捕获时,捕获作业代理将开始运行。代理从事务日志中读取新的更改事件记录,并将事件记录复制到更改数据表中。从在源表中提交更改的时间到在相应的更改表中出现更改的时间之间,总是有一个很小的延迟间隔。这个延迟间隔表示源表中发生更改和Debezium可以将更改流传输到Apache Kafka之间的间隔。开云体育官方注册网址

理想情况下,对于必须快速响应数据更改的应用程序,您希望在源表和更改表之间保持密切的同步。您可能会想象,运行捕获代理以尽可能快地持续处理更改事件可能会增加吞吐量并减少延迟——在事件发生后,尽可能快地用新的事件记录填充更改表,几乎是实时的。然而,事实未必如此。在追求更即时的同步时,需要付出性能代价。捕获作业代理每次在数据库中查询新的事件记录时,都会增加数据库主机上的CPU负载。开云体育电动老虎机服务器上的额外负载可能会对整个数据库性能产生负面影响,并可能降低事务效率,特别是在数据库使用高峰期间。开云体育电动老虎机

监视数据库指标非常重要,这样您就可以知道数据库是否达开云体育电动老虎机到了服务器不再支持捕获代理活动级别的地步。如果您注意到性能问题,可以修改SQL Server捕获代理设置,以帮助在可容忍的延迟程度下平衡数据库主机上的整体CPU负载。开云体育电动老虎机

SQL Server捕获作业代理配置参数

在SQL Server上,控制捕获作业代理行为的参数定义在SQL Server表中msdb.dbo.cdc_jobs.如果在运行捕获作业代理时遇到性能问题,请通过运行捕获作业来调整捕获作业设置以减少CPU负载sys.sp_cdc_change_job存储过程和提供新值。

关于如何配置SQL Server捕获作业代理参数的具体指导超出了本文档的范围。

以下参数对于修改与Debezium SQL Server连接器一起使用的捕获代理行为是最重要的:开云体育官方注册网址

pollinginterval
  • 指定捕获代理在日志扫描周期之间等待的秒数。

  • 较高的值会减少数据库主机上的负载并增加延迟。开云体育电动老虎机

  • 值为0指定扫描之间不等待。

  • 默认值为5

maxtrans
  • 指定在每个日志扫描周期中要处理的最大事务数。捕获作业处理指定数量的事务后,它将暂停一段时间pollinginterval在开始下一次扫描之前指定。

  • 较低的值会减少数据库主机上的负载并增加延迟。开云体育电动老虎机

  • 默认值为500

maxscans
  • 指定捕获作业在捕获数据库事务日志的全部内容时可以尝试的扫描循环次数的限制。开云体育电动老虎机如果连续参数设置为1,工作暂停的时间长度pollinginterval在恢复扫描之前指定。

  • 较低的值会减少数据库主机上的负载并增加延迟。开云体育电动老虎机

  • 默认值为10

额外的资源
  • 有关捕获代理参数的更多信息,请参阅SQL Server文档。

部署

要部署Debezium 开云体育官方注册网址SQL Server连接器,您需要安装Debezium SQL Server连接器存档,配置连接器,并通过将其配置添加到Kafka Connect来启动连接器。

先决条件
过程
  1. 下载Debezium开云体育官方注册网址SQL Server连接器插件存档

  2. 将文件解压缩到Kafka Connect环境中。

  3. 将包含JAR文件的目录添加到卡夫卡连接的plugin.path

  4. 配置连接器将配置添加到Kafka Connect集群中。

  5. 重新启动Kafka Connect进程以获取新的JAR文件。

如果使用不可变容器,请参见开云体育官方注册网址Debezium的容器图像Åpache ZooKeeper, Apache Kafka和Kafka Connect。你可以拉那个官员Linux上的Microsoft SQL Server容器映像来自Docker Hub。

SQL Server连接器配置示例

下面是一个连接器实例的配置示例,该连接器实例从位于192.168.99.100上端口1433的SQL Server服务器捕获数据,逻辑上我们将其命名为192.168.99.100fullfillment.通常,通过设置连接器可用的配置属性,可以在JSON文件中配开云体育官方注册网址置Debezium SQL Server连接器。

您可以选择为数据库中的模式和表的子集生成事件。开云体育电动老虎机可选地,您可以忽略、屏蔽或截断包含敏感数据的列、大于指定大小的列或不需要的列。

{"name": "inventory-connector",(1)"config": {"connector.class": "io. 开云体育官方注册网址debezum .connector.sqlserver. sqlserverconnector ",(2)“开云体育电动老虎机数据库。主机名”:“192.168.99.100”,(3)“开云体育电动老虎机数据库。港”:“1433”,(4)“开云体育电动老虎机数据库。user": "sa",(5)“开云体育电动老虎机数据库。密码”:“密码!”(6):开云体育电动老虎机“database.names testDB1 testDB2”,(7)”的话题。前缀”:“fullfillment”,(8)“table.include。列表”:“dbo.customers”,(9)“schema.history.internal.kafka.bootstrap.servers”:“卡夫卡:9092”,(10):“schema.history.internal.kafka.topic schemahistory.fullfillment”(11)“开云体育电动老虎机database.ssl。truststore": "path/to/trust-store"(12)“开云体育电动老虎机database.ssl.truststore。密码”:“password-for-trust-store”(13)}}
1 当我们向Kafka Connect服务注册连接器时,连接器的名称。
2 此SQL Server连接器类的名称。
3. SQL Server实例的地址。
4 SQL Server实例的端口号。
5 SQL Server用户名
6 SQL Server用户的密码
7 要从中捕获更改的数据库的名称。开云体育电动老虎机
8 SQL Server实例/集群的主题前缀,它形成了一个名称空间,并在连接器写入的所有Kafka主题的名称中使用,Kafka Connect模式名称中使用,当连接器写入时,对应的Avro模式的名称空间中使用Avro转换器使用。
9 Debezium应该捕获其更改的所有表的列表。开云体育官方注册网址
10 该连接器将使用的Kafka代理列表,用于将DDL语句写入数据库模式历史主题并将其恢复。开云体育电动老虎机
11 数据库模式历史主题的名称,连接器开云体育电动老虎机将在其中写入和恢复DDL语句。此主题仅供内部使用,消费者不应使用。
12 存储服务器签名者证书的SSL信任存储库的路径。除非禁用数据库加密,否则此属性是必需的(开云体育电动老虎机开云体育电动老虎机database.encrypt = false).
13 SSL信任存储库密码。除非禁用数据库加密,否则此属性是必需的(开云体育电动老虎机开云体育电动老虎机database.encrypt = false).

有关可以为Debezium SQL Server连接器设置的配置属性的完整列表,请参见开云体育官方注册网址SQL Server连接器属性

您可以使用帖子命令到正在运行的Kafka Connect服务。该服务记录配置并启动一个连接器任务,该任务执行以下任务:

  • 用于连接SQL Server数据库。开云体育电动老虎机

  • 读取事务日志。

  • 记录Kafka主题的更改事件。

添加连接器配置

要开始运行Debezium SQL S开云体育官方注册网址erver连接器,请创建一个连接器配置,并将该配置添加到Kafka Connect集群。

先决条件
过程
  1. 为SQL Server连接器创建一个配置。

  2. 使用Kafka连接REST API将该连接器配置添加到Kafka Connect集群中。

结果

当连接器启动时,它将执行一致性快照连接器为其配置的SQL Server开云体育电动老虎机数据库。然后连接器开始为行级操作生成数据更改事件,并将更改事件记录流式传输到Kafka主题。

连接器属性

Debe开云体育官方注册网址zium SQL Server连接器有许多配置属性,您可以使用这些属性为您的应用程序实现正确的连接器行为。许多属性都有默认值。

属性信息组织如下:

必需的Debezi开云体育官方注册网址um SQL Server连接器配置属性

以下配置属性为要求除非有默认值可用。

财产 默认的 描述

没有默认的

连接器的唯一名称。尝试使用相同的名称再次注册将失败。(所有Kafka Connect连接器都需要这个属性。)

没有默认的

连接器的Java类的名称。始终使用值io.开云体育官方注册网址debezium.connector.sqlserver.SqlServerConnectorSQL Server连接器。

1

指定连接器可用于从数据库实例捕获数据的最大任务数。开云体育电动老虎机如果开云体育电动老虎机database.names列表包含多个元素,您可以将此属性的值增加为小于或等于列表中元素数量的数字。

没有默认的

SQL Server数据库服务器的IP地址或主机名。开云体育电动老虎机

1433

SQL Server数据库服务器的整数端口号。开云体育电动老虎机

没有默认的

连接SQL Server数据库服务器时使用的用户名。开云体育电动老虎机使用Kerberos身份验证时可以省略,可以使用直通属性

没有默认的

连接SQL Server数据库服务器时使用的密码。开云体育电动老虎机

没有默认的

属性的实例名SQL Server命名实例

没有默认的

以逗号分隔的SQL Server数据库名称列表,要从其中传输更改。开云体育电动老虎机

没有默认的

主题前缀,为您希望Debezium捕获的SQL Server数据库服务器提供一个名称空间。开云体育官方注册网址开云体育电动老虎机该前缀在所有其他连接器中应该是唯一的,因为它被用作从该连接器接收记录的所有Kafka主题名称的前缀。数据库服务器逻辑名中只能使用字母数字字符、连字符、点和下划线。开云体育电动老虎机

不要更改此属性的值。如果更改了name值,在重新启动后,连接器不会继续向原始主题发出事件,而是向名称基于新值的主题发出后续事件。连接器也无法恢复其数据库模式历史记录主题。开云体育电动老虎机

没有默认的

一个可选的、以逗号分隔的正则表达式列表,该列表与您要使用的模式名称匹配想要捕获变更。中未包含的任何模式名称schema.include.list被排除在捕获其更改之外。默认情况下,连接器捕获所有非系统模式的更改。

为了匹配模式的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与模式的整个名称字符串匹配;它不匹配可能出现在模式名称中的子字符串。
如果在配置中包含此属性,则不要同时设置schema.exclude.list财产。

没有默认的

一个可选的、以逗号分隔的正则表达式列表,该列表与您要使用的模式名称匹配想要捕捉变化。中未包含其名称的模式schema.exclude.list捕获其更改(系统模式除外)。

为了匹配模式的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与模式的整个名称字符串匹配;它不匹配可能出现在模式名称中的子字符串。
如果在配置中包含此属性,则不要设置schema.include.list财产。

没有默认的

一个可选的逗号分隔的正则表达式列表,它与您希望Debezium捕获的表的完全限定表标识符匹配。开云体育官方注册网址默认情况下,连接器捕获指定模式的所有非系统表。设置此属性时,连接器仅从指定的表捕获更改。每个标识符都是这样的schemaName的表

为了匹配表的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与表的整个名称字符串匹配;它不匹配表名中可能存在的子字符串。
如果在配置中包含此属性,则不要同时设置table.exclude.list财产。

没有默认的

一个以逗号分隔的可选正则表达式列表,它与希望排除在捕获之外的表的完全限定表标识符匹配。开云体育官方注册网址Debezium捕获未包含的所有表table.exclude.list.每个标识符都是这样的schemaName的表

为了匹配表的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与表的整个名称字符串匹配;它不匹配表名中可能存在的子字符串。
如果在配置中包含此属性,则不要同时设置table.include.list财产。

空字符串

一个以逗号分隔的可选正则表达式列表,该列表与应包含在更改事件消息值中的列的完全限定名称匹配。列的完全限定名的格式为schemaName的表columnName.请注意,主键列总是包含在事件的键中,即使没有包含在值中。

为了匹配列的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;它不匹配可能出现在列名中的子字符串。
如果在配置中包含此属性,则不要同时设置column.exclude.list财产。

空字符串

一个以逗号分隔的可选正则表达式列表,该列表与应从更改事件消息值中排除的列的完全限定名称匹配。列的完全限定名的格式为schemaName的表columnName.请注意,主键列总是包含在事件的键中,如果从值中排除也一样。

为了匹配列的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;它不匹配可能出现在列名中的子字符串。
如果在配置中包含此属性,则不要同时设置column.include.list财产。

N/A

一个可选的、以逗号分隔的正则表达式列表,它与基于字符的列的完全限定名匹配。列的完全限定名的格式为' < schemaName ><表>< columnName >”。
为了匹配列的名称,Debezium应用您指定为_anchor开云体育官方注册网址的正则表达式
正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;表达式不匹配可能出现在列名中的子字符串。在产生的更改事件记录中,指定列的值将被假名替换。

假名由应用指定的参数产生的散列值组成hashAlgorithm.根据所使用的散列函数,将维护引用完整性,而列值将被假名替换。中描述了支持的哈希函数MessageDigest节Java密码体系结构标准算法名称文档。

在下面的例子中,CzQMA0cB5K是随机选择的盐。

column.mask.hash.sha with.salt——256.。CzQMA0cB5K =库存。订单。customerName, inventory.shipment.customerName

必要时,笔名会自动缩短为列的长度。连接器配置可以包括多个属性,这些属性指定不同的哈希算法和盐。

取决于hashAlgorithm使用,选中的数据集与实际数据集相匹配时,得到的数据集可能不会被完全屏蔽。

如果值在不同的位置或系统中被散列,则应该使用散列策略版本2来确保保真度。

自适应

时间、日期和时间戳可以用不同的精度表示,包括:自适应(默认值)根据数据库列的类型,使用毫秒、微秒或纳秒精度值捕获与数据库中完全相同的时间和时间戳值;开云体育电动老虎机或连接总是使用Kafka Connect内置的时间、日期和时间戳表示来表示时间和时间戳值,无论数据库列的精度如何,它都使用毫秒精度。开云体育电动老虎机看到时间值

精确的

指定连接器应如何处理的值小数数字列:

精确的(默认值)精确地表示它们使用java.math.BigDecimal变更事件中以二进制形式表示的值。

表示它们使用值,这可能会导致精度损失,但更容易使用。

字符串将值编码为格式化的字符串,这很容易使用,但关于真实类型的语义信息会丢失。

真正的

布尔值,指定连接器是否应该将数据库模式中的更改发布到与数据库服务器ID同名的Kafka主题。开云体育电动老虎机每个模式更改都用一个包含数据库名称的键和一个描述模式更新的JSON结构值来记录。开云体育电动老虎机这与连接器内部记录数据库模式历史的方式无关。开云体育电动老虎机默认为真正的

真正的

控制是否删除事件之后是一个墓碑事件。

真正的-删除操作用a表示删除事件和后续的墓碑事件。

-只有一个删除事件被触发。

当一个源记录被删除后,触发一个墓碑事件(默认行为)允许Kafka完全删除与被删除行的键相关的所有事件日志压实已为主题启用。

N/A

一个可选的、以逗号分隔的正则表达式列表,它与基于字符的列的完全限定名匹配。类指定的字符数时,如果要截断一组列中的数据,请设置此属性长度属性名。集长度到正整数值,例如,column.truncate.to.20.chars

列的完全限定名遵循以下格式:< schemaName ><表>< columnName >.为了匹配列的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;表达式不匹配可能出现在列名中的子字符串。

您可以在单个配置中指定具有不同长度的多个属性。

N/A列的完全限定名的格式为schemaName的表columnName

一个可选的、以逗号分隔的正则表达式列表,它与基于字符的列的完全限定名匹配。如果希望连接器屏蔽一组列的值,请设置此属性,例如,如果这些列包含敏感数据。集长度为正整数,以将指定列中的数据替换为星号()指定的字符长度属性名。集长度0(0)将指定列中的数据替换为空字符串。

列的完全限定名遵循以下格式:schemaName的表columnName.为了匹配列的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;表达式不匹配可能出现在列名中的子字符串。

您可以在单个配置中指定具有不同长度的多个属性。

N/A

一个可选的、以逗号分隔的正则表达式列表,它与您希望连接器为其发出表示列元数据的额外参数的列的完全限定名称匹配。设置此属性后,连接器将向事件记录模式添加以下字段:

  • __开云体育官方注册网址debezium.source.column.type

  • __开云体育官方注册网址debezium.source.column.length

  • __开云体育官方注册网址debezium.source.column.scale

这些参数分别传播列的原始类型名称和长度(对于变宽类型)。
启用连接器发出这些额外的数据可以帮助适当调整接收器数据库中特定的数字或基于字符的列的大小。开云体育电动老虎机

列的完全限定名遵循以下格式:schemaName的表columnName
为了匹配列的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与列的整个名称字符串匹配;表达式不匹配可能出现在列名中的子字符串。

N/A

一个可选的、以逗号分隔的正则表达式列表,用于指定为数据库中的列定义的数据类型的完全限定名称。开云体育电动老虎机当设置此属性时,对于具有匹配数据类型的列,连接器将发出事件记录,其中在其模式中包含以下额外字段:

  • __开云体育官方注册网址debezium.source.column.type

  • __开云体育官方注册网址debezium.source.column.length

  • __开云体育官方注册网址debezium.source.column.scale

这些参数分别传播列的原始类型名称和长度(对于变宽类型)。
启用连接器发出这些额外的数据可以帮助适当调整接收器数据库中特定的数字或基于字符的列的大小。开云体育电动老虎机

列的完全限定名遵循以下格式:schemaName的表typeName
为了匹配数据类型的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与数据类型的整个名称字符串匹配;表达式与类型名中可能出现的子字符串不匹配。

有关特定于SQL server的数据类型名称的列表,请参见SQL Server数据类型映射

N/A

一个表达式列表,用于指定连接器用来为发布到指定表的Kafka主题的更改事件记录形成自定义消息键的列。

默认情况下,Debezi开云体育官方注册网址um使用表的主键列作为它发出的记录的消息键。为了代替默认值,或者为缺少主键的表指定一个键,您可以基于一个或多个列配置自定义消息键。

若要为表建立自定义消息键,请列出表,然后列出用作消息键的列。每个列表条目采用以下格式:

< fully-qualified_tableName >< keyColumn >< keyColumn >

若要基于多个列名创建表键,请在列名之间插入逗号。

每个全限定表名都是一个正则表达式,格式如下:

< schemaName ><表>

该属性可以包括多个表的条目。使用分号分隔列表中的表项。

下面的示例为表设置消息键inventory.customerspurchase.orders

inventory.customers: pk1 pk2; (. *) .purchaseorders: pk3 pk4

对于桌子来说inventory.customer,列pk1pk2指定为消息键。为任何模式中的表,列pk3pk4服务器作为消息键。

用于创建自定义消息键的列的数量没有限制。但是,最好使用指定唯一键所需的最小数目。

字节

指定二进制(二进制varbinary)列应在更改事件中表示,包括:字节表示二进制数据为字节数组(默认),base64表示二进制数据为base64编码的字符串,base64-url-safe表示二进制数据为base64-url-safe-encoded String,十六进制表示二进制数据为十六进制编码(base16)字符串

没有一个

指定应如何调整模式名称以与连接器使用的消息转换器兼容。可能的设置:

  • 没有一个不应用任何调整。

  • avro将不能在Avro类型名称中使用的字符替换为下划线。

高级SQL Server连接器配置属性

以下先进的配置属性具有良好的默认值,在大多数情况下都可以工作,因此很少需要在连接器的配置中指定。

财产 默认的 描述

没有默认的

属性的符号名称的逗号分隔列表自定义转换器连接器可以使用的实例。例如,

国际标准图书编号

您必须设置转换器属性使连接器能够使用自定义转换器。

对于为连接器配置的每个转换器,还必须添加.type属性,该属性指定实现转换器接口的类的全限定名称。的.type属性使用以下格式:

< converterSymbolicName >.type

例如,

isbn。类型:io.debezium.test.IsbnConverter

如果希望进一步控制已配置转换器的行为,可以添加一个或多个配置参数来将值传递给转换器。若要将任何其他配置参数与转换器关联起来,请在参数名称前加上转换器的符号名称。例如,

isbn.schema.name: io.开云体育官方注册网址debezium.sqlserver.type.Isbn

最初的

一种对所捕获表的结构和可选数据进行初始快照的模式。快照完成后,连接器将继续从数据库的重做日志中读取更改事件。开云体育电动老虎机支持如下值:

  • 最初的:捕获表的结构和数据的快照;如果主题应该用捕获表中数据的完整表示来填充,则此选项很有用。

  • initial_only:对结构和数据进行快照,例如最初的而是在快照完成后不转换为流更改。

  • schema_only:只对捕获的表的结构进行快照;如果从现在开始发生的变化应该传播到主题,那么就有用了。

中指定的所有表table.include.list

匹配完全限定名称的可选、逗号分隔的正则表达式列表(< dbName >< schemaName ><表>)中包含在快照中的表。指定的项必须在连接器的table.include.list财产。此属性仅在连接器为snapshot.mode属性的值设置为从来没有
此属性不影响增量快照的行为。

为了匹配表的名称,Debezium应用您指定为的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,指定的表达式与表的整个名称字符串匹配;它不匹配表名中可能存在的子字符串。

repeatable_read

模式,以控制使用哪种事务隔离级别以及连接器锁定指定用于捕获的表的时间。支持如下值:

  • read_uncommitted

  • read_committed

  • repeatable_read

  • 快照

  • 独家独家模式使用可重复的读隔离级别,但是,它需要读取所有表上的排他锁)。

快照read_committedread_uncommitted模式不会阻止其他事务在初始快照期间更新表行。的独家repeatable_read模式确实会阻止并发更新。

模式选择也会影响数据一致性。只有独家快照模式保证了全一致性,即初始快照和流日志构成线性历史记录。如果repeatable_readread_committed模式下,可能会发生这样的情况,例如,添加的记录出现两次——一次在初始快照中,一次在流阶段。尽管如此,这种一致性级别应该适用于数据镜像。为read_uncommitted根本没有数据一致性保证(一些数据可能丢失或损坏)。

失败

指定连接器在事件处理期间应如何对异常作出反应。失败将传播异常(指示有问题事件的偏移量),导致连接器停止。
警告将导致跳过有问题的事件并记录有问题事件的偏移量。
跳过将导致跳过有问题的事件。

500

正整数值,指定连接器在每次迭代期间等待新更改事件出现的毫秒数。缺省值为1000毫秒,即1秒。

8192

正整数值,指定阻塞队列可以容纳的最大记录数。当Debe开云体育官方注册网址zium从数据库读取事件流时,它会在将事件写入Kafka之前开云体育电动老虎机将其放在阻塞队列中。如果连接器接收消息的速度比写入Kafka的速度快,或者Kafka变得不可用,阻塞队列可以为从数据库读取更改事件提供反压力。开云体育电动老虎机当连接器定期记录偏移量时,队列中保存的事件将被忽略。总是设置的值max.queue.size大于…的值max.batch.size

0

一个长整数值,以字节为单位指定阻塞队列的最大容量。默认情况下,不为阻塞队列指定卷限制。若要指定队列可以使用的字节数,请将此属性设置为正的长值。
如果max.queue.size时,当队列大小达到任一属性指定的限制时,将阻塞对队列的写入。例如,如果你设置max.queue.size = 1000,max.queue.size.in.bytes = 5000,当队列中有1000条记录时,或者队列中记录的容量达到5000字节时,写入队列被阻塞。

2048

正整数值,指定在此连接器的每次迭代期间应处理的每批事件的最大大小。

0

控制心跳消息的发送频率。
此属性包含以毫秒为单位的间隔,该间隔定义连接器向心跳主题发送消息的频率。该属性可用于确认连接器是否仍在接收来自数据库的更改事件。开云体育电动老虎机在较长一段时间内只更改非捕获表中的记录的情况下,还应该利用心跳消息。在这种情况下,连接器会继续从数据库中读取日志,但不会向Kafka发出任何更改消息,这反过来意味着没有偏移量更新提交给Kafka。开云体育电动老虎机这可能导致在连接器重新启动后重新发送更多的更改事件。将此参数设置为0完全不发送心跳消息。
默认禁用。

没有默认的

连接器启动后在快照之前应该等待的间隔(以毫秒为单位);
可用于在启动集群中的多个连接器时避免快照中断,这可能导致连接器的重新平衡。

2000

指定在进行快照时应一次性从每个表读取的最大行数。连接器将以这个大小的多个批次读取表内容。默认为2000。

没有默认的

指定为给定查询的每次数据库往返获取的行数。开云体育电动老虎机默认为JDBC驱动程序的默认读取大小。

10000

整数值,指定在执行快照时等待获得表锁的最大时间(以毫秒为单位)。如果在此时间间隔内无法获取表锁,快照将失败(另请参阅快照).
当设置为0当连接器无法获得锁时,它将立即失败。价值-1表示无限等待。

没有默认的

指定要包含在快照中的表行。如果希望快照仅包含表中行的子集,请使用此属性。此属性仅影响快照。它不适用于连接器从日志中读取的事件。

属性包含表单中以逗号分隔的全限定表名列表< schemaName >。<表>.例如,

“snapshot.select.statement。覆盖”:“inventory.products customers.orders”

对于列表中的每个表,再添加一个配置属性,用于指定选择语句,以便连接器在获取快照时在表上运行。指定的选择语句确定要包含在快照中的表行子集。使用以下格式指定此文件的名称选择声明属性:

snapshot.select.statement.overrides。< schemaName ><表>.例如,snapshot.select.statement.overrides.customers.orders

例子:

从一个customers.orders包含软删除列的表,delete_flag,如果您希望快照只包含那些未被软删除的记录,则添加以下属性:

“snapshot.select.statement。覆盖”:“客户。订单", "snapshot.select.statement.overrides.customer.orders": "SELECT * FROM [customers].[orders] WHERE delete_flag = 0 ORDER BY id DESC"

在生成的快照中,连接器仅包括其记录Delete_flag = 0

v2

的架构版本阻断CDC事件;开云体育官方注册网址Debezium 0.10引入了一些突破
的结构的更改块,以便在所有连接器之间统一暴露的结构。
通过将此选项设置为v1可以生成早期版本中使用的结构。注意,不建议使用这种设置,并计划在未来的Debezium版本中删除。开云体育官方注册网址

真正的连接器配置显式指定key.convertervalue.converter参数使用Avro,否则默认为

字段名是否被净化以符合Avro命名要求。看到Avro命名欲知详情。

当设置为真正的开云体育官方注册网址Debezium生成具有事务边界的事件,并使用事务元数据丰富数据事件信封。

10000(10秒)

发生可恢复错误后重新启动连接器之前等待的毫秒数。

t

以逗号分隔的操作类型列表,将在流处理期间跳过。操作包括:c插入/创建、u的更新,d删除,t对于截断,和没有一个不跳过任何操作。默认情况下,截断操作将被跳过(此连接器不会触发)。

无默认值

用于发送的数据集合的完全限定名称信号到连接器。
使用以下格式指定集合名称:
<开云体育电动老虎机数据库名>< schemaName ><表>

允许在增量快照期间更改模式。启用后,连接器将在增量快照期间检测模式更改,并重新选择当前块以避免锁定ddl。

注意,不支持对主键的更改,如果在增量快照期间执行,可能会导致错误的结果。另一个限制是,如果模式更改只影响列的默认值,则直到从binlog流处理DDL时才会检测到更改。这不会影响快照事件的值,但是快照事件的模式可能有过时的默认值。

1024

在增量快照块期间连接器获取并读入内存的最大行数。增加块大小可以提供更高的效率,因为快照运行更少的大大小快照查询。但是,较大的块大小也需要更多内存来缓冲快照数据。将块大小调整为在您的环境中提供最佳性能的值。

0

指定当对数据库中多个表的更改进行流处理时,每次迭代用于减少内存占用的最大事务数。开云体育电动老虎机当设置为0(默认值),连接器使用当前最大LSN作为获取更改的范围。当设置为大于0的值时,连接器使用该设置指定的第n个LSN作为获取更改的范围。

对增量快照期间使用的所有SELECT语句使用OPTION(RECOMPILE)查询选项。这可以帮助解决可能发生的参数嗅探问题,但这些问题会导致源数据库上的CPU负载增加,具体取决于查询执行的频率。开云体育电动老虎机

io.开云体育官方注册网址debezium.schema.SchemaTopicNamingStrategy

TopicNamingStrategy类的名称默认为,该类应用于确定数据更改、模式更改、事务、心跳事件等的主题名称SchemaTopicNamingStrategy

指定主题名称的分隔符,默认为

10000

用于在有界并发散列映射中保存主题名称的大小。此缓存将帮助确定与给定数据集合对应的主题名称。

__开云体育官方注册网址debezium-heartbeat

控制连接器向其发送心跳消息的主题的名称。主题名称有这样的模式:

topic.heartbeat.prefixtopic.prefix

例如,如果主题前缀为实现,默认主题名为__开云体育官方注册网址debezium-heartbeat.fulfillment

事务

控制连接器向其发送事务元数据消息的主题的名称。主题名称有这样的模式:

topic.prefixtopic.transaction

例如,如果主题前缀为实现,默认主题名为fulfillment.transaction

有关更多信息,请参见事务的元数据

开云体育官方注册网址Debezium SQL Server连开云体育电动老虎机接器数据库模式历史配置属性

开云体育官方注册网址Debezium提供了一组schema.history.internal。*属性,这些属性控制连接器如何与模式历史主题交互。

下表描述了schema.history.internal属性用于配置Debezium连接器。开云体育官方注册网址

表14。连接器数据库模式历史开云体育电动老虎机配置属性
财产 默认的 描述

没有默认的

连接器存储数据库模式历史的Kafka主题的全称。开云体育电动老虎机

没有默认的

连接器用来建立到Kafka集群的初始连接的主机/端口对列表。此连接用于检索以前由连接器存储的数据库模式历史,并用于写入从源数据库读取的每个DDL语开云体育电动老虎机句。每一对都应该指向Kafka Connect进程使用的相同的Kafka集群。

One hundred.

一个整数值,指定连接器在启动/恢复期间轮询持久数据时应等待的最大毫秒数。默认值是100ms。

3000

一个整数值,指定连接器在使用Kafka管理客户端获取集群信息时应该等待的最大毫秒数。

30000

一个整数值,指定连接器在使用kafka管理客户端创建kafka历史主题时应该等待的最大毫秒数。

One hundred.

在连接器恢复失败并发生错误之前,连接器应尝试读取持久历史数据的最大次数。接收不到数据后等待的最大时间为recovery.attempts×recovery.poll.interval.ms

一个布尔值,指定连接器是否应该忽略格式错误或未知的数据库语句,还是停止处理以便人工修复问题。开云体育电动老虎机安全默认值为.在处理binlog时,应该小心使用跳过,因为它可能导致数据丢失或损坏。

一个布尔值,指定连接器是否应该记录所有DDL语句

真正的只记录那些DDL语句,这些语句与Debezium正在捕获的表的更改相关。开云体育官方注册网址设置为真正的要小心,因为如果您更改捕获了哪些表的更改,则可能需要丢失数据。

安全默认值为

用于配置生产者和使用者客户开云体育电动老虎机机的传递数据库模式历史属性


开云体育官方注册网址Debezium依赖Kafka生成器将模式更改写入数据库模式历史主题。开云体育电动老虎机类似地,当连接器启动时,它依赖于Kafka消费者从数据库模式历史主题中读取。开云体育电动老虎机为Kafka生产者和消费者客户端定义配置,方法是将值赋给一组以schema.history.internal.producer。*schema.history.internal.consumer。*前缀。直通生产者和消费者数据库模式历史属性控制一系列行为,比如这些客户端如何保护与K开云体育电动老虎机afka代理的连接,如下例所示:

SSL schema.history.internal.producer.ssl.keystore.location schema.history.internal.producer.security.protocol = = / var /私人/ SSL / kafka.server.keystore.jks schema.history.internal.producer.ssl.keystore.password = test1234 schema.history.internal.producer.ssl.truststore.location = / var /私人/ SSL / kafka.server.truststore.jks schema.history.internal.producer.ssl.truststore.password = test1234 schema.history.internal.producer.ssl.key.password = test1234 schema.history.internal.consumer.security.protocol = SSLSchema.history.internal.consumer.ssl.keystore.location =/var/private/ssl/kafka.server.keystore.jks Schema.history.internal.consumer.ssl.keystore.location =test1234 schema.history.internal.consumer.ssl.truststore.location=/var/private/ssl/kafka.server.truststore.jks schema.history.internal.consumer.ssl.truststore.password=test1234 schema.history.internal.consumer.ssl.keystore.password=test1234

开云体育官方注册网址Debezium在将属性传递给Kafka客户端之前,会从属性名中去掉前缀。

更多细节请参阅Kafka文档Kafka生产者配置属性Kafka消费者配置属性

开云体育官方注册网址Debezium SQL Server连接器直通数据库驱动程序配置属性开云体育电动老虎机

Debe开云体育官方注册网址zium连接器提供数据库驱动程序的直通配置。开云体育电动老虎机传递数据库属性以前缀开始开云体育电动老虎机司机。*.例如,连接器传递的属性为driver.foobar = false到JDBC URL。

的情况也是如此数据库模式历史客户端的传递属性开云体育电动老虎机, 开云体育官方注册网址Debezium在将前缀传递给数据库驱动程序之前将它们从属性中剥离。开云体育电动老虎机

开云体育电动老虎机数据库模式演变

当为SQL Server表启用更改数据捕获时,当表中发生更改时,事件记录将持久化到服务器上的捕获表中。如果在源表的结构中引入更改,例如通过添加新列,则该更改不会动态地反映在更改表中。只要捕获表继续使用过时的模式,Debezium连接器就无法正确地为表发出数据更改事件。开云体育官方注册网址您必须进行干预以刷新捕获表,以使连接器能够恢复处理更改事件。

由于CDC在SQL Server中的实现方式,您不能使用Debezium更新捕获表。开云体育官方注册网址要刷新捕获表,必须是具有提升权限的SQL Server数据库操作员。开云体育电动老虎机作为Deb开云体育官方注册网址ezium用户,您必须与SQL Server数据库操作员协调任务,以完成模式刷新并将流恢复到Kafka主题。开云体育电动老虎机

您可以使用以下方法之一在模式更改后更新捕获表:

  • 脱机模式更新要求您在更新捕获表之前停止Debezium连接器开云体育官方注册网址。

  • 在线模式更新可以在Debezium连接器运行时更新捕获表。开云体育官方注册网址

使用每种类型的程序都有优点和缺点。

无论使用在线更新方法还是离线更新方法,在对同一个源表应用后续模式更新之前,都必须完成整个模式更新过程。最佳实践是在一个批处理中执行所有ddl,这样过程就可以只运行一次。

启用CDC的源表不支持某些模式更改。例如,如果在表上启用了CDC,则如果您重命名了表的某个列或更改了列类型,SQL Server不允许您更改表的模式。

更改源表中的列后非空反之亦然,SQL Server连接器在创建新的捕获实例之前不能正确地捕获已更改的信息。如果在更改列名称后没有创建新的捕获表,则连接器发出的更改事件记录不能正确指示列是否为可选。也就是说,以前定义为可选的列(或)仍然是,尽管现在被定义为非空.类似地,按需要定义的列(非空),虽然它们现在被定义为

在使用重命名表后sp_rename函数,则它将继续在旧源表名下发出更改,直到连接器重新启动。重新启动连接器时,它将在新的源表名下发出更改。

脱机模式更新

脱机模式更新为更新捕获表提供了最安全的方法。但是,脱机更新对于需要高可用性的应用程序可能不可行。

先决条件
  • 已向启用CDC的SQL Server表的模式提交更新。

  • 您是具有高级权限的SQL Server数据开云体育电动老虎机库操作员。

过程
  1. 挂起更新数据库的应用程序。开云体育电动老虎机

  2. 等待Debezium连接器开云体育官方注册网址流化所有未流化的变更事件记录。

  3. 停止Debeziu开云体育官方注册网址m连接器。

  4. 将所有更改应用到源表模式。

  5. 为更新源表创建一个新的捕获表sys.sp_cdc_enable_table过程,其参数值为唯一值@capture_instance

  6. 恢复步骤1中暂停的应用程序。

  7. 启动Debezium开云体育官方注册网址连接器。

  8. 在Debezium连开云体育官方注册网址接器从新的捕获表开始流化之后,通过运行存储过程删除旧的捕获表sys.sp_cdc_disable_table使用参数@capture_instance设置为旧的捕获实例名称。

在线模式更新

完成在线模式更新的过程比运行离线模式更新的过程更简单,您可以在不需要应用程序和数据处理停机的情况下完成它。但是,使用在线模式更新,在更新源数据库中的模式之后,但在创建新的捕获实例之前,可能会出现潜在的处理间隙。开云体育电动老虎机在此期间,变更表的旧实例继续捕获变更事件,保存到旧表的变更数据保留早期模式的结构。因此,例如,如果您向源表添加了一个新列,则在新的捕获表准备好之前产生的更改事件不包含用于新列的字段。如果您的应用程序不允许这样的过渡时期,那么最好使用脱机模式更新过程。

先决条件
  • 已向启用CDC的SQL Server表的模式提交更新。

  • 您是具有高级权限的SQL Server数据开云体育电动老虎机库操作员。

过程
  1. 将所有更改应用到源表模式。

  2. 命令为更新源表创建一个新的捕获表sys.sp_cdc_enable_table存储过程,参数值为唯一值@capture_instance

  3. 当Debe开云体育官方注册网址zium开始从新的捕获表进行流处理时,您可以通过运行sys.sp_cdc_disable_table参数的存储过程@capture_instance设置为旧的捕获实例名称。

示例:在数据库模式改变后,执行在线模式更新开云体育电动老虎机

让我们部署基于SQL Server的开云体育官方注册网址Debezium教程演示在线模式更新。

在下面的例子中,列phone_number添加到客户表格

  1. 输入以下命令启动数据库shell:开云体育电动老虎机

Docker-compose -f Docker-compose -sqlserver。yaml exec sqlserver bash -c '/opt/mssql-tools/bin/ sqlmd -U sa -P $SA_PASSWORD -d testDB'
  1. 的模式客户源表通过运行以下查询来添加phone_number字段:

    ALTER TABLE:添加表号为VARCHAR
  2. 命令创建新的捕获实例sys.sp_cdc_enable_table存储过程。

    执行系统。sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'customers', @role_name = NULL, @supports_net_changes = 0, @capture_instance = 'dbo_customers_v2';去
  3. 中插入新数据客户表通过运行以下查询:

    INSERT INTO customers(first_name,last_name,email,phone_number) VALUES ('John','Doe','john.doe@example.com', '+1-555-123456');去

    Kafka Connect日志通过类似以下消息的条目报告配置更新:

    connect_1 | 2019-01-17 10:11:14,924信息| |多个捕获实例呈现相同的表:“dbo_customers”[sourceTableId = testDB.dbo捕获实例。客户,changeTableId = testDB.cdc。dbo_customers_CT, startLsn=00000024:00000d98:0036, changeTableObjectId=1525580473, stopLsn=00000025:00000ef8:0048] and Capture instance "dbo_customers_v2" [sourceTableId=testDB.dbo.customers, changeTableId=testDB.cdc.dbo_customers_v2_CT, startLsn=00000025:00000ef8:0048, changeTableObjectId=1749581271, stopLsn=NULL] [io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource] connect_1 | 2019-01-17 10:11:14,924 INFO || Schema will be changed for ChangeTable [captureInstance=dbo_customers_v2, sourceTableId=testDB.dbo.customers, changeTableId=testDB.cdc.dbo_customers_v2_CT, startLsn=00000025:00000ef8:0048, changeTableObjectId=1749581271, stopLsn=NULL] [io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource] ... connect_1 | 2019-01-17 10:11:33,719 INFO || Migrating schema to ChangeTable [captureInstance=dbo_customers_v2, sourceTableId=testDB.dbo.customers, changeTableId=testDB.cdc.dbo_customers_v2_CT, startLsn=00000025:00000ef8:0048, changeTableObjectId=1749581271, stopLsn=NULL] [io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource]

    最终,phone_number字段被添加到模式中,它的值出现在写入Kafka主题的消息中。

    ...{“类型”:“弦”、“可选”:真的,“场”:“phone_number”}…“后”:{" id ": 1005年,“first_name”:“约翰”,“last_name”:“母鹿”、“电子邮件”:“john.doe@example.com”,“phone_number”:“+ 1-555-123456”},
  4. 命令删除旧的捕获实例sys.sp_cdc_disable_table存储过程。

    执行系统。Sp_cdc_disable_table @source_schema = 'dbo', @source_name = 'dbo_customers', @capture_instance = 'dbo_customers';去

监控

除了Zo开云体育官方注册网址okeeper、Kafka和Kafka Connect提供的内置JMX指标支持外,Debezium SQL Server连接器还提供了三种类型的指标。连接器提供了以下指标:

有关如何通过JMX公开上述指标的信息,请参见开云体育官方注册网址Debezium监控文档

快照指标

MBean开云体育官方注册网址debezium.sql_server: type = connector-metrics, server =< sqlserver.server.name >、任务=< task.id >上下文=快照

快照度量不会公开,除非快照操作是活动的,或者自上次连接器启动以来发生了快照。

下表列出了可用的快照指标。

属性 类型 描述

字符串

连接器读取的最后一个快照事件。

自连接器读取并处理最近事件以来的毫秒数。

自上次启动或重置以来,此连接器已看到的事件总数。

已由连接器上配置的包含/排除列表筛选规则筛选的事件数。

string []

连接器捕获的表列表。

int

用于在快照和主Kafka Connect循环之间传递事件的队列长度。

int

用于在快照和主Kafka Connect循环之间传递事件的队列的空闲容量。

int

快照中包含的表的总数。

int

快照尚未复制的表数。

布尔

快照是否启动。

布尔

快照是否暂停。

布尔

快照是否中止。

布尔

快照是否完成。

快照到目前为止所花费的总秒数,即使没有完成。还包括快照暂停的时间。

快照暂停的总秒数。如果快照被暂停了多次,那么暂停的时间就会累积起来。

Map < String,长>

映射,其中包含为快照中的每个表扫描的行数。在处理期间将表增量地添加到Map中。每扫描10,000行并在完成一个表时更新一次。

队列的最大缓冲区,以字节为单位。该指标是可用的,如果max.queue.size.in.bytes设置为正的长值。

队列中记录的当前卷,以字节为单位。

在执行增量快照时,连接器还提供了以下额外的快照度量:

属性 类型 描述

字符串

当前快照块的标识符。

字符串

定义当前块的主键集的下界。

字符串

定义当前块的主键集的上界。

字符串

当前快照表的主键集的下界。

字符串

当前快照表的主键集的上限。

流指标

MBean开云体育官方注册网址debezium.sql_server: type = connector-metrics, server =< sqlserver.server.name >、任务=< task.id >上下文=流

下表列出了可用的流媒体指标。

属性 类型 描述

字符串

连接器读取的最后一个流事件。

自连接器读取并处理最近事件以来的毫秒数。

自上次启动或度量重置以来,此连接器所看到的事件总数。

自上次启动或指标重置以来,此连接器所看到的创建事件的总数。

自上次启动或指标重置以来,此连接器所看到的更新事件总数。

自上次启动或指标重置以来,此连接器所看到的删除事件的总数。

已由连接器上配置的包含/排除列表筛选规则筛选的事件数。

string []

连接器捕获的表列表。

int

用于在streamer和主Kafka Connect循环之间传递事件的队列长度。

int

用于在streamer和主Kafka Connect循环之间传递事件的队列的空闲容量。

布尔

标志,该标志表示连接器当前是否连接到数据库服务器。开云体育电动老虎机

从最后一个更改事件的时间戳到连接器处理它之间的毫秒数。这些值将包含运行数据库服务器和连接器的机器上的时钟之间的任何差异。开云体育电动老虎机

提交的已处理事务的数量。

Map < String, String >

上次接收事件的坐标。

字符串

最后处理的事务的事务标识符。

队列的最大缓冲区,以字节为单位。该指标是可用的,如果max.queue.size.in.bytes设置为正的长值。

队列中记录的当前卷,以字节为单位。

架构历史度量

MBean开云体育官方注册网址debezium.sql_server: type = connector-metrics、上下文= schema-history服务器=< sqlserver.server.name >

下表列出了可用的模式历史指标。

属性 类型 描述

字符串

之一停止恢复(从存储中恢复历史),运行描述数据库模式历史记录的状态。开云体育电动老虎机

恢复开始的时间(以epoch秒为单位)。

在恢复阶段读取的更改数。

在恢复和运行时应用的模式更改的总数。

自上次更改从历史存储区恢复以来所经过的毫秒数。

自应用最后一次更改以来所经过的毫秒数。

字符串

从历史存储中恢复的最后一次更改的字符串表示形式。

字符串

最后应用的更改的字符串表示形式。