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

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

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

开云体育官方注册网址Debezium SQL Server连接器可以监测和记录的行级的变化模式SQL Server数据库。开云体育电动老虎机这个连接器添加Debezium 0.9.0。开云体育官方注册网址

第一次连接到SQL Server数据库/集群,它读取一个一致的快照的所有模式。开云体育电动老虎机快照完成时,连接器连续流的变化是致力于SQL Server并生成对应的插入、更新和删除事件。为每个表的所有事件被记录在一个单独的卡夫卡的话题,在那里他们可以很容易被应用程序和服务。

概述

连接器的功能是基于变化数据捕获SQL Server提供的功能标准(因为SQL Server 2016 SP1)或企业版。使用此机制一个SQL Server捕获过程监视所有数据库和表并存储用户感兴趣变成专门创建的开云体育电动老虎机疾病预防控制中心表,存储过程外观。连接器与SQL Server 2017已经测试,但据报道社区成员与早期版本2014,它成功地使用了(只要CDC特性提供)。

数据库操开云体育电动老虎机作符必须启用疾病预防控制中心表(s)应该被Debezium连接器。开云体育官方注册网址连接器然后产生一个更改事件对于每一行级插入、更新和删除操作,通过出版美国疾病控制与预防中心的API为每个表,记录所有的更改事件在一个单独的卡夫卡的话题。客户机应用程序读卡夫卡主题对应数据库表他们感兴趣后,应对每一个行级事件它看到在这些话题。开云体育电动老虎机

数据库操开云体育电动老虎机作符通常使疾病预防控制中心中年的数据库或表。开云体育电动老虎机这意味着所有的连接器没有完整的历史变化,已经到数据库。开云体育电动老虎机因此,当SQL Server连接器连接到一个特定的SQL Server数据库,它开始执行开云体育电动老虎机一致的快照每个数据库的模式。开云体育电动老虎机连接器完成后快照,它继续流变化的确切点快照。通过这种方式,我们从所有的数据都是一致的,然而继续阅读没有失去任何更改而发生快照。

连接器还容忍失败。随着连接器读取的变化和产生的事件,它记录在数据库日志的位置(开云体育电动老虎机LSN /日志序列号),与相关联疾病预防控制中心记录,每个事件。如果连接器停止任何理由(包括通信失败,网络问题,或崩溃),重新启动时它只是继续阅读疾病预防控制中心表最后一个离开。这包括快照:如果快照不是在连接器停止时完成,重新启动时它将开始一个新的快照。

设置SQL Server

使用前Debezium SQL S开云体育官方注册网址erver连接器监视更改SQL服务器上提交,第一次启用疾病预防控制中心被监控的数据库。开云体育电动老虎机请记住疾病预防控制中心不能支持开云体育电动老虎机数据库。

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

然后启用疾病预防控制中心你计划来监视的每个表

——= = = = = = = = =——启用一个表指定Filegroup选项模板——= = = = = = = = =使用MyDB去执行系统。sp_cdc_enable_table @source_schema = N 'dbo”、@source_name = N 'MyTable”@role_name = N 'MyRole”、@filegroup_name = N 'MyDB_CT”@supports_net_changes = 1

验证该用户可以访问疾病预防控制中心表。

——= = = = = = = = =——验证连接器的用户访问,该查询不应该空的结果——= = = = = = = = =执行系统。sp_cdc_help_change_data_capture去

如果结果为空,请确保用户访问捕获实例和特权疾病预防控制中心表。

SQL Server在Azure

SQL Server插件没有被测试与SQL Server在Azure。我们欢迎任何反馈从用户尝试与数据库插件管理环境。开云体育电动老虎机

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

快照

SQL Server疾控中心不是用来存储数据库更改的完整历史。开云体育电动老虎机因此有必要Debezium建立当前的数据库内容的基线开云体育官方注册网址和小溪卡夫卡。开云体育电动老虎机这是通过一个过程被称为快照。

在默认情况下(快照模式最初的)连接器将在第一个启动执行初始一致的快照数据库的(这意开云体育电动老虎机味着在任何表结构和数据被捕获的连接器的过滤器配置)。

