您正在查看的文档Debezium的过时的版本。开云体育官方注册网址
如果你想查看这个页面的最新稳定版本,请走吧在这里

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

想要帮助我们进一步的磨练和提高吗?学习如何

Debe开云体育官方注册网址zium SQL Server连接器捕捉行级的变化发生在一个SQL Server数据库的模式。开云体育电动老虎机

信息的SQL Server版本兼容这个连接器,看到开云体育官方注册网址Debezium释放概述

第一次Debezium SQL Server连接开云体育官方注册网址器连接到SQL Server数据库或集群,它需要一个一致的快照模式的数据库。开云体育电动老虎机初始快照完成后,连接器不断捕捉行级的变化插入,更新,或删除操作,致力于为疾控中心启用SQL Server数据库。开云体育电动老虎机连接器为每个数据更改操作,生成事件流他们卡夫卡的话题。连接器流的所有事件表到专用的卡夫卡的主题。应用程序和服务可以使用主题的数据更改事件记录。

概述

连接器是开云体育官方注册网址基于Debezium SQL服务器变化数据捕获可用的特性SQL Server 2016 Service Pack 1 (SP1)之后标准版或企业版。SQL Server捕获过程监控指定的数据库和表,并存储变成专门创建的开云体育电动老虎机改变表存储过程外墙。

使Debezium SQL 开云体育官方注册网址Server连接器能够捕捉更改数据库操作的事件记录,您必须先启用变化数据捕获的SQL Server数据库。开云体育电动老虎机疾病预防控制中心必须启用数据库和你想捕捉的每个表。开云体育电动老虎机在源数据库上建立疾病预防控制中心之后,连接器可以捕获行级开云体育电动老虎机插入,更新,删除操作发生在数据库中。开云体育电动老虎机连接器写事件记录为每一个源表卡夫卡话题特别是专用表。存在一个主题为每个表。客户机应用程序读卡夫卡的主题的数据库表,并能应对行级事件他们消费的主题。开云体育电动老虎机

第一次连接器连接到SQL Server数据库或集群,它需要一个一致的快照模式的所有表的配置来捕捉变化,卡夫卡和小溪这个开云体育电动老虎机状态。快照完成后,连接器不断捕捉后续行级发生变化。首先建立所有的数据都是一致的,连接器可以继续阅读而不失去所做出的任何更改而发生快照。

Debe开云体育官方注册网址zium SQL Server连接器是失败的宽容。随着连接器读取的变化和产生的事件,它定期记录在数据库日志事件的位置(开云体育电动老虎机LSN /日志序列号)。如果连接器停止任何理由(包括通信失败,网络问题,或崩溃),之后重新启动连接器简历阅读SQL服务器疾病预防控制中心最后一点,读表。

定期补偿承诺。他们没有提交当时事件发生变化。因此,停机后,重复的事件可能会生成。

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

SQL Server连接器是如何运作的吗

优化配置并运行一个Debezium SQL Server连接器,它开云体育官方注册网址有助于了解连接器执行快照,流改变事件,决定了卡夫卡主题名称,并使用元数据。

快照

SQL Server疾控中心不是被设计来存储数据库更改的完整历史。开云体育电动老虎机Debezium开云体育官方注册网址 SQL Server的连接器来建立一个基线数据库的当前状态,它使用一个过程被称为开云体育电动老虎机快照

您可以配置连接器如何创建快照。默认情况下,将连接器的快照模式最初的。在此基础上最初的快照模式,连接器第一次启动时,它执行一个初始一致的快照的数据库。开云体育电动老虎机这个初始快照捕获的结构和数据表定义的标准相匹配包括排除为连接器配置属性(例如,table.include.list,column.include.list,table.exclude.list等等)。

当连接器创建一个快照,完成以下任务:

  1. 决定了表被捕获。

  2. SQL服务器上获得一个锁表的疾控中心启用防止结构性变化发生在创建快照。锁是由水平snapshot.isolation.mode配置选项。

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

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

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

  6. 扫描捕获的SQL Server源表和模式是基于阅读的LSN位置在步骤3中,生成一个事件表中的每一行,并将事件写入表的卡夫卡的话题。

  7. 记录的成功完成连接器补偿的快照。

由此产生的初始快照捕获的当前状态表中的每一行是疾控中心启用。从这个基线状态,连接器捕捉后续更改时发生。

特别的快照

默认情况下,一个连接器运行初始快照操作之后才开始第一次。这个初始快照后,在正常情况下,连接器不重复快照过程。未来的任何更改事件的数据连接器捕捉只通过流过程。

然而,在某些情况下获得的数据连接器在初始快照可能变得陈旧,丢失,或不完整的。为重新夺回表数据提供一种机制,Debezium包括一个选项来执行特定的快照。开云体育官方注册网址以下更改数据库中可能导致执行一个特设快照:开云体育电动老虎机

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

  • 卡夫卡主题删除,必须重建。

  • 数据损坏发生由于配置错误或者其他问题。

你可以重新运行你的快照表之前启动一个所谓的捕获快照特别的快照。特别的快照的使用要求信号表。你发起一个特设快照通过发送一个信号请求Debezium信号表。开云体育官方注册网址

当你启动一个特设现有表的快照,连接器附加内容的主题已经存在的表。如果以前现有主题是移除,Debezium可以自动创建一个主题开云体育官方注册网址自动主题创建启用。

特设快照信号中包含指定表快照。快照可以捕捉数据库的全部内容,或者只捕获数据库中的表的一个子集。开云体育电动老虎机

您指定的表来捕获通过发送一个execute-snapshot信息信号表。设置的类型execute-snapshot信号增量,并提供表的名称中包含快照,下表中描述:

表1。一个特别的例子execute-snapshot信号记录
默认的 价值

类型

增量

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

数据收集

N /一个

一个数组,其中包含表的完全限定名称快照。
名字的格式是一样的signal.data.collection配置选项。

触发一个特别的快照

你发起一个特设的快照通过添加一个条目execute-snapshot信号类型的信号表。连接器处理消息之后,它开始快照操作。快照过程读取第一个和最后一个主键值,并使用这些值为每个表的开始和结束点。根据表中的条目的数量,和配置的块大小,Debezium把表分成块,每个块和收益快照,在继承,一次一个。开云体育官方注册网址

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

增量快照

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

在增量快照,而不是捕捉数据库的完整状态,在一个初始快照,Debezium捕捉每个表的阶段,在一系列的配置块。开云体育官方注册网址开云体育电动老虎机你可以指定表的快照捕获和每个数据块的大小。块大小确定的行数的快照收集在每个提取操作数据库。开云体育电动老虎机默认增量快照1 KB的块大小。

作为一个增量快照,Debezium使用水印追踪其进展,保持每个表的记录行,开云体育官方注册网址它捕获。分阶段方法捕获数据提供了以下优势标准初始快照过程:

  • 您可以运行增量快照与流数据获取,而不是推迟直到快照完成流媒体。连接器继续捕获实时事件从快照过程中更改日志,也操作模块。

  • 如果中断增量快照的进步,你可以恢复它而不会丢失任何数据。流程简历后,快照开始时它不禁停了下来,而不是重新夺回表从一开始。

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

增量快照过程

当您运行一个增量快照,Debezium每个表的主键,然后将表格分为块的基础上开云体育官方注册网址配置块大小。块的块,然后捕获块中的每个表行。对于每一行,它捕获快照发出事件。事件所代表的价值当块的快照开始的行。

快照收益,其他进程的继续访问数据库,可能修改表记录。开云体育电动老虎机反映这种变化,插入,更新,或删除操作是致力于按平常的事务日志。同样,持续Debezium流过程继续检测这些事开云体育官方注册网址件并发出相应的改变事件记录卡夫卡。

Debe开云体育官方注册网址zium如何解决碰撞中记录主键相同的吗

在某些情况下,更新删除收到的事件流过程排放的序列。即流过程可能会发出一个事件,修改一个表行之前快照捕获块包含事件这一行。当最终发出相应的快照行活动,其价值已经取代了。以确保增量快照事件到达的顺序处理正确的逻辑顺序,Debezium采用缓冲方案解决冲突。开云体育官方注册网址只有在快照之间的碰撞事件和事件流解析对卡夫卡Debezium发出一个事件记录。开云体育官方注册网址

快照窗口

协助解决后面到达之间的碰撞事件和事件流,修改相同的表行,Debezium雇佣了一个所谓的开云体育官方注册网址快照窗口。快照windows的划定了间隔期间增量快照捕获一个指定表数据块。在一块的快照窗口打开之前,Debezium遵循其一贯的行为和直接从事务日志发出事件下游目标卡开云体育官方注册网址夫卡的话题。但从特定块快照打开,直到关闭,Debezium执行重复数据删除步骤解决之间的碰撞事件具有相同的主键. .开云体育官方注册网址

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

