SQL Server CDC 客户端
支持的管道类型:
|
使用 SQL 服务器 CDC 客户端源从 CDC 表生成记录。若要从微软 SQL 服务器更改跟踪表中读取数据,请使用 SQL 服务器更改跟踪源。有关 CDC 和更改跟踪数据之间的差异的详细信息,请参阅 Microsoft SQL 服务器文档。
SQL 服务器 CDC 客户端源在记录标头属性中包含 CRUD 操作类型,因此启用了 CRUD 的目标可以轻松处理生成的记录。有关数据收集器更改数据处理的概述以及启用了 CRUD 的目标的列表,请参阅处理已更改的数据。
您可以使用此源来执行数据库复制。您可以将单独的管道与 JDBC 查询使用者或 JDBC 多表使用者源结合使用,以读取现有数据。然后,使用 SQL Server CDC 客户端源启动管道以处理后续更改。
配置源时,请指定 SQL Server 捕获实例名称 - 源处理相关的 CDC 表。可以定义同一数据库中的表组以及要使用的任何初始偏移量。省略初始偏移量时,原点将处理 CDC 表中的所有可用数据。
您可以启用延迟表处理,以允许源处理管道启动后出现的表。您还可以配置源以检查已处理表中的架构更改,并在发现更改后生成事件。
要确定源连接到数据库的方式,请指定连接信息、查询间隔、重试次数以及所需的任何定制 JDBC 配置属性。 您可以配置高级连接属性。要使用早于 4.0 的 JDBC 版本,请指定驱动程序类名并定义运行状况检查查询。
源可以为事件流生成事件。有关数据流触发器和事件框架的详细信息,请参阅数据流触发器概述。
安装 JDBC 驱动程序
在使用 SQL 服务器 CDC 客户端源之前,请为数据库安装 JDBC 驱动程序。在安装所需的驱动程序之前,您无法访问数据库。
有关安装其他驱动程序的信息,请参阅安装外部库。
支持的操作
SQL 服务器 CDC 客户端源支持 SQL 服务器插入和删除操作。在更新操作之后捕获的更新被视为更新,在更新操作之前捕获的更新被视为不受支持的操作。
时间窗口
SQL 服务器 CDC 客户端源从时间窗口中的表中提取更改。默认情况下,源在一个时间窗口中获取更改,从上次提交的偏移量开始,以最新数据结束。当您有大量数据时,可以通过配置多个时间窗口来提高性能。
若要配置多个时间窗口,请将“最大事务长度”属性设置为所需的时间窗口的所需大小。第一个时间窗口从初始偏移量或上次保存的偏移量开始,并在指定的秒数后结束。下一个窗口从上一个窗口结束的位置开始,并在指定的秒数后结束,依此类推。在每个时间范围内,源会根据批处理设置创建批处理。
启用事件生成后,即使后续时间窗口仍保留以供处理,源也会在每个时间窗口结束时生成无更多数据事件。
当在首次时间窗口期间没有更改时,预览数据不会显示任何值。
多线程处理
SQL Server CDC 客户端源执行并行处理,并允许创建多线程管道。
启动管道时,SQL Server CDC 客户端源将检索与表配置中定义的源表关联的 CDC 表的列表。然后,源根据“线程数”属性使用多个并发线程。每个线程从单个表中读取数据。
在管道运行时,每个线程都连接到源系统,创建一批数据,并将该批数据传递给可用的管道运行程序。管道运行程序是无源管道实例 - 管道的实例,包括管道中的所有处理器和目标,并在源之后执行所有管道处理。
每个管道运行程序一次处理一个批处理,就像在单个线程上运行的管道一样。当数据流变慢时,管道运行器会闲置等待,直到需要它们,并定期生成一个空批处理。可以配置“运行器空闲时间”管道属性以指定间隔或选择退出空批处理生成。
多线程管道保留每个批处理中的记录顺序,就像单线程管道一样。但是,由于批处理由不同的管道运行程序处理,因此无法确保将批处理写入目标的顺序。
有关多线程管道的更多信息,请参见多线程管道概述。
例
假设您正在阅读10张表格。将“线程数”属性设置为 5,将“最大池大小”属性设置为 6。启动管道时,源将检索表列表。然后,源创建五个线程以从前五个表中读取,默认情况下,数据收集器将创建匹配数量的管道运行程序。接收到数据后,线程将一个批处理传递给每个管道运行器进行处理。
在任何给定时刻,五个管道运行程序可以分别处理一个批处理,因此此多线程管道一次最多可以处理五个批处理。当传入数据变慢时,管道运行程序将处于空闲状态,一旦数据流增加,就可以使用。
批处理策略
每个源线程从单个表创建一批数据。您可以定义线程用于创建每个批处理的以下策略之一:
处理表中的所有可用行
每个线程从一个表创建多个批次的数据,直到从该表中读取所有可用行。线程对从表创建的所有批处理运行一个 SQL 查询。然后,线程切换到下一个可用表,运行另一个 SQL 查询以读取该表中的所有可用行。
例如,假设源的批大小设置为 100。源配置为使用两个并发线程并从四个表中读取,每个表包含 1,000 行。第一个线程运行一个 SQL 查询,从 table1 创建 10 个批次,每个批次 100 行,而第二个线程使用相同的策略从 table2 读取数据。完全读取表 1 和表 2 后,线程将切换到表 3 和表 4 并完成相同的过程。当第一个线程完成对 table3 的读取时,该线程将切换回下一个可用表,以从上次保存的偏移量中读取所有可用数据。
交换表
每个线程根据“结果集中的批处理”属性从一个表创建一组批处理,然后切换到下一个可用表以创建下一组批处理。线程运行初始 SQL 查询以从表中创建第一组批处理。数据库将结果集中的其余行缓存在数据库中,以便同一线程再次访问,然后该线程切换到下一个可用表。在以下情况下可以使用一个表:- 该表没有打开的结果集缓存。在这种情况下,线程运行初始 SQL 查询以创建第一个批处理,缓存数据库中结果集中的其余行。
- 该表具有由同一线程创建的打开的结果集缓存。在这种情况下,线程从数据库中的结果集缓存创建批处理,而不是运行另一个 SQL 查询。
当表具有由另一个线程创建的打开的结果集缓存时,该表不可用。在结果集关闭之前,任何其他线程都无法从该表中读取数据。
配置切换表策略时,请定义结果集缓存大小以及线程可以从结果集创建的批数。线程创建配置的批处理数后,数据库将关闭结果集,然后其他线程可以从表中读取。
例如,假设源的批大小设置为 100。源配置为使用两个并发线程并从四个表中读取,每个表包含 10,000 行。将结果集缓存大小设置为 500,并将从结果集中读取的批数设置为 5。
线程 1 对表 1 运行 SQL 查询,该查询返回所有 10,000 行。线程在读取前 100 行时创建一个批处理。接下来的 400 行将作为结果集缓存在数据库中。由于 thread2 同样处理表 2,因此 thread1 切换到下一个可用表 table3,并重复相同的过程。从 table3 创建批处理后,thread1 将切换回 table1,并从它以前在数据库中缓存的结果集中检索下一批行。
在 thread1 使用 table1 的结果集缓存创建五个批处理后,数据库将关闭结果集缓存。Thread1 切换到下一个可用表。另一个线程运行 SQL 查询以从 table1 中读取其他行,从上次保存的偏移量开始。
表配置
配置 SQL 服务器 CDC 客户端时,可以使用一组表配置属性定义多个 CDC 表。您还可以定义多个表配置来处理多组 CDC 表。
捕