每个快照包含以下步骤:

  1. 确定表被捕获

  2. 每个监控表上获得一个锁来确保没有结构性变化可能发生的任何表。锁是由水平snapshot.isolation.mode配置选项。

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

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

  5. 在步骤2中选择释放锁获得,即锁通常只有很短的一段时间。

  6. 扫描所有相关的数据库表和模式有效的LSN位置读在步开云体育电动老虎机骤3中,并生成一个事件为每一行和写事件到适当的table-specific卡夫卡的话题。

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

阅读改变数据表

第一次启动时,连接器需要结构快照捕获的结构表和坚持这一信息在其内部数据库的历史主题。开云体育电动老虎机然后连接器标识更改表的每个源表并执行主循环

  1. 为每个变更表读取之间创建的所有更改存储最大LSN和当前最大LSN

  2. 顺序读取变化逐步根据提交LSN和改变LSN。这就确保了Debezium变化是重播的顺序是由数据库。开云体育官方注册网址开云体育电动老虎机

  3. 通过提交和改变lsn抵消卡夫卡连接。

  4. 存储最大的LSN和重复循环。

在重启之后,连接器将恢复从偏移量(提交和改变lsn)之前离开。

连接器能够检测中心是否为白名单启用或禁用源表在运行时修改其行为。

主题名称

SQL Server连接器写事件对于所有插入、更新和删除操作在一个桌子一个卡夫卡的话题。卡夫卡的话题总是表单的名称serverNameschemaName的表,在那里serverName连接器的逻辑名称是指定的吗开云体育电动老虎机database.server.name配置属性,schemaName是操作的模式的名称,然后呢的表是数据库表的名称的操作发生。开云体育电动老虎机

例如,考虑一个SQL Server安装的库存开云体育电动老虎机数据库包含四个表:产品,products_on_hand,客户,订单在模式dbo。如果连接器监控这数据库有一个逻辑服务器的名称开云体育电动老虎机实现,那么连接器生产这四个卡夫卡事件主题:

  • fulfillment.dbo.products

  • fulfillment.dbo.products_on_hand

  • fulfillment.dbo.customers

  • fulfillment.dbo.orders

模式改变话题

面向用户的模式还没有实现(参见改变话题dbz - 753)。

事件

所有数据更改事件产生的SQL Server连接器有一个键和一个值,尽管键和值的结构取决于表的更改事件的起源(见主题名称)。

卡夫卡D开云体育官方注册网址ebezium SQL Server连接器确保所有连接模式名有效Avro模式名。这意味着逻辑服务器名称必须从拉丁字母或下划线(例如,[a - z、a - z _]),剩下的字符在逻辑服务器名称和所有字符在模式和表名称必须是拉丁字母,数字或下划线(例如,[a - z、a - z 0 - 9, \ _])。如果不是这样,那么所有无效字符将自动替换为下划线字符。

这可能会导致意想不到的冲突逻辑服务器名称时,模式名称,表名包含其他字符,表之间唯一的区别人物全名是无效的,因此替换为下划线。

开云体育官方注册网址Debezium和卡夫卡连接的设计连续的事件消息流的结构,这些事件可能会随着时间而改变。这可能是消费者很难处理,所以很容易卡夫卡连接每个事件独立。每条消息键和值有两个部分:一个模式有效载荷。模式描述了结构的负载,而负载包含实际的数据。

更改事件的钥匙

对于一个给定的表,更改事件的关键将有一个结构,包含一个字段主键的每一列(或独特的键约束)当时的事件创建的表。

考虑一个客户表中定义库存开云体育电动老虎机数据库的模式dbo:

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

如果开云体育电动老虎机database.server.name配置属性的值server1,每一个事件的变化客户表时,这个定义将功能相同的关键结构,这在JSON是这样的:

{"模式":{“类型”:“结构”、“字段”:[{“类型”:“int32”、“可选”:假的,“场”:“id”}],“可选”:假的,“名字”:“server1.dbo.customers。关键”},“有效载荷”:{" id ": 1004}}