快照窗口打开,Debezium开始处理一块快照,它提供了快照记录到内开云体育官方注册网址存缓冲区。在快照windows,主键的事件缓冲比较传入流的主键事件。如果没有发现匹配,直接发送到卡夫卡流事件记录。如果D开云体育官方注册网址ebezium检测到一个匹配,它丢弃缓冲事件,并将流记录写入目标主题,因为流事件逻辑取代静态快照事件。块的快照窗口关闭后,缓冲区只包含事件相关的事务日志事件存在。开云体育官方注册网址Debezium发出这些剩余事件表的卡夫卡的话题。

连接器为每个快照块重复这个过程。

Debe开云体育官方注册网址zium连接器SQL服务器不支持增量快照运行时模式变化。

触发一个增量快照

目前,启动增量快照的唯一方法是发送一个特设快照信号源数据库上的信号表。开云体育电动老虎机你提交一个信号信号表的SQL插入查询。

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

你提交的查询中包含指定表快照,而且,还指定了快照的操作。目前,快照操作的唯一有效的选项是默认值,增量

中包括指定表快照,提供一个数据收集数组列表的表或数组正则表达式用于匹配表,例如,
{“数据收集”:["。MyFirstTable”、“public.MySecondTable ")}

数据收集数组增量快照信号没有默认值。如果数据收集数组为空,Debezium检测到开云体育官方注册网址不需要行动,不执行一个快照。

如果一个表的名称,你想要包含在一个快照包含一个点()数据库的名称、模式或表,添加表开云体育电动老虎机数据收集数组,你必须摆脱在双引号的每一部分的名字。

例如,包含一个表中存在公共模式和名称My.Table使用以下格式:“公共”。“My.Table”