模式卡夫卡的关键部分包含一个连接模式描述的关键部分,在我们的案例中,意味着有效载荷值不是可选的,是一个结构由模式定义命名server1.dbo.customers.Key,有一个必需的字段命名id类型的int32。如果我们观察的价值的关键有效载荷领域,我们会发现它的确是一个结构(在JSON只是一个对象)和单一id领域,其价值1004年

因此,我们解释这关键中的描述行dbo.customers表(输出连接器server1),其id主键列的值1004年

更改事件值

像消息键事件消息都有一个变化的价值模式节和有效载荷部分。每一个变化的有效载荷部分事件产生的SQL Server连接器有一个值信封结构有以下字段:

  • 人事处是一个强制性的字段,其中包含一个字符串值描述操作的类型。SQL Server连接器的值c创建(或插入),u对于更新,d删除,r读(在快照的情况下)。

  • 之前是一个可选的字段,如果现在包含的状态行吗之前事件发生。将所描述的结构server1.dbo.customers.Value卡夫卡连接模式,server1连接器使用的所有行dbo.customers表。

  • 是一个可选的字段,如果现在包含的状态行吗事件发生。描述的结构是相同的server1.dbo.customers.Value卡夫卡连接模式中使用之前

  • 是一个强制性的字段,其中包含一个结构描述元数据来源,在SQL Server中包含这些字段:Debezium版本,连接器名称、事件是否进行的一个快照,提交LSN(不是在快照),的LSN变化,数据库,模式和表发生了改变,和一个时间戳,表示时的时间点记录是改变源数据库(在快照,它将快照的时间点)开云体育官方注册网址开云体育电动老虎机

  • ts_ms是可选的,如果存在包含时间(使用系统时钟在JVM中运行卡夫卡连接任务)的连接器处理事件。

当然,模式部分事件消息的值包含一个模式描述了这个信封的结构和嵌套的字段。

创建事件

让我们看看创建事件的价值为我们的样子客户表:

{"模式":{“类型”:“结构”、“字段”:[{“类型”:“结构”、“字段”:[{“类型”:“int32”、“可选”:假的,“场”:“id”},{“类型”:“弦”、“可选”:假的,“场”:“first_name”},{“类型”:“弦”、“可选”:假的,“场”:“last_name”},{“类型”:“弦”、“可选”:假的,“场”:“电子邮件”}],“可选”:真的,“名字”:“server1.dbo.customers。值”、“场”:“之前”},{“类型”:“结构”、“字段”:[{“类型”:“int32”、“可选”:假的,“场”:“id”},{“类型”:“弦”、“可选”:假的,“场”:“first_name”},{“类型”:“弦”、“可选”:假的,“场”:“last_name”},{“类型”:“弦”、“可选”:假的,“场”:“电子邮件”}],“可选”:真的,“名字”:“server1.dbo.customers。值”、“场”:“后”},{“类型”:“结构”、“字段”:[{“类型”:“弦”、“可选”:假的,“场”:“版本”},{“类型”:“弦”、“可选”:假的,“场”:“连接器”},{“类型”:“弦”、“可选”:假的,“场”:“name”},{“类型”:“int64”、“可选”:假的,“场”:“ts_ms”},{“类型”:“布尔”、“可选”:真的,“默认”:假的,“场”:“快照”},{“类型”:“弦”、“可选”:假的,“场”:“分贝”},{“类型”:“弦”、“可选”:假的,“场”:“模式”},{“类型”:“弦”、“可选”:假的,“场”:“表”},{“类型”:“弦”、“可选”:真的,“场”:“change_lsn”},{“类型”:“弦”、“可选”:真的,“场”:“commit_lsn”}],“可选”:假的,“名字”:“io.debezium.connector.sqlserver.Source”、“字段”:“源”},{“类型”:“弦”、“可选”:假的,“场”:“人事处”},{“类型”:“int64”、“可选”:真的,“场”:“ts_ms”}],“可选”:假的,“名字”:“server1.dbo.customers。开云体育官方注册网址信封”},“有效载荷”:{“前”:空,“后”:{" id ": 1005年,“first_name”:“约翰”,“last_name”:“母鹿”、“电子邮件”:“john.doe@example.org”},“源”:{“版本”:“0.10.0。α1”、“连接器”:“”、“名称”:“server1状态"置疑"”、“ts_ms”: 1559729468470,“快照”:假的,”数据库testDB”:“”、“”:“dbo模式”、“表”:“客户”、“change_lsn”:“00000027:00000758:0003”、“commit_lsn”:“00000027:00000758:0005“}”, op”:“c”、“ts_ms”: 1559729471739}}

如果我们看一下模式这个事件的一部分价值,我们可以看到的模式信封的模式结构(这是特定于SQL Server连接器和重用所有事件),和table-specific模式之前字段。

的模式的名称之前表单的字段logicalNameschemaName的表value,因此是完全独立于所有其他模式对于所有其他表。这意味着,当使用Avro转换器,结果Avro实施方案每个表在每一个逻辑源有他们自己的进化和历史。

如果我们看一下有效载荷这个事件的一部分价值事件,我们可以看到的信息,即描述,行(因为创建op = c),字段值包含值的新插入的行id,first_name,last_name,电子邮件列。

似乎的JSON表示的事件是远远大于他们描述的行。这是真的,因为JSON表示必须包括模式有效载荷的部分信息。它甚至是可能的,推荐使用Avro转换器大幅减少的大小实际写入卡夫卡主题的消息。

更新事件

的价值更新更改事件在这个表会有完全相同的模式,它的有效载荷结构相同但会持有不同的价值观。这里有一个例子:

{"模式":{…},“有效载荷”:{“前”:{" id ": 1005年,“first_name”:“约翰”,“last_name”:“母鹿”、“电子邮件”:“john.doe@example.org”},“后”:{" id ": 1005年,“first_name”:“约翰”,“last_name”:“母鹿”、“电子邮件”:“noreply@example.org”},“源”:{“版本”:“0.10.0。α1”、“连接器”:“”、“名称”:“server1状态"置疑"”、“ts_ms”: 1559729995937,“快照”:假的,”数据库testDB”:“”、“”:“dbo模式”、“表”:“客户”、“change_lsn”:“00000027:00000ac0:0002”、“commit_lsn”:“00000027:00000ac0:0007“}”, op”:“u”、“ts_ms”: 1559729998706}}

当我们比较的价值插入事件中,我们看到一些差异有效载荷部分:

  • 人事处字段值现在u,表示这一行改变,因为一个更新

  • 之前领域目前的状态与之前的值数据库行提交开云体育电动老虎机

  • 现在有更新的状态行,这里是可以看到的电子邮件值是现在noreply@example.org

  • 场结构有相同的字段,但值是不同的,因为这事件是在事务日志从不同的位置。

  • ts_ms显示了Debezium处理这个事件的时间戳。开云体育官方注册网址

有几件事情我们可以通过看这个学习有效载荷部分。我们可以比较之前结构来确定实际上改变了这一行,因为提交。的SQL服务器的结构告诉我们信息的记录这种变化(提供可追溯性),但更重要的是这信息我们可以比较其他事件在这个和其他主题知道这个事件发生之前,之后,或相同的SQL服务器提交其他事件。

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

删除事件

到目前为止,我们已经看到样品创建更新事件。现在,让我们看的价值删除事件相同的表。再一次,模式部分的值将被一模一样的创建更新事件:

{"模式":{…}},“有效载荷”:{“前”:{" id ": 1005年,“first_name”:“约翰”,“last_name”:“母鹿”、“电子邮件”:“noreply@example.org”},“后”:空,“源”:{“版本”:“0.10.0。α1”、“连接器”:“”、“名称”:“server1状态"置疑"”、“ts_ms”: 1559730445243,“快照”:假的,”数据库testDB”:“”、“”:“dbo模式”、“表”:“客户”、“change_lsn”:“00000027:00000db0:0005”、“commit_lsn”:“00000027:00000db0:0007“}”, op”:“d”、“ts_ms”: 1559730450205}}