先决条件
过程
  1. 发出一个SQL查询添加临时增量快照请求信号表:

    插入< signalTable >(id、类型、数据)值(“< id >”,“< snapshotType >”{“数据收集”:[",<表>”、“<表>“,”类型”:“< snapshotType >”、“附加条件”:“<附加条件>“}”);

    例如,

    插入myschema.debezium_s开云体育官方注册网址ignal (id、类型、数据)(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

    附加条件

    一个可选的字符串,它指定一个条件基于表的列(s) (s),捕获的内容表的一个子集。更多的信息附加条件参数,看到临时增量快照附加条件

临时增量快照附加条件

如果你想要一个快照只包括内容表的一个子集,您可以修改请求通过添加一个信号附加条件信号参数的快照。

典型的SQL查询快照需要以下形式:

SELECT * FROM<表>…。

通过添加一个附加条件参数,你添加一个在哪里SQL查询条件,如以下示例:

SELECT * FROM<表>在哪里<附加条件>…。

下面的例子展示了一个SQL查询发送一个临时增量快照请求信号表的附加条件:

插入< signalTable >(id、类型、数据)值(“< id >”,“< snapshotType >”{“数据收集”:[",<表>”、“<表>“,”类型”:“< snapshotType >”、“附加条件”:“<附加条件>“}”);

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

  • id(主键)

  • 颜色

  • 数量

如果你想要一个增量的快照产品表只包括的数据项颜色=蓝色,您可以使用以下SQL语句触发快照:

插入myschema.debezium_s开云体育官方注册网址ignal (id、类型、数据)值(‘ad-hoc-1’,‘execute-snapshot’,‘{代码基于schema1中“数据收集”:["。产品”),“类型”:“增量”、“附加条件”:“颜色=蓝色"});

附加条件参数也可以通过基于多列的条件。例如,使用产品从前面的示例表,你可以提交一个查询,触发器增量快照,包括数据的只有那些物品颜色=蓝色量> 10:

插入myschema.debezium_s开云体育官方注册网址ignal (id、类型、数据)值(‘ad-hoc-1’,‘execute-snapshot’,‘{代码基于schema1中“数据收集”:["。产品”),“类型”:“增量”、“附加条件”:“颜色=蓝色和数量> 10 "});

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

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

1

快照

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

2

人事处

指定事件类型。
快照事件的值r,标志着一个操作。

停止一个增量快照

你也可以停止增量快照通过发送一个信号对源数据库表。开云体育电动老虎机你提交一个停止信号表快照通过发送一个SQL插入查询。后Debez开云体育官方注册网址ium检测信号的变化表,它读取信号,停止增量快照操作如果是在进步。

你提交的查询指定快照的操作增量,选择当前运行快照的表被删除。

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

    插入< signalTable >(id、类型、数据)值(“< id >”,“stop-snapshot”、“{“数据收集”:["<表>”、“<表>”,“类型”:“增量”}’);

    例如,

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

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

    下表描述了参数的例子:

    表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. 连接器通过提交和改变lsn抵消卡夫卡连接。

  4. 连接器商店最大的LSN和重启步骤1的过程。

在重启之后,连接器简历处理上次抵消(提交和改变lsn)阅读。

连接器能够检测中心是否启用或禁用包括源表和调整其行为。

限制

SQL Server特别需要一个表基本对象来创建一个变化捕获实例。作为结果,捕捉变化(又名索引视图。物化视图)不支持SQL Server,因此Debezium SQL Server连接器。开云体育官方注册网址

主题名称

默认情况下,SQL Server连接器写事件插入,更新,删除操作发生在一个表到一个Apache卡夫卡主题特定的表。连接器使用以下约定名称更改事件主题:< serverName >< schemaName ><表>

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

serverName

服务器的逻辑名称,指定的开云体育电动老虎机database.server.name配置属性。

schemaName

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

的表

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

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

  • fulfillment.dbo.products

  • fulfillment.dbo.products_on_hand

  • fulfillment.dbo.customers

  • fulfillment.dbo.orders

连接器适用于类似的命名约定将其内部数据库的历史主题,开云体育电动老虎机模式改变话题,事务元数据主题

如果默认主题名称不符合您的需求,您可以配置自定义主题名称。配置自定义主题名称,您指定正则表达式在逻辑主题路由SMT。关于使用逻辑主题的更多信息路由SMT定制主题命名,明白了主题的路由

模式改变话题

为每个表启用了疾控中心,Debezium SQL Server连接器存储模式变化的历史事件开云体育官方注册网址应用于捕获数据库中的表。开云体育电动老虎机连接器写模式更改事件卡夫卡主题命名< serverName >,在那里serverName是逻辑服务器中指定的名称吗开云体育电动老虎机database.server.name配置属性。

连接器的消息发送模式改变主题包含负载,可选地,也包含模式的改变事件消息。模式变化的负载事件消息包括以下要素:

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

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

tableChanges

整个表的结构化表示模式后改变。的tableChanges字段包含一个数组,包括表的每一列的条目。因为JSON或Avro的结构化表示了数据格式,消费者可以很容易地读取消息没有首先通过DDL解析器处理它们。

当连接器配置为捕获一个表,它存储的历史表的模式变化不仅改变话题,而且在一个内部数据库历史话题。开云体育电动老虎机内部数据库的历史主题是连接开云体育电动老虎机器只使用,不用于直接消费应用程序使用。确保应用程序只需要通知关于消费模式变化信息的模式改变话题。

连接器发出的消息的格式,其模式改变话题是一个酝酿状态,可以随时更改,不另行通知。

开云体育官方注册网址Debezium发出消息的模式改变话题当发生以下事件:

  • 你为一个表启用疾控中心。

  • 您禁用疾控中心的一个表。

  • 你改变表的结构中心启用后模式演化过程

例子:消息发出SQL Server连接器模式改变话题

下面的示例显示了一个消息模式改变话题。消息包含一个表模式的逻辑表示。

{"模式":{…},“有效载荷”:{“源”:{“版本”:“1.9.7。最后”、“连接器”:“”、“名称”:“server1状态"置疑"”、“ts_ms”: 1588252618953,“快照”:“真正的”、“”、“testDB数据库”:“模式”:“dbo”、“表”:“客户”、“change_lsn”:空,“commit_lsn”:“00000025:00000d98:00a2”、“event_serial_no”:零},“testDB数据库名”:“”,开云体育电动老虎机(1):“schemaName dbo”、“ddl”:空,(2)“tableChanges”:((3){“类型”:“创造”,(4)“id”: \“\”, \“testDB dbo \“\”, \“客户,(5)"表":{(6)“defaultCharsetName”:零,“primaryKeyColumnNames”:(7)“id”],“列”:[(8){" name ": " id ",“jdbcType”: 4,“nativeType”:空,“typeName”:“int身份”、“typeExpression”:“int身份”、“charsetName”:空,“长度”:10“规模”:0,“位置”:1、“可选”:假的,“自动增量”:假的,“生成”:假},{“名称”:“first_name”,“jdbcType”: 12日“nativeType”:空,“typeName”:“varchar”、“typeExpression”:“varchar”、“charsetName”:空,“长度”:255年,“规模”:空,“位置”:2,“可选”:假的,“自动增量”:假的,“生成”:假},{“名称”:“last_name”,“jdbcType”: 12日“nativeType”:空,“typeName”:“varchar”、“typeExpression”:“varchar”、“charsetName”:空,“长度”:255年,“规模”:空,“位置”:3,“可选”:假的,“自动增量”:假的,“生成”:假},{“名称”:“电子邮件”、“jdbcType”: 12日“nativeType”:空,“typeName”:“varchar”、“typeExpression”:“varchar”、“charsetName”:空,“长度”:255年,“规模”:空,“位置”:4,“可选”:假的,“自动增量”:假的,“生成”:假}]}}]}}
表4。描述字段的消息发出模式改变话题
字段名 描述

1

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

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

2

ddl

总是SQL Server的连接器。对于其他连接器,该字段包含DDL负责的模式变化。这种DDL不可用SQL Server连接器。

3

tableChanges

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

4

类型

描述的那种变化。价值是下列之一:

  • 创建——表创建

  • 改变——修改表

  • 下降——表删除

5

id

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

6

代表表元数据应用后改变。

7

primaryKeyColumnNames

列表的列组成表的主键。

8

改变表中的每一列的元数据。

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

{"模式":{“类型”:“结构”、“字段”:[{“类型”:“弦”、“可选”:假的,“场”:“数据库名”}],“可选”:假的,“名字”:“io.debezium.connector.sql开云体育电动老虎机server.SchemaChangeKey”},“有效载荷”:{“数据库名”:“testDB}}开云体育官方注册网址

数据更改事件

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

开云体育官方注册网址Debezium和卡夫卡连接的设计连续的事件消息流。然而,这些事件的结构可能会改变随着时间的推移,可以让消费者难以处理。为了解决这个问题,每个事件包含模式的内容或,如果您正在使用一个模式注册表,一个模式ID,一个消费者可以使用从注册表获取模式。这使得每个事件自包含的。

下面的骨架JSON显示了更改事件的基本四个部分。然而,如何配置卡夫卡连接转换器,你选择在应用程序中使用的决定表示这四个部分的更改事件。一个模式字段的更改事件只有当你配置转换器装出来的。同样,事件关键和事件有效负载的变化事件只有在你配置一个转换器装出来的。如果你使用JSON转换器配置它来生产所有四个基本事件部分改变,改变事件有一个结构:

{"模式":{(1)…},“有效载荷”:{(2)…},"模式":{(3)…},“有效载荷”:{(4)…}},
表5所示。更改事件基本内容的概述
字段名 描述

1

模式

第一个模式字段是关键事件的一部分。它指定了卡夫卡连接模式描述的事件的关键有效载荷部分。换句话说,第一个模式字段描述结构的主键或唯一键如果表没有主键的表,是改变。

可以通过设置覆盖表的主键message.key.columns连接器配置属性。在这种情况下,第一个模式场描述的结构主要由财产。

2

有效载荷

第一个有效载荷字段是关键事件的一部分。前面描述的结构模式的行字段和它包含的关键是改变。

3

模式

第二个模式场活动价值的一部分。它指定了卡夫卡连接模式描述的事件值有效载荷部分。换句话说,第二模式描述的结构被改变的行。通常,这个模式包含嵌套模式。

4

有效载荷

第二个有效载荷场活动价值的一部分。前面描述的结构模式场和它包含的实际数据为行改变。

默认情况下,连接器流改变事件记录主题名称是一样的事件的原始表。看到主题名称

SQL Server连接器确保所有卡夫卡连接模式名坚持Avro模式名称格式。这意味着逻辑服务器名称必须开始用拉丁字母或下划线,也就是说,a - z、a - z,或_。每个剩余字符在逻辑服务器名称和数据库和表中的每个字符的名称必须是一个拉丁字母,数字,下划线,也就是说,a - z、a - z, 0 - 9,或\ _。开云体育电动老虎机如果有一个无效的字符替换为下划线字符。

这可能会导致意想不到的冲突如果逻辑服务器名称,数据库名称,或一个表名称包含无效字符,和唯一的字符,区分名称从一个另一个无效,从而替换为下开云体育电动老虎机划线。

更改事件的钥匙

改变事件的主要包含的模式改变表的键和改变行实际的关键。模式和相应的有效载荷包含一个字段,用于改变表中的每一列的主键(或独特的键约束)当时的事件创建的连接器。

考虑以下客户表,紧随其后的是一个更改事件这个表的关键。

例表
创建表的客户(id的整数标识(1001 1)NOT NULL主键,first_name VARCHAR (255) NOT NULL, last_name VARCHAR (255) NOT NULL,邮件VARCHAR (255) NOT NULL独特的);
示例更改事件关键

每一个变化事件,抓住了改变客户表具有相同的事件模式的关键。只要客户表有前面的定义,每一个更改事件捕获的变化客户表有以下键结构,在JSON,看起来像这样:

{"模式":{(1)“类型”:“结构”,“字段”:(2){“类型”:“int32”、“可选”:假的,“场”:“id”}],“可选”:假的,(3)“名称”:“server1.dbo.customers.Key”(4)},“有效载荷”:{(5)“id”: 1004}}
表6所示。描述变化事件的关键
字段名 描述

1

模式

模式的关键部分指定了卡夫卡连接模式,描述了什么是关键的有效载荷部分。

2

字段

指定每个字段,预计有效载荷,包括每个字段的名称、类型和是否需要它。在这个例子中,有一个必需的字段命名id类型的int32

3

可选

表明事件的键必须包含一个值有效载荷字段。在这个例子中,一个关键的价值的有效载荷是必需的。关键的负载值字段是可选的,当一个表没有主键。

4

server1.dbo.customers.Key

的名字的结构模式,它定义了关键的负载。该模式描述表的主键的结构改变。关键模式名的格式connector-name开云体育电动老虎机数据库模式名表名关键。在这个例子中:

  • server1连接器的名称,生成的这一事件。

  • dbo表是数据库模式开云体育电动老虎机改变了。

  • 客户是表更新。

5

有效载荷

包含这一变化的关键行生成事件。在这个例子中,关键,包含一个单一的id字段的值是1004年

虽然column.exclude.listcolumn.include.list连接器配置属性允许您捕获只有表列的一个子集,所有列在一个主键或唯一键总是包括在事件的关键。

如果表没有主键或唯一键,然后更改事件的关键是null。这是有道理的,因为一个表中的行没有主键或唯一键约束不能唯一标识。

更改事件值

改变的价值比的关键事件更复杂。像的关键,有价值模式部分和一个有效载荷部分。的模式部分包含模式描述信封的结构有效载荷部分,包括其嵌套的字段。改变事件的操作创建、更新或删除数据有效载荷与信封结构都有一个值。

考虑相同的样本表用来显示的一个例子改变事件的关键:

创建表的客户(id的整数标识(1001 1)NOT NULL主键,first_name VARCHAR (255) NOT NULL, last_name VARCHAR (255) NOT NULL,邮件VARCHAR (255) NOT NULL独特的);

的价值部分的更改事件改变这个表为每个事件类型描述。

创建事件

下面的例子显示了更改事件的价值部分的连接器生成创建数据的操作客户表:

{"模式":{(1)“类型”:“结构”、“字段”:[{“类型”:“结构”、“字段”:[{“类型”:“int32”、“可选”:假的,“场”:“id”},{“类型”:“弦”、“可选”:假的,“场”:“first_name”},{“类型”:“弦”、“可选”:假的,“场”:“last_name”},{“类型”:“弦”、“可选”:假的,“场”:“电子邮件”}],“可选”:真的,“名字”:“server1.dbo.customers.Value”,(2)“字段”:“之前”},{“类型”:“结构”、“字段”:[{“类型”:“int32”、“可选”:假的,“场”:“id”},{“类型”:“弦”、“可选”:假的,“场”:“first_name”},{“类型”:“弦”、“可选”:假的,“场”:“last_name”},{“类型”:“弦”、“可选”:假的,“场”:“电子邮件”}],“可选”:真的,“名字”:“server1.dbo.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)“字段”:“源”},{“类型”:“弦”、“可选”:假的,“场”:“人事处”},{“类型”:“int64”、“可选”:真的,“场”:“ts_ms”}],“可选”:假的,“名字”:“server1.dbo.customers.Envelope”(4)},“有效载荷”:{(5)“之前”:空,(6)"后":{(7)“id”: 1005年,“first_name”:“约翰”,“last_name”:“母鹿”、“电子邮件”:“john.doe@example.org”},“源”:{(8)“版本”:“1.9.7。最后”、“连接器”:“”、“名称”:“server1状态"置疑"”、“ts_ms”: 1559729468470,“快照”:假的,“分贝”:“testDB”、“模式”:“dbo”、“表”:“客户”、“change_lsn”:“00000027:00000758:0003”、“commit_lsn”:“00000027:00000758:0005”、“event_serial_no”:“1”},“人事处”:“c”,(9)“ts_ms”: 1559729471739(10)}}
表7所示。的描述创建事件值字段
字段名 描述

1

模式

价值的模式,描述了价值的有效载荷的结构。更改事件的价值模式都是一样的在每一个更改事件的连接器生成一个特定的表。

2

的名字

模式节中,每的名字字段指定模式的一个字段值的有效载荷。

server1.dbo.customers.Value是负载的模式吗之前字段。该模式是特定的客户表。

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

3

的名字

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

4

的名字

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

5

有效载荷

价值的实际数据。这是改变事件提供的信息。

似乎的JSON表示的事件是远远大于他们描述的行。这是因为JSON表示必须包括的模式和有效载荷部分信息。然而,通过使用Avro转换器,你可以显著减少连接器的消息流的大小,卡夫卡的话题。

6

之前

一个可选的字段指定事件发生之前的状态行。当人事处字段是c创建,在这个例子中,之前字段是因为这个更改事件是新内容。

7

一个可选的字段指定事件发生后的状态行。在这个例子中,字段包含的值的新行id,first_name,last_name,电子邮件列。

8

强制性字段描述了事件源的元数据。该字段包含信息,您可以使用它来比较这一事件与其他事件,关于事件的起源,事件发生的顺序,事件是否相同的事务的一部分。元数据来源包括:

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

  • 连接器类型和名称

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

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

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

  • 表的名称包含新行

  • 服务器日志补偿

9

人事处

强制性的描述类型的字符串操作导致连接器生成事件。在这个例子中,c表明,一行创建的操作。有效值:

  • c=创建

  • u=更新

  • d=删除

  • r=阅读(只适用于快照)

10

ts_ms

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

对象,ts_ms表明了当时更改提交到数据库中。开云体育电动老虎机通过比较的值payload.source.ts_ms的价值payload.ts_ms,您可以确定源数据库更新和Debezium之间的滞后。开云体育官方注册网址开云体育电动老虎机

更新事件

更改事件的价值更新的样本客户作为一个表有相同的模式创建事件表。同样,事件相同价值的有效载荷结构。然而,在一个事件有效负载价值包含不同的值更新事件。更改事件的一个例子是价值的事件连接器生成的一个更新客户表:

{"模式":{…},“有效载荷”:{“前”:{(1)“id”: 1005年,“first_name”:“约翰”,“last_name”:“母鹿”、“电子邮件”:“john.doe@example.org”},“后”:{(2)“id”: 1005年,“first_name”:“约翰”,“last_name”:“母鹿”、“电子邮件”:“noreply@example.org”},“源”:{(3)“版本”:“1.9.7。最后”、“连接器”:“”、“名称”:“server1状态"置疑"”、“ts_ms”: 1559729995937,“快照”:假的,“分贝”:“testDB”、“模式”:“dbo”、“表”:“客户”、“change_lsn”:“00000027:00000ac0:0002”、“commit_lsn”:“00000027:00000ac0:0007”、“event_serial_no”:“2”},“凤凰社”:“u”,(4)“ts_ms”: 1559729998706(5)}}
表8所示。的描述更新事件值字段
字段名 描述

1

之前

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

2

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

3

强制性字段描述了事件源的元数据。的场结构有相同的字段中创建事件,但一些值是不同的,例如,样本更新事件有不同的偏移量。元数据来源包括:

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

  • 连接器类型和名称

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

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

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

  • 表的名称包含新行

  • 服务器日志补偿

event_serial_no字段区分事件具有相同的承诺,改变LSN。典型情况下当这个领域以外的价值1:

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

  • 当一个主键更新SQL Server发出两个evemts。一个删除事件记录的删除老的值和一个主键创建活动的记录与新主键。两个操作共享相同的承诺,改变LSN及其事件数据12,分别。

4

人事处

强制性的字符串描述操作的类型。在一个更新事件的价值,人事处字段值是u,表示这一行改变,因为一个更新。

5

ts_ms

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

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

更新列一行的主要/唯一键改变值的行键。当一个关键变化,Debezium输出开云体育官方注册网址三个事件:删除事件和一个墓碑上的事件用旧的关键行,紧随其后的是一个创建事件的新键行。

删除事件

在一个值删除有相同的变化事件模式部分为创建更新事件以相同的表。的有效载荷在一个部分删除事件为样本客户表看起来像这样:

{"模式":{…}},“有效载荷”:{“前”:{< >“id”: 1005年,“first_name”:“约翰”,“last_name”:“母鹿”、“电子邮件”:“noreply@example.org”},“后”:空,(2)“源”:{(3)“版本”:“1.9.7。最后”、“连接器”:“”、“名称”:“server1状态"置疑"”、“ts_ms”: 1559730445243,“快照”:假的,“分贝”:“testDB”、“模式”:“dbo”、“表”:“客户”、“change_lsn”:“00000027:00000db0:0005”、“commit_lsn”:“00000027:00000db0:0007”、“event_serial_no”:“1”},“人事处”:“d”,(4)“ts_ms”: 1559730450205(5)}}
表9所示。的描述删除事件值字段
字段名 描述

1

之前

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

2

可选字段,指定事件发生后的状态行。在一个删除事件的价值,字段是,标志着这一行已不复存在。

3

强制性字段描述了事件源的元数据。在一个删除事件的价值,场结构是一样的创建更新事件以相同的表。许多字段值也相同。在一个删除事件的价值,ts_mspos字段值、以及其他值可能会改变。但是,在一个删除事件价值提供了相同的元数据:

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

  • 连接器类型和名称

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

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

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

  • 表的名称包含新行

  • 服务器日志补偿

4

人事处

强制性的字符串描述操作的类型。的人事处字段值是d,表示这一行被删除。

5

ts_ms

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

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

SQL Server事件连接器设计卡夫卡日志压实。日志压实使删除一些旧消息只要至少每个关键是保持最新的消息。这使卡夫卡回收存储空间同时确保主题包含一个完整的数据集,可用于重新加载密钥的状态。

墓碑上的事件

当一行被删除的删除事件的价值仍然使用日志压实,因为卡夫卡之前删除所有消息可以拥有同样的关键。然而,对于卡夫卡删除所有消息,相同的密钥,必须的信息价值。为做到这一点,Debezium SQL Server连接器开云体育官方注册网址后发出删除事件,连接器发出一种特别的墓碑上活动,但是有相同的关键价值。

事务的元数据

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

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

开云体育官方注册网址Debezium寄存器和接收元数据只对交易发生后部署连接器。交易发生之前部署连接器的元数据是不可用的。

开云体育电动老虎机数据库事务是由一个语句块之间的封闭开始结束关键词。开云体育官方注册网址Debezium生成事务边界的事件开始结束分隔符在每个事务。事务边界事件包含以下字段:

状态

开始结束

id

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

event_count(结束事件)

发出的事件总数事务。

data_collections(结束事件)

对的数组data_collectionevent_count提供事件的数量发出的变化来自给定的数据收集。

没有为Debezium可靠地确定当事务结开云体育官方注册网址束。事务结束标记只发出后第一个事件的另一个事务的到来。这可能导致的延期交货结束对于低流量系统标志。

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

例如:SQL Server连接器事务边界事件
{“状态”:“开始”,“id”:“00000025:00000d08:0025”、“event_count”:空,“data_collections”:零}{“状态”:“结束”,“id”:“00000025:00000d08:0025”、“event_count”: 2,“data_collections”: [{:“data_collection testDB.dbo。为多”、“event_count”: 1}, {:“data_collection testDB.dbo。”、“event_count”表b: 1}]}

除非通过覆盖transaction.topic选择,交易事件写入主题命名开云体育电动老虎机database.server.name.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数据类型文字语义类型。

文字类型

描述如何使用卡夫卡所代表的价值就是连接模式类型,即INT8,INT16,INT32,INT64,FLOAT32,FLOAT64,布尔,字符串,字节,数组,地图,结构体

语义类型

描述了卡夫卡如何连接模式了意义使用的名称的字段卡夫卡连接模式。

如果默认数据类型转换不符合你的需要,你可以创建一个自定义转换器连接器。

基本类型

下面的表显示了连接器地图基本SQL Server数据类型。

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

布尔

n /一个

非常小的整数

INT16

n /一个

短整型

INT16

n /一个

INT

INT32

n /一个

长整型数字

INT64

n /一个

真正的

FLOAT32

n /一个

浮动((N))

FLOAT64

n /一个

CHAR ((N))

字符串

n /一个

VARCHAR ((N))

字符串

n /一个

文本

字符串

n /一个

NCHAR ((N))

字符串

n /一个

NVARCHAR ((N))

字符串

n /一个

NTEXT

字符串

n /一个

XML

字符串

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

一个XML文档包含的字符串表示

DATETIMEOFFSET ((P))

字符串

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

的字符串表示一个时间戳和时区信息,格林尼治时间时区的地方

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

如果存在,一个列的默认值是传播到对应字段的卡夫卡连接模式。改变信息将包含字段的默认值(除非显式列值了),这应该很少需要获得模式的默认值。通过默认值帮助虽然满足兼容性规则使用Avro注册表的序列化格式一起汇合的模式。

时间值

除了SQL服务器的DATETIMEOFFSET数据类型(包含时区信息),其他时间类型依赖的价值time.precision.mode配置属性。当time.precision.mode配置属性设置为自适应(默认),那么连接器将决定时间类型的文字类型和语义类型基于列的数据类型定义,这样的事件完全代表数据库中的值:开云体育电动老虎机

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

日期

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

代表微秒过去时代的数量,不包括时区信息。

DATETIME2 (7)

INT64

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

代表的是过去时代的纳秒数,不包括时区信息。

time.precision.mode配置属性设置为连接,那么连接器将使用预定义的卡夫卡连接逻辑类型。当消费者只知道这可能是有用的内置卡夫卡连接逻辑类型,无法处理可变精度时间值。另一方面,因为SQL Server支持10微秒级精度,通过连接器生成的事件连接时间精度模式将导致失去精度当数据库列开云体育电动老虎机精确到小数部分的第二值大于3:

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

日期

INT32

org.apache.kafka.connect.data.Date

代表时代以来的天数。

时间([P])

INT64

org.apache.kafka.connect.data.Time

代表午夜以来的毫秒数,不包括时区信息。SQL Server允许P在鹿储存范围10微秒级精度,尽管这种模式结果在精度的损失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在鹿储存范围10微秒级精度,尽管这种模式结果在精度的损失P> 3。

时间戳值

DATETIME,SMALLDATETIMEDATETIME2类型表示没有时区的时间戳信息。这些列转化为一个等价的基于UTC卡夫卡连接值。所以例如DATETIME2“2018-06-20 15:13:16.945104”由价值io.开云体育官方注册网址debezium.time.MicroTimestamp“1529507596945104”的价值。

注意,运行的JVM的时区卡夫卡连接和Debezium并不影响这种转换。开云体育官方注册网址

十进制值

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

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

数字((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服务器类型 文字类型 语义类型

数字((M [D]))

FLOAT64

n /一个

小数((M [D]))

FLOAT64

n /一个

SMALLMONEY ((M [D]))

FLOAT64

n /一个

钱((M [D]))

FLOAT64

n /一个

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

数字((M [D]))

字符串

n /一个

小数((M [D]))

字符串

n /一个

SMALLMONEY ((M [D]))

字符串

n /一个

钱((M [D]))

字符串

n /一个

设置SQL Server

从SQL开云体育官方注册网址 Server Debezium捕捉变化事件表,与必要的SQL Server管理员特权必须首先运行一个查询在数据库上启用疾控中心。开云体育电动老虎机管理员必须为每个表,然后使CDC Debezium捕获。开云体育官方注册网址

CDC应用之后,它捕获的所有插入,更新,删除操作致力于启用CDD的表。Debe开云体育官方注册网址zium连接器可以捕获这些事件并释放他们卡夫卡的话题。

使疾病预防控制中心在SQL Server数据库开云体育电动老虎机

您可以启用疾控中心为一个表之前,您必须启用了SQL Server数据库。开云体育电动老虎机SQL Server管理员使疾病预防控制中心通过运行一个系统存储过程。系统存储过程可以通过使用SQL Server Management Studio,运行或使用transact - SQL。

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

  • 你是一个db_owner数据库。开云体育电动老虎机

  • SQL Server代理正在运行。

SQL Server疾控中心功能流程变化只发生在用户创建的表。你不能使CDC在SQL Server上开云体育电动老虎机数据库。
过程
  1. 视图在SQL Server Management Studio菜单,点击模板资源管理器

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

  3. 扩大变化数据捕获>配置然后点击启用数据库疾病开云体育电动老虎机预防控制中心

  4. 模板中,取代的数据库名称开云体育电动老虎机使用声明与数据库的名称,你想使疾病预防控制中心。开云体育电动老虎机

  5. 运行存储过程sys.sp_cdc_enable_db使疾病预防控制中心的数据库。开云体育电动老虎机

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

    下面的例子展示了如何为数据库启用疾控中心开云体育电动老虎机MyDB:

    例如:为疾控中心启用SQL Server数据库模板开云体育电动老虎机
    使用MyDB执行系统。sp_cdc_enable_db去

一个SQL服务器上启用疾控中心表

一个SQL服务器管理员必须使变化数据捕获的源表你想Debezium捕捉。开云体育官方注册网址数据库必开云体育电动老虎机须为疾控中心已经启用。要启用CDC在桌子上,一个SQL服务器管理员运行存储过程sys.sp_cdc_enable_table为表。存储过程可以通过使用SQL Server Management Studio,运行或使用transact - SQL。必须启用SQL Server疾控中心为每个表,你想捕获。

先决条件
  • 疾控中心启用了SQL Server数据库。开云体育电动老虎机

  • SQL Server代理正在运行。

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

过程
  1. 视图在SQL Server Management Studio菜单,点击模板资源管理器

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

  3. 扩大变化数据捕获>配置,然后单击使表指定Filegroup选项

  4. 模板中,取代的表名使用声明与表的名称,你想捕获。

  5. 运行存储过程sys.sp_cdc_enable_table

    下面的例子显示了如何使CDC表MyTable:

    例子:启用SQL Server表疾控中心
    使用MyDB执行系统。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去
    1 指定的表的名称,你想捕获。
    2 指定一个角色MyRole你可以添加用户谁想要资助选择允许在捕获的源表的列。用户系统管理员db_owner角色也可以访问指定的改变表。设定的值@role_name只允许成员系统管理员db_owner捕获的信息的完全访问权。
    3 指定了filegroup在SQL Server捕获的表的更改表的地方。指定的filegroup必须是已经存在的。最好不要在同一定位变化表filegroup您使用的源表。

验证用户能够访问CDC表

SQL服务器管理员可以运行一个系统存储过程查询数据库或表检索其疾病预防控制中心配置信息。开云体育电动老虎机存储过程可以通过使用SQL Server Management Studio,运行或使用transact - SQL。

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

  • 你有加入任何控制角色表定义查询包含的信息。

过程
  1. 视图在SQL Server Management Studio菜单,点击对象资源管理器

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

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

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

    查询不应该返回空的结果。

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

    示例:查询一个表为中心配置信息
    使用MyDB;执行系统。sp_cdc_help_change_data_capture去

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

SQL Server在Azure

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

SQL Server总是在

SQL Server连接器可以捕获变化从一个总是在只读副本。

先决条件
  • 配置变化数据捕获和主节点上启用。SQL服务器不支持中心直接在副本。

  • 配置选项开云体育电动老虎机database.applicationIntent被设置为只读的。这是所需的SQL Server。当Debe开云体育官方注册网址zium检测这种配置选项,它会采取以下行动:

    • snapshot.isolation.mode快照,这是唯一一个只读事务隔离模式支持。

    • 提交(只读)事务在每个查询的执行流循环,这是需要获得最新的疾病控制和预防中心的数据视图。

SQL Server的捕捉工作代理配置服务器负载和延迟

当一个数据库管开云体育电动老虎机理员允许改变源表的数据捕获,捕获工作代理开始运行。代理从事务日志中读取新的变更事件记录和事件记录复制到变化数据表。之间的时间变化是在源表,和时间的改变出现在相应的表中,总有一个小延迟间隔。这个延迟间隔代表一个差距当变化发生在源表和当他们成为Apache卡夫卡Debezium可以流。开云体育官方注册网址

理想情况下,应用程序必须快速响应变化数据,你想保持密切同步源和变化之间的表。你想象,运行捕获剂不断过程尽快更改事件可能导致增加吞吐量和减少延迟——填充改变表尽快与新事件记录事件发生后,在近乎实时的。然而,这并不一定如此。有一个的性能损失支付追求更直接的同步。每次查询数据库的捕捉工作代理新事件记录,它增加了对数据库主机CPU负载。开云体育电动老虎机额外的服务器上的负载可以在数据库的整体性能产生负面影响,并可能减少交易效率,特别是在高峰的时候数据库使用。开云体育电动老虎机

监视数据库是很重要的指标,这样你知道数据库达到的服务开云体育电动老虎机器可以不再支持捕获剂的活动水平。如果你发现性能问题,SQL Server捕获代理设置,您可以修改帮助平衡整个数据库主机上的CPU负载和容忍程度的延迟。开云体育电动老虎机

SQL Server捕捉工作代理配置参数

在SQL Server,参数控制捕获工作代理人的行为是在SQL Server中定义的表msdb.dbo.cdc_jobs。如果你体验工作性能问题在运行捕获剂,调整捕捉岗位设置以减少CPU负载通过运行sys.sp_cdc_change_job存储过程和提供新值。

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

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

pollinginterval
  • 指定的秒数之间的捕获剂等日志扫描周期。

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

  • 的值0指定扫描之间没有等待。

  • 默认值是5

maxtrans
  • 指定的最大数量的事务处理期间每个日志扫描周期。捕获的工作流程后,指定的事务数量,停顿的时间长度pollinginterval指定下一个扫描开始之前。

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

  • 默认值是500年

maxscans
  • 指定一个扫描周期的数量限制的捕捉工作可以尝试捕捉的全部内容数据库事务日志。开云体育电动老虎机如果连续参数设置为1,工作停顿的时间长度pollinginterval指定之前简历扫描。

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

  • 默认值是10

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

部署

部署Debezium S开云体育官方注册网址QL Server连接器,安装Debezium SQL Server连接器存档,配置连接器,并开始通过添加其配置卡夫卡连接连接器。

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

  2. 将文件解压缩到卡夫卡连接环境中。

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

  4. 配置连接器添加配置集群卡夫卡连接。

  5. 重新启动卡夫卡连接过程去接新的JAR文件。

如果你正在与不可变的容器,明白了开云体育官方注册网址Debezium集装箱的图片Apache管理员、Apache卡夫卡和卡夫卡连接。你可以把官员在Linux上的集装箱图片Microsoft SQL Server从码头工人中心。

SQL Server连接器配置示例

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

你可以选择生成事件的一个子集模式和表在数据库中。开云体育电动老虎机可选地,您可以忽略,面具,或包含敏感数据的截断列,超过指定的尺寸,或者你不需要。

{" name ": " inventory-connector”,(1)“配置”:{“连接器。class": "io.debezium.connector.sqlserver.SqlServerConnector",(2)“开云体育电动老虎机数据库。主机名”:“192.168.99.100”,(3)“开云体育电动老虎机数据库。港”:“1433”,(4)“开云体育电动老虎机数据库。使用r": "sa",(5)“开云体育电动老虎机数据库。密码”:“密码!”(6)“开云体育电动老虎机数据库。dbname": "testDB",(7):开云体育电动老虎机“database.server.name fullfillment”,(8)“table.include。列表”:“dbo.customers”,(9)“开云体育电动老虎机database.history.kafka.bootstrap。服务器”:“卡夫卡:9092”,(10)“开云体育电动老虎机database.history.kafka。来pic": "dbhistory.fullfillment"(11)}}
1 我们的连接器的名称与卡夫卡连接服务注册它。
2 这个SQL Server连接器类的名称。
3 SQL Server实例的地址。
4 SQL Server实例的端口号。
5 SQL Server的用户的名称
6 SQL Server用户的密码
7 数据库的名称来捕获变化。开云体育电动老虎机
8 SQL Server实例的逻辑名称/集群,形成一个名称空间中使用所有的名字卡夫卡的主题连接器写道,卡夫卡连接模式名称和相应的名称空间Avro模式时Avro转换器使用。
9 一个列表的所有表的更改Debezium应该捕获。开云体育官方注册网址
10 卡夫卡的经纪人这个连接器将使用DDL语句编写和恢复数据库历史话题。开云体育电动老虎机
11 数据库的名称历史话题,连接器将D开云体育电动老虎机DL语句编写和恢复。这个话题是仅供内部使用,不应被消费者使用。

配置属性的完整列表,您可以设置Debezium SQL Server连接器,明白了开云体育官方注册网址SQL Server连接器属性

你可以发送这个配置帖子命令来运行卡夫卡连接服务。服务记录配置并启动一个连接器任务执行以下任务:

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

  • 读事务日志。

  • 记录更改事件卡夫卡的话题。

添加连接器配置

开始运行一个SQL Server De开云体育官方注册网址bezium连接器,创建一个连接器配置,配置添加到您的卡夫卡连接集群。

先决条件
过程
  1. 创建一个SQL服务器的配置连接器。

  2. 使用卡夫卡REST API连接卡夫卡添加连接器配置连接集群。

结果

当连接器,它执行一个一致的快照连接器的SQL Server数据库配开云体育电动老虎机置。连接器然后开始生成数据行级操作的事件和流媒体的改变事件记录卡夫卡的话题。

连接器属性

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

属性信息的组织结构如下:

需要Debeziu开云体育官方注册网址m SQL Server连接器配置属性

以下配置属性要求除非一个默认值是可用的。

财产 默认的 描述

没有默认的

独特的连接器的名称。再次尝试注册名称相同的就会失败。(此属性所要求的所有卡夫卡连接连接器)。

没有默认的

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

1

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

没有默认的

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

1433年

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

没有默认的

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

没有默认的

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

没有默认的

SQL Server数据库的名称来流的变化。开云体育电动老虎机不能使用吗开云体育电动老虎机database.names

没有默认的

指定的实例名称SQL Server命名的实例

没有默认的

以逗号分隔的SQL Server数据库名称的流的变化。开云体育电动老虎机目前,只有一个支持数据库名称。开云体育电动老虎机不能使用吗开云体育电动老虎机database.dbname

这个选项是实验,不能用于生产。使用它会使连接器不兼容的行为没有升级或降级的默认配置路径:

  • 连接器将为其承诺抵消使用不同的密钥信息。

  • 中使用的SQL语句snapshot.select.statement.overrides必须使用数据库名称为完全限定表名的一部分。开云体育电动老虎机

  • 暴露的连接器的结构指标会有所不同。

没有默认的

逻辑名称,标识和SQL Server数据库服务器提供了一个名称空间,你希望Debezium捕获。开云体育官方注册网址开云体育电动老虎机逻辑名称应该是唯一的在所有其他连接器,因为它被用作所有卡夫卡主题名称的前缀,接收记录从这个连接器。只有字母数字字符,连字符,点和强调必须用于数据库服务器逻辑名。开云体育电动老虎机

+

不改变这个属性的值。如果你改变名称值,重启之后,而不是继续发出事件最初的话题,连接器发出后续事件主题的名字是基于新值。连接器也无法恢复其数据库历史话题。开云体育电动老虎机

没有默认的

可选,以逗号分隔的正则表达式匹配的模式的名称想要捕捉变化。不包括在任何模式名称schema.include.list排除在其变化捕获。默认情况下,所有非系统的捕获模式有其变化。不还schema.exclude.list财产。

没有默认的

可选,以逗号分隔的正则表达式匹配的模式的名称希望捕获的变化。不包括在任何模式的名称schema.exclude.list有它改变了,除了系统模式。不还schema.include.list财产。

没有默认的

一个可选的以逗号分隔的正则表达式匹配完全限定表标识符表,你希望Debezium捕获;开云体育官方注册网址不包括的任何表table.include.list排除在捕获。每个标识符的形式schemaName的表。默认情况下,所有非系统表指定连接器捕获模式。不能使用吗table.exclude.list

没有默认的

一个可选的以逗号分隔的正则表达式匹配完全限定表标识符的表你想排除被抓获;开云体育官方注册网址不包括在Debezium捕获所有表table.exclude.list。每个标识符的形式schemaName的表。不能使用吗table.include.list

空字符串

一个可选的以逗号分隔的正则表达式匹配的完全限定名称列应该被包括在事件消息值的变化。完全限定名称列的形式schemaName的表columnName。请注意,主键列总是包含在事件的关键,即使不包括在价值。不还column.exclude.list财产。

空字符串

一个可选的以逗号分隔的正则表达式匹配的完全限定名称列应该排除在更改事件消息值。完全限定名称列的形式schemaName的表columnName。请注意,主键列总是包含在事件的关键,如果排除在价值。不还column.include.list财产。

n /一个

一个可选,以逗号分隔的正则表达式匹配的完全限定名称基于字符的列。完全限定名称列的形式' < schemaName ><表>._ < columnName >”。在生成的更改事件记录,指定列的值替换为假名。

一个假名由散列值指定应用的结果hashAlgorithm。基于所使用的哈希函数,引用完整性维护,当列值替换为假名。支持哈希函数的描述MessageDigest节Java加密体系结构标准算法名称的文档。

在接下来的例子中,CzQMA0cB5K是一个随机选择的盐。

column.mask.hash.sha with.salt——256.。CzQMA0cB5K = inventory.orders。customerName, inventory.shipment.customerName

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

根据hashAlgorithm使用,选中,和实际数据集,生成的数据集可能不是完全掩盖了。

哈希策略版本2应该用于确保富达如果被散列的值是在不同的地方或系统。

自适应

时间、日期和时间戳可以代表不同的精度,包括:自适应(默认)捕获时间和时间戳值在数据库中一样使用毫秒、微秒,或纳秒精度值基于数据库列的类型;开云体育电动老虎机或连接总是代表着时间和时间戳值使用卡夫卡连接的内置表示时间、日期和时间戳,它使用毫秒精度无论数据库列的精度。开云体育电动老虎机看到时间值

精确的

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

精确的(默认)代表他们精确地使用java.math.BigDecimal价值观在改变事件在一个二进制形式表示。

代表他们使用值,这可能会导致丧失精度,而且更容易使用。

字符串编码值格式化的字符串,这很容易消耗但语义信息真正的类型。

真正的

布尔值,用于指定连接器是否应该发布数据库模式的变化到卡夫卡的主题名称相同的数据库服务器ID。每个模式改变记录键包含数据库名称和值是一个JSON结构,描述了模式更新开云体育电动老虎机。这是独立的连接器内部数据库历史记录。开云体育电动老虎机默认值是真正的

真正的

控制是否删除事件是紧随其后的是一个墓碑上的事件。

真正的——由一个一个删除操作删除事件和随后的墓碑事件。

——只有一个删除发送事件。

源记录被删除后,发射一个墓碑事件(默认行为)允许卡夫卡属于完全删除所有事件的关键,以防被删除的行日志压实启用主题。

n /一个

一个可选的以逗号分隔的正则表达式匹配的完全限定名称基于字符的列的值应该被截断的更改事件消息值字段值是否超过指定数量的字符。可以使用多个属性具有不同的长度在一个配置中,尽管在每个长度必须是一个正整数。完全限定名称列的形式schemaName的表columnName

n /一个

一个可选的以逗号分隔的正则表达式匹配的完全限定名称基于字符的列的值应该被替换更改事件消息值的字段值由指定数量的星号(*)字符。可以使用多个属性具有不同的长度在一个配置中,尽管在每个长度必须是一个正整数或零。完全限定名称列的形式schemaName的表columnName

n /一个

一个可选的以逗号分隔的正则表达式匹配的完全限定名称列的原始类型和长度作为参数应该添加相应的字段在发射模式变化的消息。模式参数__开云体育官方注册网址debezium.source.column.type,__开云体育官方注册网址debezium.source.column.length__开云体育官方注册网址debezium.source.column.scale用于传播原始类型名称和长度(不同宽度的类型),分别。有用的正确大小水槽数据库中相应的列。开云体育电动老虎机完全限定名称列的形式schemaName的表columnName

n /一个

一个可选的以逗号分隔的正则表达式匹配的特定于数据库的数据类型名称列的原始类型和长度作为参数应该添加相应的字段在发射模式变化的消息。开云体育电动老虎机模式参数__开云体育官方注册网址debezium.source.column.type,__开云体育官方注册网址debezium.source.column.length__开云体育官方注册网址debezium.source.column.scale将被用于传播原始类型名称和长度(不同宽度的类型),分别。有用的正确大小水槽数据库中相应的列。开云体育电动老虎机完全限定数据类型名称的形式schemaName的表typeName。看到SQL Server数据类型对于SQL服务器特定数据类型名称的列表。

n /一个

的表达式列表指定连接器使用的列表单自定义消息键改变事件记录,发布卡夫卡指定表的主题。

默认情况下,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编码的字符串,十六进制将二进制数据表示为hex-encoded (base16)字符串

avro

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

  • avro替换字符,不能用于强调Avro类型名称。

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

先进的SQL Server连接器配置属性

以下先进的配置属性都有现成的,在大多数情况下工作,因此很少需要指定连接器的配置。

财产 默认的 描述

没有默认的

列举了一个以逗号分隔的符号名称自定义转换器连接器可以使用实例。例如,

国际标准图书编号

你必须设置转换器财产让连接器使用一个自定义转换器。

对于每一个转换配置连接器,您必须添加一个.type属性,该属性指定了fully-qualifed实现converter接口的类的名称。的.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除了属性设置为一个值从来没有

这个属性不会影响增量快照的行为。

repeatable_read

使用模式来控制事务隔离级别和多久连接器锁表指定捕获。支持以下值:

  • read_uncommitted

  • read_committed

  • repeatable_read

  • 快照

  • 独家(独家模式使用可重复读隔离级别,然而,它需要互斥型锁表读取)。

快照,read_committedread_uncommitted模式不阻止其他事务在初始快照更新表行。的独家repeatable_read模式做防止并发更新。

模式的选择也会影响数据的一致性。只有独家快照模式保证完整的一致性,即初始快照和流日志构成一个线性的历史。在的情况下repeatable_readread_committed模式,这可能发生,例如,一个记录了两次——一次出现在初始快照和次流阶段。尽管如此,这种一致性水平应该做数据镜像。为read_uncommitted有任何数据一致性保证(有些数据可能会丢失或损坏)。

失败

指定连接器应该如何应对异常事件的处理过程中。失败将传播异常(指示问题事件的抵消),导致连接器停止。
警告导致出现问题的事件会跳过和抵消的问题事件被记录。
跳过导致出现问题的事件会跳过。

1000年

正整数的值指定的毫秒数连接器应该在每个迭代中等待新的更改事件出现。默认为1000毫秒,或者1秒。

8192年

正整数的值指定了阻塞队列的最大记录数所能容纳的量。当Debe开云体育官方注册网址zium从数据库读取事件流,它将事件阻塞队列之前写卡夫卡。开云体育电动老虎机阅读改变事件的阻塞队列可以提供反压力的情况下从数据库连接器吸入消息的速度比它可以编写卡夫卡,或者当卡夫卡变得不可用。开云体育电动老虎机事件队列连接器时忽视举行定期记录偏移量。总是设置的值max.queue.size更大的价值max.batch.size

0

一个长整型值,指定字节的阻塞队列的最大体积。默认情况下,体积限制不指定阻塞队列。指定的字节数,队列可以消费,将此属性设置为一个积极的长期价值。
如果max.queue.size也是集,写作时队列阻塞队列的大小达到通过属性指定的限制。例如,如果您设置max.queue.size = 1000,max.queue.size.in.bytes = 5000、写作到队列阻塞队列包含1000条记录后,或记录在队列的体积后达到5000字节。

2048年

正整数的值指定的最大大小每一批处理的事件,应该在每个迭代的连接器。

0

控制频率的心跳消息被发送。
这个属性包含一个定义连接器的频率间隔以毫秒为单位发送消息到心跳的主题。属性可以用来确认连接器还收到从数据库更改事件。开云体育电动老虎机你也应该利用心跳消息的情况下只记录未捕获的表是更长一段时间的改变。在这种情况下,连接器将继续从数据库读取日志消息但从来没有发出任何改变到卡夫卡,反过来意味着没有抵消更新致力于卡夫卡。开云体育电动老虎机这可能会导致更多的更改事件连接器重启后重新发送。设置这个参数0不要发送心跳消息。
默认情况下禁用。

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

控制的主题命名的心跳消息被发送。
这个话题被命名为根据模式< heartbeat.topics.prefix >。< server.name >

没有默认的

在毫秒间隔之前应该等待拍摄快照后启动;
可以用来避免快照中断启动多个连接器时在一个集群中,这可能会导致连接器的调整。

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添加以下属性如果你想要一个快照只包括那些不是soft-deleted:记录

“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

模式的版本在美国疾病控制与预防中心事件;开云体育官方注册网址Debezium 0.10引入了一些打破
的结构变化块为了统一所有连接器接触结构。
通过设置这个选项v1早期版本中使用的结构可以产生。注意,这个设置不推荐,计划在未来取消Debezium版本。开云体育官方注册网址

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

字段名是否消毒坚持Avro命名要求。看到Avro命名为更多的细节。

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

$ 开云体育电动老虎机{database.server.name} .transaction

控制主题的连接器的名称发送交易信息的元数据。占位符$ 开云体育电动老虎机{database.server.name}可用于指连接器的逻辑名称;默认为$ 开云体育电动老虎机{database.server.name} .transaction例如,dbserver1.transaction

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

10000(10秒)

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

没有默认的

以逗号分隔的操作类型,在流将被忽略。的操作包括:c插入/创建、u更新,d删除。默认情况下,不跳过操作。

没有默认值

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

允许在增量快照模式变化。当启用连接器将检测模式变化增量快照和重新选择当前块以避免锁定ddl。

注意,不支持修改主键会导致错误的结果,如果在增量快照。另一个限制是,如果一个模式的变化只影响列的默认值,那么变化不会被探测到,直到DDL从binlog流处理。这并不影响快照事件的值,但是快照事件的模式可能已经过时的违约。

1024年

的最大行数连接器存取和读取到内存块在增量快照。增加块大小提供了更高的效率,因为快照少运行快照查询一个更大的规模。然而,更大的块的大小也需要更多的内存缓冲区快照数据。调整块大小的值提供了最佳的性能在您的环境中。

0

指定每个迭代的最大数量事务被用来减少内存占用流变化时从多个表在数据库中。开云体育电动老虎机当设置为0(默认),连接器使用当前最大的LSN作为获取变化范围。当设置为大于0的值,指定的连接器使用第n个LSN范围获取变化从这个设置。

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

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

开云体育官方注册网址Debezium提供了一组开云体育电动老虎机database.history。*属性控制连接器与模式交互历史话题。

下表描述了开云体育电动老虎机database.history属性配置Debezium连接器。开云体育官方注册网址

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

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

一个主机/端口对列表,建立一个初始的连接器使用连接到卡夫卡集群。这个连接是用于检索以前存储的数据库模式历史连接器,写作和每个DDL语句从源数据库读取。开云体育电动老虎机每一对应该指向同一个卡夫卡集群卡夫卡所使用的连接过程。

One hundred.

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

3000年

一个整数值,它指定的最大数量毫秒连接器应该等待获取集群信息使用卡夫卡管理客户机。

4

连接器的最大次数应该尝试读取保存历史数据连接器之前恢复失败的错误。最大的时间等待后没有数据recovery.attemptsxrecovery.poll.interval.ms

一个布尔值,用于指定连接器是否应该忽略畸形或未知的数据库语句或停止处理,所以人类可以解决这个问题。开云体育电动老虎机安全默认是。不应该只有小心使用,因为它会导致数据丢失或矫直时binlog正在处理。

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

真正的只记录那些变化的相关表的DDL语句被Debezium捕获。开云体育官方注册网址设置为真正的小心因为缺失的数据可能成为必要的如果你改变哪些表变化捕获。

安全默认是

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

真正的只记录那些变化的相关表的DDL语句被Debezium捕获。开云体育官方注册网址设置为真正的小心因为缺失的数据可能成为必要的如果你改变哪些表变化捕获。

安全默认是

直通数据库历史属性配置生产开云体育电动老虎机国和消费国的客户


开云体育官方注册网址Debezium依赖于卡夫卡生产商写模式变化数据库历史话题。开云体育电动老虎机同样,它依赖于卡夫卡消费者连接器开始时从数据库读取历史主题。开云体育电动老虎机您定义的配置卡夫卡生产国和消费国的客户通过将值分配给一组开始的直通配置属性开云体育电动老虎机database.history.producer。*开云体育电动老虎机database.history.consumer。*前缀。直通生产国和消费国数据库历史属性控制的一系列行为,比如如何将这些客户与卡夫卡代开云体育电动老虎机理安全连接,如以下示例所示:

开云体育电动老虎机database.history.producer.security。协议SSL databas开云体育电动老虎机e.history.producer.ssl.keystore.location = = / var /私人/ SSL / kafka.server.keystore。jks 开云体育电动老虎机database.history.producer.ssl.keystore。密码= test1234 datab开云体育电动老虎机ase.history.producer.ssl.truststore.location = / var /私人/ ssl / kafka.server.truststore。jks 开云体育电动老虎机database.history.producer.ssl.truststore。密码= test1234 datab开云体育电动老虎机ase.history.producer.ssl.key。密码= test1234 datab开云体育电动老虎机ase.history.consumer.security。协议SSL databas开云体育电动老虎机e.history.consumer.ssl.keystore.location = = / var /私人/ SSL / kafka.server.keystore。jks 开云体育电动老虎机database.history.consumer.ssl.keystore。密码= test1234 datab开云体育电动老虎机ase.history.consumer.ssl.truststore.location = / var /私人/ ssl / kafka.server.truststore。jks 开云体育电动老虎机database.history.consumer.ssl.truststore。密码= test1234 datab开云体育电动老虎机ase.history.consumer.ssl.key.password = test1234

开云体育官方注册网址Debezium带前缀的属性名之前,将属性传递到卡夫卡客户机。

看到卡夫卡文档了解更多细节卡夫卡生产商配置属性卡夫卡消费者配置属性

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

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

一样的直通属性数据库历史客户开云体育电动老虎机之前开云体育官方注册网址,Debezium带前缀的属性将它们传递到数据库驱动程序。开云体育电动老虎机

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

当启用变化数据捕获的SQL Server表,表中的变化,事件记录被保存到服务器上获取表。如果引入的变化源表的结构变化,例如,通过添加一个新列,改变不是动态反映在表。只要捕捉表继续使用过时的模式,Debezium连接器不能发出正确数据更改事件表。开云体育官方注册网址你必须干预刷新获取表,使连接器恢复处理更改事件。

因为美国疾病控制与预防中心在SQL Server中实现的方式,你不能使用Debezium更新捕获表。开云体育官方注册网址刷新获取表,一个人必须是一个SQL Server数据库运营商提升特权。开云体育电动老虎机Debez开云体育官方注册网址ium用户,必须协调与SQL Server数据库操作员完成任务模式刷新和恢复流卡夫卡的话题。开云体育电动老虎机

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

  • 离线模式更新要求你停止Debezium连接器才能更新捕获表。开云体育官方注册网址

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

有优点也有缺点使用每种类型的过程。

你是否使用在线或离线更新方法,你必须完成整个模式应用之前更新过程后续更新相同的源表。最佳实践是执行所有ddl在单个批处理程序只能运行一次。

一些模式变化不支持启用了CDC的源表。例如,如果启用了疾控中心在桌子上,SQL服务器不允许您更改表的模式如果你一列或更名为改变了列类型。

你改变一个源表中某一列后非空反之亦然,SQL Server连接器不能正确地捕获后更改的信息,直到您创建一个新的捕获实例。如果您没有创建一个新的捕获表修改的列名称后,更改事件记录,连接器发出不正确指示是否列是可选的。也就是说,以前定义为可选的(或列)继续,尽管现在被定义为非空。同样,列被定义为(非空),保留名称,尽管他们现在定义为

离线模式更新

离线模式更新获取表的更新提供最安全的方法。然而,离线更新可能不是可行的使用需要高可用性的应用程序。

先决条件
  • 一个更新的模式致力于疾病预防控制中心启用SQL Server表。

  • 你是一个SQL Server数据库运营商提开云体育电动老虎机升特权。

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

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

  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将旧的捕获实例名。

在线模式更新

完成一个在线模式更新的过程比运行的过程简单离线模式更新,你可以完成它在应用程序和数据无需任何停机处理。然而,在线模式更新,一个潜在的处理差距可能发生在你更新源数据库中的模式,但是在你创建新的捕获实例。开云体育电动老虎机间隔,更改事件继续被旧更改表的实例,和变化的数据保存到旧表保留之前的结构模式。所以,例如,如果你添加一个新列一个源表,更改事件,产生新的捕捉表之前准备好,不包含一个字段的新列。如果您的应用程序不会容忍这样一个过渡期,最好使用离线模式更新过程。

先决条件
  • 一个更新的模式致力于疾病预防控制中心启用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. 输入以下命令启动数据库壳:开云体育电动老虎机

docker-compose - f docker-compose-sqlserver。yaml exec bash状态"置疑" - c ' / opt / mssql-tools / bin / sqlcmd - u sa - p $ testDB SA_PASSWORD - d '
  1. 修改的模式客户通过运行以下查询源表添加phone_number字段:

    ALTER TABLE客户添加phone_number VARCHAR (32);
  2. 创建新的捕获通过运行实例sys.sp_cdc_enable_table存储过程。

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

    插入客户(first_name、last_name、电子邮件、phone_number)值(“约翰”,“母鹿”,“john.doe@example.com”、“+ 1-555-123456”);去

    卡夫卡通过连接日志报告配置更新条目类似如下信息:

    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字段添加到模式和它的值出现在消息写入卡夫卡的话题。

    …{“类型”:“弦”、“可选”:真的,“场”:“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”;去

监控

Debe开云体育官方注册网址zium SQL Server连接器提供了三种类型的指标,除了动物园管理员的内置支持JMX的度量,卡夫卡,卡夫卡提供连接。连接器提供了以下指标:

信息如何通过JMX公开上述指标,看到开云体育官方注册网址Debezium监控文档

快照指标

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

快照指标并非暴露,除非一个快照操作被激活时,或者如果发生自上次快照连接器的开始。

下表列出了shapshot指标可用。

属性 类型 描述

字符串

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

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

这个连接器的事件总数已经从去年开始或重置。

事件的数量已经被包括/排除列表过滤规则过滤配置连接器。

string []

表的列表被连接器。

int

队列长度用来传递事件之间的快照和主卡夫卡连接循环。

int

队列的自由能力用来传递事件之间的快照和主卡夫卡连接循环。

int

表的总数被包含在快照。

int

表的数量尚未复制快照。

布尔

快照是否开始。

布尔

快照是否中止。

布尔

快照是否完成。

总秒数,快照到目前为止,即使不完整。

Map < String,长>

地图包含扫描的行数为每个表的快照。表在处理过程中也逐渐被添加到地图。更新一个表扫描并完成每10000行。

的最大缓冲区队列以字节为单位。这个指标是可用的max.queue.size.in.bytes被设置为一个积极的长期价值。

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

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

属性 类型 描述

字符串

当前的快照数据块的标识符。

字符串

下界的主键设置定义当前块。

字符串

主键的上限设置定义当前块。

字符串

下界的当前快照的表的主键设置。

字符串

主键的上界的当前快照表。

流指标

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

下表列出了流指标可用。

属性 类型 描述

字符串

过去的流事件连接器已经阅读。

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

事件,该连接器的总数已经重置自上次启动或指标。

创建事件的总数,这个连接器以来最后复位启动或指标。

更新事件的总数,这个连接器以来最后复位启动或指标。

删除事件,该连接器的总数已经重置自上次启动或指标。

事件的数量已经被包括/排除列表过滤规则过滤配置连接器。

string []

表的列表被连接器。

int

队列长度之间的拖缆和主要用来传递事件卡夫卡连接循环。

int

队列的自由能力用来传递事件之间的拖缆和主卡夫卡连接循环。

布尔

国旗,表示连接器是否正在连接到数据库服务器。开云体育电动老虎机

的毫秒数去年更改事件的时间戳和连接器之间的处理它。值将会把机器上的任何差异时钟运行数据库服务器和连接器。开云体育电动老虎机

处理事务的数量。

Map < String, String >

去年收到事件的坐标。

字符串

事务标识符的处理事务。

的最大缓冲区队列以字节为单位。这个指标是可用的max.queue.size.in.bytes被设置为一个积极的长期价值。

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

模式历史指标

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

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

属性 类型 描述

字符串

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

时间在时代秒复苏已经开始。

的数量变化,阅读在复苏阶段。

模式变化的总数在复苏和运行时应用。

后经过的毫秒数,最后从历史存储变化是恢复。

后经过的毫秒数,最后应用改变。

字符串

最后变化的字符串表示从历史存储中恢复过来。

字符串

最后应用变化的字符串表示。