如果我们看一下有效载荷部分,我们看到许多差异相比创建更新事件的有效载荷:

  • 人事处字段值现在d,表示这一行被删除

  • 之前领域目前的状态行,删除与数据库提交。开云体育电动老虎机

  • 字段为空,表示这一行已不复存在

  • 场结构有许多相同的值,除了ts_ms,commit_lsnchange_lsn领域已经发生了变化

  • ts_ms显示了Debezium处理这个事件的时间戳。开云体育官方注册网址

这个事件给消费者各种各样的信息,它可以用来处理删除这一行。

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

当一行被删除的删除上面列出的事件值仍然使用日志压实,自卡夫卡仍然可以删除所有消息早些时候同样关键。但只有当消息值卡夫卡知道它可以删除吗所有消息用相同的密钥。使这一切成为可能,Debezium SQL S开云体育官方注册网址erver连接器总是遵循删除事件与一个特殊的墓碑上事件,但具有相同的关键价值。

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

开云体育官方注册网址随着时间的推移Debezium能够捕获模式变化。由于疾病预防控制中心是在SQL Server中实现的方式,有必要与数据库运营商合作以确保Debezium连接器继续生产数据更新模式时更改事件。开云体育官方注册网址开云体育电动老虎机

正如已经提到的,Debezium使用SQL Server的变化数据开云体育官方注册网址捕获功能。这意味着,SQL Server创建一个捕捉表,其中包含源表上执行的所有更改。不幸的是,捕捉表是静态的,需要更新当源表结构的变化。这更新不是通过Debezium连接器本身,而是必须由操作员执行开云体育官方注册网址提升特权。

通常有两种程序如何执行模式的改变:

  • 冷——这是当Debezium停止执行开云体育官方注册网址

  • 热- Debezium运行时执行开云体育官方注册网址

这两种方法都有自己的优点和缺点。

在这两种情况下,它是至关重要的新模式更新之前执行过程完全相同的源表。因此建议执行ddl在单个批处理程序只完成一次。

并不是所有支持模式变化时,疾控中心启用源表。识别这样的一个例外是重命名列或改变其类型,SQL Server将不允许执行该操作。

虽然不是必需的SQL Server的中心机制本身,必须创建一个新的捕获实例时改变从一列非空反之亦然。这是必需的,这样Debezium SQL Server连接开云体育官方注册网址器可以改变信息。否则,发出事件将有变化可选值对应的字段(真正的)设置为匹配的原始值。

冷模式更新

这是最安全的程序,但可能不是可行的应用程序高可用性需求。操作员应该遵循这个步骤的序列

  1. 暂停生成数据库记录的应用程序开云体育电动老虎机

  2. 等待Debeziu开云体育官方注册网址m流unstreamed所有更改

  3. 停止Deb开云体育官方注册网址ezium连接器

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

  5. 创建一个新的捕获表更新源表使用sys.sp_cdc_enable_table过程参数的独特价值@capture_instance

  6. 重启应用程序

  7. 开始Debe开云体育官方注册网址zium连接器

  8. 当Debe开云体育官方注册网址zium开始从新捕捉流表可以使用旧的下降sys.sp_cdc_disable_table存储过程的参数@capture_instance将旧的捕获实例名

热模式更新

热模式更新应用程序不需要任何停机时间和数据处理。程序本身也比在寒冷的模式更简单的更新

  1. 所有更改应用到源表模式

  2. 创建一个新的捕获表更新源表使用sys.sp_cdc_enable_table过程参数的独特价值@capture_instance

  3. 当Debe开云体育官方注册网址zium开始从新捕捉流表可以使用旧的下降sys.sp_cdc_disable_table存储过程的参数@capture_instance将旧的捕获实例名

热模式更新有一个缺点。数据库模式之间有一段时间更新和创建新的捕获实例。开云体育电动老虎机所有更改,会在此期间将被老旧结构实例。例如这意味着对于新添加的列事件产生任何变化在此期间将不包含一个字段的新列。如果您的应用程序不会容忍这样一个过渡时期我们建议遵循冷模式更新。

例子

让我们部署基于SQL Server开云体育官方注册网址Debezium教程证明热模式更新。一个列phone_number将被添加到客户表。

#启动数据库壳docke开云体育电动老虎机r-compose - f docker-compose-sqlserver。yaml exec bash状态"置疑" - c ' / opt / mssql-tools / bin / sqlcmd - u sa - p $ testDB SA_PASSWORD - d '
——修改源表模式改变表客户添加phone_number VARCHAR (32);——创建一个新的捕获实例执行系统。sp_cdc_enable_table @source_schema = ' dbo ' @source_name =客户,@role_name = NULL, @supports_net_changes = 0, @capture_instance =“dbo_customers_v2”;——插入新数据插入客户(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”}…“后”:{" id ": 1005年,“first_name”:“约翰”,“last_name”:“母鹿”、“电子邮件”:“john.doe@example.com”,“phone_number”:“+ 1-555-123456”},
——原捕获实例执行系统。sp_cdc_disable_table @source_schema = ' dbo ' @source_name = dbo_customers, @capture_instance =“dbo_customers”;去

数据类型

如上所述,SQL Server连接器代表了变化与事件行结构如存在的表行。事件的每一列都包含一个字段值,和如何表示如果这个值取决于SQL数据类型的列。本节描述这种映射。

下表描述了连接器的每个SQL Server数据类型映射到一个文字类型语义类型在事件”字段。在这里,文字类型描述如何使用所代表的价值就是卡夫卡连接模式类型,即INT8,INT16,INT32,INT64,FLOAT32,FLOAT64,布尔,字符串,字节,数组,地图,结构体。的语义类型描述了卡夫卡如何连接模式了意义使用的名称的字段卡夫卡连接模式。

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 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

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

时间戳值

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

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

十进制值

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

数字((P (S)))

字节

org.apache.kafka.connect.data.Decimal

规模模式参数包含一个整数代表多少小数点位数转移。的connect.decimal.precision模式参数包含一个整数代表给定的十进制值的精度。

小数((P (S)))

字节

org.apache.kafka.connect.data.Decimal

规模模式参数包含一个整数代表多少小数点位数转移。的connect.decimal.precision模式参数包含一个整数代表给定的十进制值的精度。

SMALLMONEY

字节

org.apache.kafka.connect.data.Decimal

规模模式参数包含一个整数代表多少小数点位数转移。的connect.decimal.precision模式参数包含一个整数代表给定的十进制值的精度。

字节

org.apache.kafka.connect.data.Decimal

规模模式参数包含一个整数代表多少小数点位数转移。的connect.decimal.precision模式参数包含一个整数代表给定的十进制值的精度。

部署一个连接器

如果你已经安装了动物园管理员,卡夫卡,卡夫卡连接,那么使用Debezium开云体育官方注册网址 SQL Server的连接器是容易的。简单地下载连接器的插件存档提取罐到卡夫卡连接环境中,并添加jar文件的目录卡夫卡连接的类路径中。重新启动卡夫卡连接过程去接新罐。

如果你不变的容器,然后检查开云体育官方注册网址Debezium码头工人的图片动物园管理员、卡夫卡和卡夫卡与SQL Server连接器已经预装和准备好了。你甚至可以上运行D开云体育官方注册网址ebezium OpenShift

使用连接器生产更改事件为特定的SQL Server数据库或集群:开云体育电动老虎机

  1. 启用SQL服务器上疾病预防控制中心发布疾病预防控制中心数据库中的事件开云体育电动老虎机

  2. 创建一个SQL服务器的配置文件连接器并使用卡夫卡REST API连接添加连接器卡夫卡连接集群。

连接器启动时,它会抓住一个一致的快照模式的SQL Server数据库并开始流变化,生产活动为每一个插入、更新和删除行。开云体育电动老虎机你也可以选择生产活动模式和表的一个子集。选择忽略,面具,或截断列敏感,太大,或不需要。

示例配置

使用SQL Server连接器很简单。这是配置的一个示例连接器实例监控192.168.99.100 SQL Server服务器端口3306,我们逻辑上的名字fullfillment:

{" name ": " inventory-connector”,(1)“配置”:{“连接器。class": "io.debezium.connector.sqlserver.SqlServerConnector",(2)“开云体育电动老虎机数据库。主机名”:“192.168.99.100”,(3)“开云体育电动老虎机数据库。港”:“1433”,(4)“开云体育电动老虎机数据库。user": "sa",(5)“开云体育电动老虎机数据库。密码”:“密码!”(6)“开云体育电动老虎机数据库。dbname": "testDB",(7):开云体育电动老虎机“database.server.name fullfillment”,(8)”表。白名单”:“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语句编写和恢复。这个话题是仅供内部使用,不应被消费者使用。

看到连接器属性的完整列表在这些配置可以指定。

这个配置可以通过POST发送到运行卡夫卡连接服务,然后记录配置并启动一个连接器任务连接到SQL Server数据库,读取事务日志和记录事件卡夫卡的话题。开云体育电动老虎机

监控

卡夫卡、饲养员和卡夫卡都有联系内置支持JMX指标。SQL Server连接器还发布了一组标准的连接器的活动可以通过JMX监控。连接器有两种类型的指标。快照指标帮助您监控快照活动和可用连接器时执行一个快照。流指标帮助您监控进展和活动连接器读取CDC表数据。

快照指标

MBean: 开云体育官方注册网址debezium.sql_server: type = connector-metrics上下文=快照,server =<开云体育电动老虎机 database.server.name >
属性名称 类型 描述

LastEvent

字符串

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

MilliSecondsSinceLastEvent

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

TotalNumberOfEventsSeen

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

NumberOfEventsFiltered

事件的数量已经被白名单或黑名单过滤规则过滤配置连接器。

MonitoredTables

string []

表的列表所监控的连接器。

QueueTotalCapcity

int

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

QueueRemainingCapcity

int

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

TotalTableCount

int

表的总数被包含在快照。

RemainingTableCount

int

表的数量尚未复制快照。

SnapshotRunning

布尔

快照是否开始。

SnapshotAborted

布尔

快照是否中止。

SnapshotCompleted

布尔

快照是否完成。

SnapshotDurationInSeconds

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

RowsScanned

Map < String,长>

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

流指标

MBean: 开云体育官方注册网址debezium.sql_server: type = connector-metrics、上下文=流媒体服务器=<开云体育电动老虎机 database.server.name >
属性名称 类型 描述

LastEvent

字符串

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

MilliSecondsSinceLastEvent

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

TotalNumberOfEventsSeen

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

NumberOfEventsFiltered

事件的数量已经被白名单或黑名单过滤规则过滤配置连接器。

MonitoredTables

string []

表的列表所监控的连接器。

QueueTotalCapcity

int

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

QueueRemainingCapcity

int

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

连接

布尔

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

MilliSecondsBehindSource

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

NumberOfCommittedTransactions

处理事务的数量。

SourceEventPosition

map < string, string >

去年收到事件的坐标。

LastTransactionId

字符串

事务标识符的处理事务。

模式历史指标

MBean: 开云体育官方注册网址debezium.sql_server: type = connector-metrics、上下文= schema-history, server =<开云体育电动老虎机 database.server.name >
属性名称 类型 描述

状态

字符串

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

RecoveryStartTime

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

ChangesRecovered

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

ChangesApplied

模式变化之间的总数在复苏和运行时。

MilliSecondsSinceLastRecoveredChange

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

MilliSecondsSinceLastAppliedChange

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

LastRecoveredChange

字符串

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

LastAppliedChange

字符串

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

连接器属性

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

财产 默认的 描述

的名字

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

connector.class

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

tasks.max

1

的最大数量的任务应该创建连接器。SQL Server连接器总是使用一个单一的任务,因此不使用这个值,所以默认总是可以接受的。

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

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

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

1433年

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

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

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

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

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

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

SQL Server数据库的名称来流的变化开云体育电动老虎机

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

逻辑名,识别和提供了一个名称空间特定的SQL Server数据库服务器被监视。开云体育电动老虎机逻辑名称应该是唯一的在所有其他连接器,因为它被用作前缀为所有卡夫卡主题名称来自这个连接器。

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

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

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

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

table.whitelist

一个可选的以逗号分隔的正则表达式匹配完全限定表标识符表监控;任何表不包含在白名单将被排除在监视。每个标识符的形式schemaName的表。默认情况下,连接器将监控每一个非系统的表在每个监控模式。不得使用吗table.blacklist

table.blacklist

一个可选的以逗号分隔的正则表达式匹配完全限定表标识符表被排除在监控;任何表不包含在黑名单将被监控。每个标识符的形式schemaName的表。不得使用吗table.whitelist

column.blacklist

空字符串

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

tombstones.on.delete
0.10.0后来

真正的

控制一个墓碑事件是否应该删除后生成的事件。
真正的删除操作是由删除事件和随后的墓碑事件。当只发送一个删除事件。
发射墓碑事件(默认行为)允许卡夫卡完全删除所有事件属于给定关键一旦被删除原始记录。

column.propagate.source.type

n /一个

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

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

财产 默认的 描述

snapshot.mode

最初的

在初始快照模式的结构和可选地捕捉到表的数据。支持的值最初的(将捕获的表结构和数据的快照;有用的主题应该填充的完整表示)和捕获的数据表initial_schema_only(将快照捕获的结构表;有用如果变化从现在起应该传播到主题)。快照完成后,连接器将继续阅读改变事件从数据库的重做日志。开云体育电动老虎机

snapshot.isolation.mode

repeatable_read

使用模式来控制事务隔离级别和多久连接器锁监控表。有四个可能的值read_uncommitted,repeatable_read,快照,独家

repeatable_read在这种模式下连接器将使用专用锁只在模式快照。

read_uncommitted在这种模式下表和行级锁,但是连接器并不能保证快照一致性。

快照在这种模式下连接器运行初始快照,快照隔离级别,保证快照一致性。此外,表和行级锁。

独家在这种模式下连接器拥有互斥型锁(因此可以防止任何读取和更新)在整个快照监视的所有表的持续时间。

poll.interval.ms

1000年

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

max.queue.size

8192年

正整数的值指定的阻塞队列的最大大小改变事件从数据库读取日志放置之前写入卡夫卡。开云体育电动老虎机这个队列可以为CDC表读者提供反压力时,例如,写入卡夫卡是慢或者卡夫卡是不可用的。事件出现在队列中不包括补偿定期记录下这个连接器。默认为8192,应该超过规定的最大批量大小max.batch.size财产。

max.batch.size

2048年

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

heartbeat.interval.ms

0

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

heartbeat.topics.prefix

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

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

snapshot.delay.ms
0.9.0后来

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

snapshot.fetch.size
0.9.5后来

2000年

指定的最大行数应该读入一个从每个表而拍摄快照。连接器将读取表内容在多个批次的大小。默认为2000。

snapshot.select.statement.overrides
0.10.0后来

控制行从表将包含在快照。
这个属性包含一个以逗号分隔的完全限定表(SCHEMA_NAME.TABLE_NAME)。Select语句的个体进一步配置属性中指定的表,一个用于每个表,确定的idsnapshot.select.statement.overrides。[SCHEMA_NAME] [TABLE_NAME]。。这些属性的值时所使用的SELECT语句从特定的表中检索数据快照。可能的用例大扩展表设置一个特定的点开始(简历)快照,如果前一个快照被人打断了。
请注意:此设置只影响快照。事件期间捕获日志阅读不受它的影响。

source.struct.version
0.10及以后

v2

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

连接器还支持直通配置属性在创建使用卡夫卡生产国和消费国。具体地说,所有从连接器配置属性开云体育电动老虎机database.history.producer。使用前缀(没有前缀)创建卡夫卡生产商时,写入数据库的历史,和所有那些从前缀开始开云体育电动老虎机开云体育电动老虎机database.history.consumer。(不使用前缀)创建卡夫卡消费者时,读取数据库历史启动连接器。开云体育电动老虎机

例如,可以使用以下连接器配置属性安全连接到卡夫卡代理:

除了直通卡夫卡生产国和消费国,属性入手开云体育电动老虎机数据库。,如。开云体育电动老虎机database.applicationName 开云体育官方注册网址= debezium被传递到JDBC URL。

开云体育电动老虎机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

一定要查阅卡夫卡的文档所有配置属性对卡夫卡的生产者和消费者。(SQL Server连接器使用新的消费者。)