开云体育官方注册网址为PostgreSQL Debezium连接器
Debe开云体育官方注册网址zium PostgreSQL连接器捕获一个PostgreSQL数据库行级模式的变化。开云体育电动老虎机PostgreSQL的信息版本兼容的连接器,看到开云体育官方注册网址Debezium释放概述。
第一次连接到一个PostgreSQL服务器或集群,连接器需要一致的快照的所有模式。快照完成之后,连接器不断捕捉行级变化,插入、更新和删除数据库内容和致力于一个PostgreSQL数据库。开云体育电动老虎机连接器生成数据更改事件记录和小溪卡夫卡的话题。为每个表,默认行为是连接器流所有生成的事件到一个单独的卡夫卡主题表。应用程序和服务消费主题的数据更改事件记录。
概述
PostgreSQL连接器包含两个主要部分,共同努力,读取和处理数据库更改:开云体育电动老虎机
一个逻辑解码输出插件。你可能需要安装插件,您选择使用的输出。您必须配置一个复制槽使用你选择的输出插件在运行PostgreSQL服务器之前。这个插件可以是下列之一:
decoderbufs
基于Protobuf Debezium社区和维护。开云体育官方注册网址pgoutput
是标准的逻辑在PostgreSQL 10 +解码输出插件。它是由PostgreSQL社区维护,使用PostgreSQL本身逻辑复制。这个插件总是存在不需要安装额外的库。Debe开云体育官方注册网址zium连接器解释原始复制事件流直接进入更改事件。
Java代码(实际卡夫卡连接连接器),读取变化产生的选择逻辑解码输出插件。它使用PostgreSQL的流复制协议,通过PostgreSQLJDBC驱动程序
连接器生成一个更改事件对于每一行级插入、更新和删除操作,被捕并发送更改事件记录为每个表在一个单独的卡夫卡的话题。客户端应用程序读卡夫卡的主题对应于感兴趣的数据库表,并可以对每个行级事件他们收到这些话题。开云体育电动老虎机
PostgreSQL正常清洗写前日志(细胞膜)一段时间后段。这意味着所有的连接器没有完整的历史变化,已经到数据库。开云体育电动老虎机因此,当第一PostgreSQL连接器连接到一个特定的PostgreSQL数据库,它开始执行开云体育电动老虎机一致的快照每个数据库的模式。开云体育电动老虎机连接器完成后快照,它继续流变化的确切点快照。这种方式,连接器从所有的数据都是一致的,不忽略任何变化所做快照时被采取。
连接器是失败的宽容。随着连接器读取的变化和产生的事件,每个事件记录犯下的位置。如果连接器停止任何理由(包括通信失败,网络问题,或崩溃),在重新启动连接器继续阅读WAL它去年离开。这包括快照。如果连接器停止在一个快照,连接器开始一个新的快照时重新启动。
连接器依赖和反映了PostgreSQL逻辑解码功能,它具有以下限制:
当事情出错的行为描述什么连接器时,是一个问题。 |
开云体育官方注册网址Debezium目前仅支持数据库与u开云体育电动老虎机tf - 8字符编码。用一个字节字符编码,不可能正确流程包含扩展的ASCII码字符的字符串。 |
连接器是如何工作的
优化配置并运行一个Debezium PostgreSQL连接器,它开云体育官方注册网址有助于了解连接器执行快照,流改变事件,决定了卡夫卡主题名称,并使用元数据。
安全
使用Debezium连开云体育官方注册网址接器流变化从一个PostgreSQL数据库,数据库中的连接器必须与特定的操作权限。开云体育电动老虎机尽管格兰特的一个方法是为用户提供必要的特权超级用户
特权,这样做可能使您的PostgreSQL数据未经授权的访问。而不是给予过度特权Debezium用户,最好创建一个专用Debezium复制用户你授予特定的特权。开云体育官方注册网址
更多信息关于Debezium PostgreSQL用户配置权限,明白了开云体育官方注册网址设置权限。PostgreSQL逻辑复制安全的更多信息,见PostgreSQL的文档。
快照
大多数PostgreSQL服务器配置为不保留的数据库的完整历史WAL段。开云体育电动老虎机这意味着PostgreSQL连接器将无法看到整个数据库通过阅读只有犯下的历史。开云体育电动老虎机因此,连接器第一次启动时,它执行一个初始一致的快照的数据库。开云体育电动老虎机默认行为执行快照由以下步骤组成。通过设置你可以改变这一行为snapshot.mode
连接器配置属性以外的一个值最初的
。
开始一个事务可序列化的,只读,可延期的隔离级别,以确保后续读取该事务对单个版本的数据一致。由于随后的任何更改的数据
插入
,更新
,删除
被其他客户操作这个交易是不可见的。读取当前位置在服务器的事务日志。
扫描数据库表和模式开云体育电动老虎机,生成一个
读
事件为每一行和写事件到适当的table-specific卡夫卡的话题。提交事务。
记录的快照的成功完成连接器补偿。
如果连接失败,重新平衡,或停止后第一步开始但是在第五步完成后,在重新启动连接器开始一个新的快照。连接器完成后其初始快照,PostgreSQL连接器继续流的位置在步骤2中阅读。这将确保连接器没有错过任何更新。如果连接器停止再因为任何原因,在重新启动后,连接器继续流从它之前离开的地方。
选项 | 描述 |
---|---|
|
连接器总是当它开始执行一个快照。快照完成之后,连接器持续流从步骤3在上面的序列。这种模式在这些情况下是有用的:
|
|
连接器不执行快照。当连接器配置这种方式,它的行为当它开始如下。如果有以前存储的LSN卡夫卡抵消话题,连接器持续流从那个位置变化。如果没有LSN存储,连接器开始流变化时的时间点PostgreSQL服务器上创建逻辑复制槽。的 |
|
连接器执行数据库快照和停止在流任何更改事件记录。开云体育电动老虎机如果连接器已经开始,但没有完成一个快照停止之前,连接器重启快照过程和停止当快照完成。 |
|
弃用,所有的模式都是无锁的。 |
|
的 |
特别的快照
默认情况下,一个连接器运行初始快照操作之后才开始第一次。这个初始快照后,在正常情况下,连接器不重复快照过程。未来的任何更改事件的数据连接器捕捉只通过流过程。
然而,在某些情况下获得的数据连接器在初始快照可能变得陈旧,丢失,或不完整的。为重新夺回表数据提供一种机制,Debezium包括一个选项来执行特定的快照。开云体育官方注册网址以下更改数据库中可能导致执行一个特设快照:开云体育电动老虎机
连接器配置修改捕获一组不同的表。
卡夫卡主题删除,必须重建。
数据损坏发生由于配置错误或者其他问题。
你可以重新运行你的快照表之前启动一个所谓的捕获快照特别的快照。特别的快照的使用要求信号表。你发起一个特设快照通过发送一个信号请求Debezium信号表。开云体育官方注册网址
当你启动一个特设现有表的快照,连接器附加内容的主题已经存在的表。如果以前现有主题是移除,Debezium可以自动创建一个主题开云体育官方注册网址自动主题创建启用。
特设快照信号中包含指定表快照。快照可以捕捉数据库的全部内容,或者只捕获数据库中的表的一个子集。开云体育电动老虎机此外,快照可以捕获的一个子集表的内容(s)在数据库中。开云体育电动老虎机
您指定的表来捕获通过发送一个execute-snapshot
信息信号表。设置的类型execute-snapshot
信号增量
,并提供表的名称中包含快照,下表中描述:
场 | 默认的 | 价值 |
---|---|---|
|
|
指定类型的快照,你想要运行。 |
|
N /一个 |
一个数组,其中包含正则表达式匹配表的完全限定名称快照。 |
|
N /一个 |
一个可选的字符串,它指定一个条件基于表的列(s) (s),捕获的内容表的一个子集(年代)。 |
你发起一个特设的快照通过添加一个条目execute-snapshot
信号类型的信号表。连接器处理消息之后,它开始快照操作。快照过程读取第一个和最后一个主键值,并使用这些值为每个表的开始和结束点。根据表中的条目的数量,和配置的块大小,Debezium把表分成块,每个块和收益快照,在继承,一次一个。开云体育官方注册网址
增量快照
快照管理上提供了很大的灵活性,Debezium包括补充快照机制,称为开云体育官方注册网址增量快照。增量快照依靠Debezium机制开云体育官方注册网址Debezium连接器发送信号开云体育官方注册网址。基于增量快照DDD-3设计文档。
在增量快照,而不是捕捉数据库的完整状态,在一个初始快照,Debezium捕捉每个表的阶段,在一系列的配置块。开云体育官方注册网址开云体育电动老虎机你可以指定表的快照捕获和每个数据块的大小。块大小确定的行数的快照收集在每个提取操作数据库。开云体育电动老虎机默认增量快照1 KB的块大小。
作为一个增量快照,Debezium使用水印追踪其进展,保持每个表的记录行,开云体育官方注册网址它捕获。分阶段方法捕获数据提供了以下优势标准初始快照过程:
您可以运行增量快照与流数据获取,而不是推迟直到快照完成流媒体。连接器继续捕获实时事件从快照过程中更改日志,也操作模块。
如果中断增量快照的进步,你可以恢复它而不会丢失任何数据。流程简历后,快照开始时它不禁停了下来,而不是重新夺回表从一开始。
您可以运行一个增量快照随时点播,并根据需要重复这个过程适应数据库更新。开云体育电动老虎机例如,您可以重新运行快照后修改连接器配置向其添加一个表
table.include.list
财产。
当您运行一个增量快照,Debezium每个表的主键,然后将表格分为块的基础上开云体育官方注册网址配置块大小。块的块,然后捕获块中的每个表行。对于每一行,它捕获快照发出读
事件。事件所代表的价值当块的快照开始的行。
快照收益,其他进程的继续访问数据库,可能修改表记录。开云体育电动老虎机反映这种变化,插入
,更新
,或删除
操作是致力于按平常的事务日志。同样,持续Debezium流过程继续检测这些事开云体育官方注册网址件并发出相应的改变事件记录卡夫卡。
在某些情况下,更新
或删除
收到的事件流过程排放的序列。即流过程可能会发出一个事件,修改一个表行之前快照捕获块包含读
事件这一行。当最终发出相应的快照读
行活动,其价值已经取代了。以确保增量快照事件到达的顺序处理正确的逻辑顺序,Debezium采用缓冲方案解决冲突。开云体育官方注册网址只有在快照之间的碰撞事件和事件流解析对卡夫卡Debezium发出一个事件记录。开云体育官方注册网址
协助解决后面到达之间的碰撞读
事件和事件流,修改相同的表行,Debezium雇佣了一个所谓的开云体育官方注册网址快照窗口。快照windows的划定了间隔期间增量快照捕获一个指定表数据块。在一块的快照窗口打开之前,Debezium遵循其一贯的行为和直接从事务日志发出事件下游目标卡开云体育官方注册网址夫卡的话题。但从特定块快照打开,直到关闭,Debezium执行重复数据删除步骤解决之间的碰撞事件具有相同的主键. .开云体育官方注册网址
对于每个数据收集,Debezium发出两种类型的事件,并存储开云体育官方注册网址记录它们在单个目的地卡夫卡的话题。它捕获快照记录直接从表发出读
操作。与此同时,随着用户继续更新记录的数据收集,和事务日志更新以反映每一个提交,Debezium发出开云体育官方注册网址更新
或删除
为每个变更操作。
快照窗口打开,Debezium开始处理一块快照,它提供了快照记录到内开云体育官方注册网址存缓冲区。在快照windows,主键的读
事件缓冲比较传入流的主键事件。如果没有发现匹配,直接发送到卡夫卡流事件记录。如果D开云体育官方注册网址ebezium检测到一个匹配,它丢弃缓冲读
事件,并将流记录写入目标主题,因为流事件逻辑取代静态快照事件。块的快照窗口关闭后,缓冲区只包含读
事件相关的事务日志事件存在。开云体育官方注册网址Debezium发出这些剩余读
事件表的卡夫卡的话题。
连接器为每个快照块重复这个过程。
Post开云体育官方注册网址greSQL的Debezium连接器不支持增量快照运行时模式变化。如果一个模式改变之前但增量快照开始后发送信号然后透传配置选项 |
触发一个增量快照
目前,启动增量快照的唯一方法是发送一个特设快照信号源数据库上的信号表。开云体育电动老虎机你提交一个信号信号表的SQL插入
查询。
后Debez开云体育官方注册网址ium检测信号的变化表,它读取信号,请求的快照操作运行。
你提交的查询中包含指定表快照,而且,还指定了快照的操作。目前,快照操作的唯一有效的选项是默认值,增量
。
中包括指定表快照,提供一个数据收集
数组列表的表或数组正则表达式用于匹配表,例如,{“数据收集”:["。MyFirstTable”、“public.MySecondTable ")}
的数据收集
数组增量快照信号没有默认值。如果数据收集
数组为空,Debezium检测到开云体育官方注册网址不需要行动,不执行一个快照。
如果一个表的名称,你想要包含在一个快照包含一个点( |
启用信号。
一个信号数据采集存在于源数据库。开云体育电动老虎机
信号数据采集中指定
signal.data.collection
财产。
发出一个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
,类型
,数据
参数对应的命令信号表的字段。下表描述了参数的例子:
表3。描述字段的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 |
|
指定类型的快照操作运行。 |
2 |
|
指定事件类型。 |
停止一个增量快照
你也可以停止增量快照通过发送一个信号对源数据库表。开云体育电动老虎机你提交一个停止信号表快照通过发送一个SQL插入
查询。后Debez开云体育官方注册网址ium检测信号的变化表,它读取信号,停止增量快照操作如果是在进步。
你提交的查询指定快照的操作增量
,选择当前运行快照的表被删除。
启用信号。
一个信号数据采集存在于源数据库。开云体育电动老虎机
信号数据采集中指定
signal.data.collection
财产。
发出一个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
,类型
,数据
参数对应的信号命令信号表的字段。下表描述了参数的例子:
表4。描述字段的SQL命令发送停止信号到信号表增量快照 项 价值 描述 1
myschema.开云体育官方注册网址debezium_signal
指定完全限定名称的信号在源数据库表。开云体育电动老虎机
2
ad-hoc-1
的
id
参数指定一个任意字符串,指定的id
标识符的请求信号。
使用这个字符串来识别信号表中的日志消息条目。开云体育官方注册网址Debezium不使用这个字符串。3
stop-snapshot
指定
类型
参数指定的操作信号触发。4
数据收集
一个可选的组成部分
数据
领域的一个信号,指定表名数组或正则表达式匹配表名删除快照。
数组列表正则表达式匹配表的完全限定名称,使用相同的格式使用指定连接器的信号表的名称signal.data.collection
配置属性。如果该组件数据
省略字段,那么信号停止整个增量快照的进展。5
增量
一个必需的组成部分
数据
领域的一个信号,表明指定的快照操作停止。
目前,唯一有效的选项增量
。
如果你不指定一个类型
值时,信号无法停止增量快照。
定制的快照SPI
对于更高级的使用,你可以提供一个实现io.开云体育官方注册网址debezium.connector.postgresql.spi.Snapshotter
接口。这个接口允许控制的大多数方面的连接器如何执行快照。这包括是否快照,选择打开快照事务,以及是否带锁。
以下是完整的API的接口。所有内置快照模式实现这个接口。
/ * * *这个接口是用于确定细节快照过程:* *即:*——应该发生在一个快照* - *应该流发生快照查询应该使用什么* *虽然很多默认快照模式提供Debezium, *一个自定义的实现这个接口可以提供的实现者,*可以提供更高级的功能,比如部分快照。开云体育官方注册网址* *实现必须返回true要么{@link # shouldSnapshot()}或{@link # shouldStream()} *或适用于两者。* / @Incubating公共接口快照{空白init (PostgresConnectorConfig配置,OffsetState sourceInfo, SlotState SlotState);/ * * * @return真实如果快照应该采取快照* /布尔shouldSnapshot ();/ * * * @return真的如果快照应该流在拍摄快照* /布尔shouldStream ();/ * * * * @return真实如果流从一开始就应该恢复快照*交易,或假当连接器简历和快照,*流应该从哪里流之前离开的简历。* /违约布尔shouldStreamEventsStartingFromSnapshot(){返回true;}/ * * *生成一个有效的postgres指定表的查询字符串,或空{@link可选}*跳过这个表快照(但这表仍将流从)* * @param tableId表生成一个查询* @param snapshotSelectColumns列中使用快照选择基于列*包括/排除过滤器* @return有效的查询字符串,或没有跳过这个表快照* /可选<字符串> buildSnapshotQuery (tableId tableId,列表<字符串> snapshotSelectColumns);/ * * *返回一个新字符串,设置交易快照* * @param newSlotInfo如果快照创建一个新的慢,它包含的信息* ' create_replication_slot '命令* /默认字符串snapshotTransactionIsolationLevelStatement (SlotCreationResult newSlotInfo){/ /我们使用相同的隔离级别,pg_backup使用返回“设置事务隔离级别可序列化的,只读,可延期的,”;}/ * * *返回一个给定的锁表的SQL语句在快照,如果所需的特定的快照*实现。* /默认选<字符串> snapshotTableLockingStatement(锁超时时间,< TableId > tableIds){字符串lineSeparator = System.lineSeparator (); StringBuilder statements = new StringBuilder(); statements.append("SET lock_timeout = ").append(lockTimeout.toMillis()).append(";").append(lineSeparator); // we're locking in ACCESS SHARE MODE to avoid concurrent schema changes while we're taking the snapshot // this does not prevent writes to the table, but prevents changes to the table's schema.... // DBZ-298 Quoting name in case it has been quoted originally; it doesn't do harm if it hasn't been quoted tableIds.forEach(tableId -> statements.append("LOCK TABLE ") .append(tableId.toDoubleQuotedString()) .append(" IN ACCESS SHARE MODE;") .append(lineSeparator)); return Optional.of(statements.toString()); } /** * Lifecycle hook called once the snapshot phase is finished. */ default void snapshotCompleted() { // no operation } }
流的变化
PostgreSQL连接器通常花费大部分的时间流变化从PostgreSQL服务器连接。这种机制依赖于PostgreSQL的复制协议。这个协议使客户能够接收来自服务器的变化,因为他们承诺在特定位置服务器的事务日志,这被称为日志序列号(lsn)。
每当服务器提交一个事务,一个单独的服务器进程调用的回调函数逻辑解码插件。这个函数从交易过程的变化,把它们转换成特定格式(Protobuf或JSON的Debezium插件)和写在一个输出流,然后可以由客户使用。开云体育官方注册网址
Debe开云体育官方注册网址zium PostgreSQL连接器作为一个PostgreSQL客户机。当连接器收到它将事件转换成Debezium变化开云体育官方注册网址创建,更新,或删除事件,包括事件的LSN。PostgreSQL连接器将这些改变事件记录转发给卡夫卡连接框架,它是运行在同一进程中。卡夫卡连接过程异步写更改事件记录他们在同一顺序生成适当的卡夫卡的话题。
定期,卡夫卡连接最近的记录抵消在另一个卡夫卡的话题。数据源特定偏移量表示位置Debezium包括与每一个事件的信息。开云体育官方注册网址PostgreSQL连接器的LSN记录在每个变更事件是偏移量。
卡夫卡优雅地连接关闭时,它停止的连接器,卡夫卡将所有事件记录,记录最后抵消收到每个连接器。卡夫卡连接重新启动时,它读取最后一个记录的偏移量为每个连接器,并开始每个连接器的最后记录偏移量。连接器重新启动时,它发送一个请求到PostgreSQL服务器发送事件开始就在那个位置。
PostgreSQL连接器检索模式信息的一部分发送的事件逻辑解码插件。然而,连接器并不检索信息组成主键的列。从JDBC连接器获得这些信息的元数据(侧槽)。如果一个表的主键定义更改(通过添加、删除或重命名主键列),有一小段时间从JDBC主键信息不同步的更改事件逻辑解码插件生成。这个小期间,消息可以创建一个不一致的关键结构。为了防止这种不一致,更新主键结构如下:
|
PostgreSQL 10 +逻辑解码支持(pgoutput
)
PostgreSQL 10 +,有一个逻辑复制流模式,叫做pgoutput
本机支持PostgreSQL。这意味着Debezium Postg开云体育官方注册网址reSQL连接器可以使用复制流而不需要额外的插件。这是特别有价值的环境中安装的插件不支持或不允许的。
看到设置PostgreSQL为更多的细节。
主题名称
默认情况下,PostgreSQL连接器写更改事件插入
,更新
,删除
操作发生在一个表到一个Apache卡夫卡主题特定的表。连接器使用以下约定名称更改事件主题:
topicPrefix.schemaName.tableName
下面的列表提供了定义组件的默认名称:
- topicPrefix
-
这个话题作为指定的前缀
topic.prefix
配置属性。 - schemaName
-
数据库模式的名称更改事件的发生。开云体育电动老虎机
- 的表
-
数据库表的名称更改事件的发生。开云体育电动老虎机
例如,假设实现
逻辑服务器名称的配置连接器,捕捉PostgreSQL安装有变化吗postgres
开云体育电动老虎机数据库和一个库存
模式包含四个表:产品
,products_on_hand
,客户
,订单
。连接器将流记录这四个卡夫卡主题:
fulfillment.inventory.products
fulfillment.inventory.products_on_hand
fulfillment.inventory.customers
fulfillment.inventory.orders
现在假设表不属于一个特定的模式,但在默认创建的公共
PostgreSQL模式。卡夫卡的主题的名称是:
fulfillment.public.products
fulfillment.public.products_on_hand
fulfillment.public.customers
fulfillment.public.orders
连接器适用于类似的命名约定来标签事务元数据主题。
如果默认主题名称不符合您的需求,您可以配置自定义主题名称。配置自定义主题名称,您指定正则表达式在逻辑主题路由SMT。关于使用逻辑主题的更多信息路由SMT定制主题命名,明白了主题的路由。
事务的元数据
开云体育官方注册网址Debezium可以生成事件表示事务边界和丰富数据更改事件消息。
限制当Debezium接收事务开云体育官方注册网址的元数据
开云体育官方注册网址Debezium寄存器和接收元数据只对交易发生后部署连接器。交易发生之前部署连接器的元数据是不可用的。 |
对每一笔交易开始
和结束
De开云体育官方注册网址bezium生成一个事件,包含以下字段:
-
状态
-
开始
或结束
。 -
id
-
字符串表示独特的事务标识符组成的Postgres事务ID本身和LSN给定的操作由冒号分开,即格式
txID: LSN
。 -
ts_ms
-
一个事务边界事件的时间(
开始
或结束
事件)的数据源。如果数据源不提供Debezium事件时间,然后字段代表的时间而不是Deb开云体育官方注册网址ezium处理事件。 -
event_count
(结束
事件) -
事件的总数emmitted事务。
-
data_collections
(结束
事件) -
对的数组
data_collection
和event_count
元素表明事件连接器发出的数量变化,来源于一个数据收集。
{“状态”:“开始”,“id”:“571:53195829”、“ts_ms”: 1486500577125,“event_count”:空,“data_collections”:零}{“状态”:“结束”,“id”:“571:53195832”、“ts_ms”: 1486500577691,“event_count”: 2,“data_collections”: [{:“data_collection s1。”、“event_count”: 1}, {:“data_collection s2。”、“event_count”: 1}]}
除非通过覆盖topic.transaction
选择,交易事件写入主题命名< topic.prefix >
.transaction
。
当启用事务元数据的数据信息信封
富含是新的吗事务
字段。这个领域提供关于每一个事件的信息的形式复合的字段:
-
id
-
唯一的事务标识符的字符串表示。
-
total_order
-
事件在所有事件的绝对位置生成的事务。
-
data_collection_order
-
每个数据收集事件在所有事件的位置,发出的事务。
下面是一个例子的信息:
{“前”:零,“后”:{“pk”:“2”,“aa”:“1”},“源”:{…},“人事处”:“c”、“ts_ms”:“1580390884335”,“交易”:{" id ":“571:53195832”、“total_order”:“1”,“data_collection_order”: " 1 "}}
数据更改事件
Debe开云体育官方注册网址zium PostgreSQL连接器生成一个数据为每个行级更改事件插入
,更新
,删除
操作。每个事件都包含一个键和一个值。键和值的结构取决于表的改变。
开云体育官方注册网址Debezium和卡夫卡连接的设计连续的事件消息流。然而,这些事件的结构可能会改变随着时间的推移,可以让消费者难以处理。为了解决这个问题,每个事件包含模式的内容或,如果您正在使用一个模式注册表,一个模式ID,一个消费者可以使用从注册表获取模式。这使得每个事件自包含的。
下面的骨架JSON显示了更改事件的基本四个部分。然而,如何配置卡夫卡连接转换器,你选择在应用程序中使用的决定表示这四个部分的更改事件。一个模式
字段的更改事件只有当你配置转换器装出来的。同样,事件关键和事件有效负载的变化事件只有在你配置一个转换器装出来的。如果你使用JSON转换器配置它来生产所有四个基本事件部分改变,改变事件有一个结构:
{"模式":{(1)…},“有效载荷”:{(2)…},"模式":{(3)…},“有效载荷”:{(4)…}},
项 | 字段名 | 描述 |
---|---|---|
1 |
|
第一个 |
2 |
|
第一个 |
3 |
|
第二个 |
4 |
|
第二个 |
默认行为是连接器流改变事件记录主题名称和事件的原始表一样。
卡夫卡从卡夫卡0.10开始,可以记录事件的键和值时间戳的消息是由生产者(记录)或由卡夫卡写入到日志。 |
PostgreSQL连接器确保所有卡夫卡连接模式名坚持Avro模式名称格式。这意味着逻辑服务器名称必须开始用拉丁字母或下划线,也就是说,a - z、a - z,或_。每个剩余字符在逻辑服务器名称和每个字符在模式和表名必须是一个拉丁字母,数字,下划线,也就是说,a - z、a - z, 0 - 9,或\ _。如果有一个无效的字符替换为下划线字符。 这可能会导致意想不到的冲突如果逻辑服务器名称,模式名称,或一个表名称包含无效字符,和唯一的字符,区分名称从一个另一个无效,从而替换为下划线。 |
更改事件的钥匙
对于一个给定的表,更改事件的关键结构,每个都包含一个字段列在表的主键事件了。另外,如果表副本的身份
设置为完整的
或使用索引
为每一个独特的键约束有一个字段。
考虑一个客户
表中定义公共
开云体育电动老虎机数据库模式和改变事件的关键表的例子。
创建表的客户(id序列,first_name VARCHAR (255) NOT NULL, last_name VARCHAR (255) NOT NULL,电子邮件VARCHAR(255)而不是NULL,主键(id));
如果topic.prefix
连接器配置属性的值PostgreSQL_server
,每一个事件的变化客户
表虽然有这个定义有相同的关键结构,这在JSON是这样的:
{"模式":{(1)“类型”:“结构”、“名称”:“PostgreSQL_server.public.customers.Key”,(2)“可选”:假的,(3)“字段”:[(4){" name ": " id ", "指数":" 0 ","模式":{“类型”:“INT32”、“可选”:“false”}}},“有效载荷”:{(5)" id ": " 1 "}}
项 | 字段名 | 描述 |
---|---|---|
1 |
|
模式的关键部分指定了卡夫卡连接模式,描述了什么是关键的 |
2 |
|
的名字的结构模式,它定义了关键的负载。该模式描述表的主键的结构改变。关键模式名的格式connector-name。开云体育电动老虎机数据库名称。表名。
|
3 |
|
表明事件的键必须包含一个值 |
4 |
|
指定每个字段,预计 |
5 |
|
包含这一变化的关键行生成事件。在这个例子中,关键,包含一个单一的 |
虽然 |
如果表没有主键或唯一键,然后更改事件的关键是null。行表中没有主键或唯一键约束不能唯一标识。 |
更改事件值
改变的价值比的关键事件更复杂。像的关键,有价值模式
部分和一个有效载荷
部分。的模式
部分包含模式描述信封
的结构有效载荷
部分,包括其嵌套的字段。改变事件的操作创建、更新或删除数据有效载荷与信封结构都有一个值。
考虑相同的样本表用来显示的一个例子改变事件的关键:
创建表的客户(id序列,first_name VARCHAR (255) NOT NULL, last_name VARCHAR (255) NOT NULL,电子邮件VARCHAR(255)而不是NULL,主键(id));
改变活动的价值部分更改此表根据不同副本的身份
设置和操作的事件。
副本的身份
副本的身份是PostgreSQL-specific表级设置决定了可用的信息量的逻辑解码插件吗更新
和删除
事件。更具体地说,的设置副本的身份
控制信息(如果有的话)是用于前面的所涉及的表列的值,只要一个更新
或删除
事件发生时。
有4个可能的值副本的身份
:
默认的
——默认行为更新
和删除
事件包含前面的值为表的主键列,如果表有一个主键。对于一个更新
事件,只有改变值的主键列。如果一个表没有主键,连接器不排放
更新
或删除
事件表。没有主键的表,连接器只排放创建事件。通常,一个表没有主键用于附加信息表的结束,这意味着更新
和删除
事件并不是有用的。没有什么
——发射事件更新
和删除
操作不包含任何信息表列的前一个值。完整的
——发射事件更新
和删除
操作包含前面的表中的所有列的值。指数
索引名——发射事件更新
和删除
操作包含前面的值的列包含在指定的索引。更新
事件还包含更新的索引列的值。
创建事件
下面的例子显示了更改事件的价值部分的连接器生成创建数据的操作客户
表:
{"模式":{(1)“类型”:“结构”、“字段”:[{“类型”:“结构”、“字段”:[{“类型”:“int32”、“可选”:假的,“场”:“id”},{“类型”:“弦”、“可选”:假的,“场”:“first_name”},{“类型”:“弦”、“可选”:假的,“场”:“last_name”},{“类型”:“弦”、“可选”:假的,“场”:“电子邮件”}],“可选”:真的,“名字”:“PostgreSQL_server.inventory.customers.Value”,(2)“字段”:“之前”},{“类型”:“结构”、“字段”:[{“类型”:“int32”、“可选”:假的,“场”:“id”},{“类型”:“弦”、“可选”:假的,“场”:“first_name”},{“类型”:“弦”、“可选”:假的,“场”:“last_name”},{“类型”:“弦”、“可选”:假的,“场”:“电子邮件”}],“可选”:真的,“名字”:“PostgreSQL_server.inventory.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": "int64", "optional": true, "field": "txId" }, { "type": "int64", "optional": true, "field": "lsn" }, { "type": "int64", "optional": true, "field": "xmin" } ], "optional": false, "name": "io.debezium.connector.postgresql.Source",(3)“字段”:“源”},{“类型”:“弦”、“可选”:假的,“场”:“人事处”},{“类型”:“int64”、“可选”:真的,“场”:“ts_ms”}],“可选”:假的,“名字”:“PostgreSQL_server.inventory.customers.Envelope”(4)},“有效载荷”:{(5)“之前”:空,(6)"后":{(7)“id”: 1、“first_name”:“安妮”,“last_name”:“Kretchmar”、“电子邮件”:“annek@noanswer.org”},“源”:{(8)“版本”:“2.2.0。一个lpha2", "connector": "postgresql", "name": "PostgreSQL_server", "ts_ms": 1559033904863, "snapshot": true, "db": "postgres", "sequence": "[\"24023119\",\"24023128\"]", "schema": "public", "table": "customers", "txId": 555, "lsn": 24023128, "xmin": null }, "op": "c",(9)“ts_ms”: 1559033904863(10)}}
项 | 字段名 | 描述 | ||
---|---|---|---|---|
1 |
|
价值的模式,描述了价值的有效载荷的结构。更改事件的价值模式都是一样的在每一个更改事件的连接器生成一个特定的表。 |
||
2 |
|
在 |
||
3 |
|
|
||
4 |
|
|
||
5 |
|
价值的实际数据。这是改变事件提供的信息。 |
||
6 |
|
一个可选的字段指定事件发生之前的状态行。当
|
||
7 |
|
一个可选的字段指定事件发生后的状态行。在这个例子中, |
||
8 |
|
强制性字段描述了事件源的元数据。该字段包含信息,您可以使用它来比较这一事件与其他事件,关于事件的起源,事件发生的顺序,事件是否相同的事务的一部分。元数据来源包括:
|
||
9 |
|
强制性的描述类型的字符串操作导致连接器生成事件。在这个例子中,
|
||
10 |
|
可选字段显示的时间连接器处理事件。基于系统时钟的时间是在JVM中运行卡夫卡连接任务。 |
更新事件
更改事件的价值更新的样本客户
作为一个表有相同的模式创建事件表。同样,事件相同价值的有效载荷结构。然而,在一个事件有效负载价值包含不同的值更新事件。更改事件的一个例子是价值的事件连接器生成的一个更新客户
表:
{"模式":{…},“有效载荷”:{“前”:{(1)“id”: 1},“后”:{(2)“id”: 1、“first_name”:“安妮玛丽”、“last_name”:“Kretchmar”、“电子邮件”:“annek@noanswer.org”},“源”:{(3)“版本”:“2.2.0。一个lpha2", "connector": "postgresql", "name": "PostgreSQL_server", "ts_ms": 1559033904863, "snapshot": false, "db": "postgres", "schema": "public", "table": "customers", "txId": 556, "lsn": 24023128, "xmin": null }, "op": "u",(4)“ts_ms”: 1465584025523(5)}}
项 | 字段名 | 描述 |
---|---|---|
1 |
|
一个可选的字段,其中包含值在数据库提交前的行。开云体育电动老虎机在这个例子中,只有主键列, |
2 |
|
一个可选的字段指定事件发生后的状态行。在这个例子中, |
3 |
|
强制性字段描述了事件源的元数据。的
|
4 |
|
强制性的字符串描述操作的类型。在一个更新事件的价值, |
5 |
|
可选字段显示的时间连接器处理事件。基于系统时钟的时间是在JVM中运行卡夫卡连接任务。 |
更新列一行的主要/唯一键改变值的行键。当一个关键变化,Debezium输出开云体育官方注册网址三个事件: |
主键更新
一个更新
操作,连续变化的主键字段(s)被称为一个主键改变。一个主键变化发送一个更新
事件记录,连接器发送一个删除
旧的键和一个事件记录创建
新(更新)关键事件记录。这些事件通常的结构和内容,此外,每一个都有一个消息头与主键改变:
的
删除
事件记录__开云体育官方注册网址debezium.newkey
消息头。这个头的值是新更新的行的主键。的
创建
事件记录__开云体育官方注册网址debezium.oldkey
消息头。这个头的值是前(旧)主键更新的行。
删除事件
在一个值删除有相同的变化事件模式
部分为创建和更新事件以相同的表。的有效载荷
在一个部分删除事件为样本客户
表看起来像这样:
{"模式":{…},“有效载荷”:{“前”:{(1)“id”: 1},“后”:空,(2)“源”:{(3)“版本”:“2.2.0。一个lpha2", "connector": "postgresql", "name": "PostgreSQL_server", "ts_ms": 1559033904863, "snapshot": false, "db": "postgres", "schema": "public", "table": "customers", "txId": 556, "lsn": 46523128, "xmin": null }, "op": "d",(4)“ts_ms”: 1465581902461(5)}}
项 | 字段名 | 描述 |
---|---|---|
1 |
|
可选字段,指定事件发生之前的状态行。在一个删除事件的价值, |
2 |
|
可选字段,指定事件发生后的状态行。在一个删除事件的价值, |
3 |
|
强制性字段描述了事件源的元数据。在一个删除事件的价值,
|
4 |
|
强制性的字符串描述操作的类型。的 |
5 |
|
可选字段显示的时间连接器处理事件。基于系统时钟的时间是在JVM中运行卡夫卡连接任务。 |
一个删除更改事件记录为消费者提供了信息需要处理删除这一行。
消费者能够处理删除事件生成的表没有主键,设置表的 |
PostgreSQL事件连接器设计卡夫卡日志压实。日志压实使删除一些旧消息只要至少每个关键是保持最新的消息。这使卡夫卡回收存储空间同时确保主题包含一个完整的数据集,可用于重新加载密钥的状态。
当一行被删除的删除事件的价值仍然使用日志压实,因为卡夫卡之前删除所有消息可以拥有同样的关键。然而,对于卡夫卡删除所有消息,相同的密钥,必须的信息价值零
。使这一切成为可能,PostgreSQL连接器之前删除事件与一个特殊的墓碑上事件,但具有相同的关键零
价值。
截断事件
一个截断更改事件信号,表已被截断。消息键零
在这种情况下,消息值是这样的:
{"模式":{…},“有效载荷”:{“源”:{(1)“版本”:“2.2.0。一个lpha2", "connector": "postgresql", "name": "PostgreSQL_server", "ts_ms": 1559033904863, "snapshot": false, "db": "postgres", "schema": "public", "table": "customers", "txId": 556, "lsn": 46523128, "xmin": null }, "op": "t",(2)“ts_ms”: 1559033904961(3)}}
项 | 字段名 | 描述 |
---|---|---|
1 |
|
强制性字段描述了事件源的元数据。在一个截断事件的价值,
|
2 |
|
强制性的字符串描述操作的类型。的 |
3 |
|
可选字段显示的时间连接器处理事件。基于系统时钟的时间是在JVM中运行卡夫卡连接任务。 |
在一个单一的截断
声明适用于多个表,一个截断更改事件记录每个截断表将会发出。
注意,因为截断事件代表一个改变了整个表,没有消息键,除非你跟单个分区处理议题,没有订购担保相关的更改事件表(创建,更新等)截断事件表。例如一个消费者可能会接收到一个更新事件后截断事件表,当这些事件读取不同的分区。
消息事件
这个事件类型只支持通过 |
一个消息事件信号,一个通用的逻辑解码消息被直接插入WAL的通常pg_logical_emit_message
函数。消息是一个关键结构体
与单个字段命名前缀
在这种情况下,当插入消息指定的前缀。事务性消息的消息值是这样的:
{"模式":{…},“有效载荷”:{“源”:{(1)“版本”:“2.2.0。一个lpha2", "connector": "postgresql", "name": "PostgreSQL_server", "ts_ms": 1559033904863, "snapshot": false, "db": "postgres", "schema": "", "table": "", "txId": 556, "lsn": 46523128, "xmin": null }, "op": "m",(2)“ts_ms”: 1559033904961,(3)"信息":{(4)“前缀”:“foo”、“内容”:“Ymfy”}}}
不像其他事件类型,非事务性消息不会有任何关联开始
或结束
交易活动。事务性消息的消息值是这样的:
{"模式":{…},“有效载荷”:{“源”:{(1)“版本”:“2.2.0。一个lpha2", "connector": "postgresql", "name": "PostgreSQL_server", "ts_ms": 1559033904863, "snapshot": false, "db": "postgres", "schema": "", "table": "", "lsn": 46523128, "xmin": null }, "op": "m",(2)“ts_ms”: 1559033904961(3)"信息":{(4)“前缀”:“foo”、“内容”:“Ymfy}}
项 | 字段名 | 描述 |
---|---|---|
1 |
|
强制性字段描述了事件源的元数据。在一个消息事件的价值,
|
2 |
|
强制性的字符串描述操作的类型。的 |
3 |
|
可选字段显示的时间连接器处理事件。基于系统时钟的时间是在JVM中运行卡夫卡连接任务。 对于非事务性消息事件, |
4 |
|
字段包含消息的元数据
|
数据类型的映射
PostgreSQL连接器代表改变行等结构化事件存在的表行。事件的每一列都包含一个字段值。如何表示如果这个值取决于PostgreSQL数据类型的列。以下部分描述如何连接器PostgreSQL数据类型映射到一个文字类型和一个语义类型在事件字段。
文字类型描述如何使用卡夫卡连接模式类型所代表的值是:
INT8
,INT16
,INT32
,INT64
,FLOAT32
,FLOAT64
,布尔
,字符串
,字节
,数组
,地图
,结构体
。语义类型描述了卡夫卡如何连接模式了意义使用的名称的字段卡夫卡连接模式。
如果默认数据类型转换不符合你的需要,你可以创建一个自定义转换器连接器。
基本类型
下表描述了连接器地图基本类型。
PostgreSQL数据类型 | 文字类型(模式类型) | 语义类型(模式名称)和笔记 |
---|---|---|
|
|
n /一个 |
|
|
n /一个 |
|
|
|
|
|
|
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
n /一个 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
|
|
|
时间类型
除了PostgreSQL的TIMESTAMPTZ
和TIMETZ
数据类型,它包含时区信息,如何时间类型映射的值取决于time.precision.mode
连接器配置属性。以下部分描述了这些映射:
time.precision.mode =自适应
当time.precision.mode
属性设置为自适应
默认,连接器决定了文本类型和语义类型基于列的数据类型定义。这将确保事件完全表示数据库中的值。开云体育电动老虎机
PostgreSQL数据类型 | 文字类型(模式类型) | 语义类型(模式名称)和笔记 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
time.precision.mode = adaptive_time_microseconds
当time.precision.mode
配置属性设置为adaptive_time_microseconds
,连接器将确定时间类型的文字类型和语义类型基于列的数据类型定义。这将确保事件完全表示数据库中的值,除了所有开云体育电动老虎机时间
字段是捕获为微秒。
PostgreSQL数据类型 | 文字类型(模式类型) | 语义类型(模式名称)和笔记 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
time.precision.mode =连接
当time.precision.mode
配置属性设置为连接
卡夫卡,连接器使用逻辑连接类型。消费者只能处理时,这可能是有用的内置卡夫卡连接逻辑类型,无法处理可变精度时间值。然而,由于PostgreSQL支持微秒级精度,通过连接器生成的事件连接
时间精度模式结果精度的损失当数据库列开云体育电动老虎机精确到小数部分的第二值大于3。
PostgreSQL数据类型 | 文字类型(模式类型) | 语义类型(模式名称)和笔记 |
---|---|---|
|
|
|
|
|
|
|
|
|
时间戳类型
的时间戳
类型代表没有时区的时间戳信息。这些列转化为一个等价的基于UTC卡夫卡连接值。例如,时间戳
“2018-06-20 15:13:16.945104”为代表的价值io.开云体育官方注册网址debezium.time.MicroTimestamp
“1529507596945104”当与价值time.precision.mode
没有设置为连接
。
运行的JVM的时区卡夫卡连接和Debezium并不影响这种转换。开云体育官方注册网址
PostgreSQL支持使用+ /无限
值时间戳
列。这些特殊的值转换为时间戳值9223372036825200000
正无穷或-9223372036832400000
负无穷。这种行为模仿的标准行为PostgreSQL JDBC驱动程序——看到org.postgresql.PGStatement
接口供参考。
十进制类型
的设置PostgreSQL连接器配置属性decimal.handling.mode
决定连接器地图十进制类型。
当decimal.handling.mode
属性设置为精确的
卡夫卡,连接器使用连接org.apache.kafka.connect.data.Decimal
逻辑类型为所有小数
,数字
和钱
列。这是默认的模式。
PostgreSQL数据类型 | 文字类型(模式类型) | 语义类型(模式名称)和笔记 |
---|---|---|
|
|
|
|
|
|
|
|
|
有一个例外。当数字
或小数
类型没有规模约束,使用来自数据库的值有不同的每个值(变量)的规模。开云体育电动老虎机在这种情况下,连接器使用io.开云体育官方注册网址debezium.data.VariableScaleDecimal
,其中包含价值和价值转移的规模。
PostgreSQL数据类型 | 文字类型(模式类型) | 语义类型(模式名称)和笔记 |
---|---|---|
|
|
|
|
|
|
当decimal.handling.mode
属性设置为双
代表所有的连接器小数
,数字
和钱
值作为Java双值并将它们编码见下表。
PostgreSQL数据类型 | 文字类型(模式类型) | 语义类型(模式名称) |
---|---|---|
|
|
|
|
|
|
|
|
最后可能的设置decimal.handling.mode
配置属性字符串
。在这种情况下,连接器代表小数
,数字
和钱
值格式化的字符串表示,并将它们编码见下表。
PostgreSQL数据类型 | 文字类型(模式类型) | 语义类型(模式名称) |
---|---|---|
|
|
|
|
|
|
|
|
PostgreSQL支持南
(不是一个数字)作为一种特殊的值存储在小数
/数字
值的设置decimal.handling.mode
是字符串
或双
。在这种情况下,连接器编码南
作为Double.NaN
或字符串常量南
。
HSTORE类型
的设置PostgreSQL连接器配置属性hstore.handling.mode
决定了连接器的地图HSTORE
值。
当dhstore.handling.mode
属性设置为json
(默认),连接器HSTORE
值作为字符串表示JSON值并将它们编码见下表。当hstore.handling.mode
属性设置为地图
连接器使用地图
模式类型HSTORE
值。
PostgreSQL数据类型 | 文字类型(模式类型) | 语义类型(模式名称)和笔记 |
---|---|---|
|
|
|
|
|
n /一个 |
域类型
PostgreSQL支持用户定义的类型基于其他潜在的类型。当使用这些列类型,Debezium公开列表示基于完整的类型层次结构开云体育官方注册网址。
捕获的变化列使用PostgreSQL域类型需要特殊考虑。当一列定义包含一个域类型扩展一个默认的数据库类型和域类型定义了一个定制的长度或规模,生成的模式继承定义长度或规模。开云体育电动老虎机 当一列定义包含一个域类型扩展另一个域类型定义了一个定制长度或规模,生成的模式不继承定义的长度或规模,因为信息不是PostgreSQL驱动程序中可用的列元数据。 |
网络地址类型
PostgreSQL数据类型可以存储IPv4, IPv6, MAC地址。最好是使用这些类型而不是纯文本类型来存储网络地址。网络地址类型提供输入错误检查和专业运营商和功能。
PostgreSQL数据类型 | 文字类型(模式类型) | 语义类型(模式名称)和笔记 |
---|---|---|
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
|
|
n /一个 |
PostGIS类型
PostgreSQL连接器支持所有PostGIS数据类型。
PostGIS数据类型 | 文字类型(模式类型) | 语义类型(模式名称)和笔记 |
---|---|---|
|
|
格式的细节,请参阅开放地理空间财团简单功能访问规范。 |
|
|
格式的细节,请参阅开放地理空间财团简单功能访问规范。 |
烤的价值观
PostgreSQL硬性限制页面大小。这意味着值大于8 KBs需要存储使用吐司存储。这会影响到复制的消息来自数据库。开云体育电动老虎机值,存储使用面包机制和没有改变并不包含在消息,除非他们是表的复制品的身份的一部分。没有安全的方式Debezium阅读缺失值从数据库直开云体育官方注册网址接带外,因为这可能会导致竞态条件。开云体育电动老虎机因此,Debezium遵循这开云体育官方注册网址些规则来处理烤值:
表与
副本的身份完全
——烤面包列值的一部分之前
和后
就像任何其他列字段更改事件。表与
副本身份默认
——当收到一个更新
从数据库事件,任何不变吐司列值开云体育电动老虎机不属于副本身份并不包含在事件。同样的,当收到一个删除
事件,没有面包列,如果有的话)之前
字段。作为D开云体育官方注册网址ebezium不能安全地提供列值在本例中,连接器返回一个占位符值所定义的连接器配置属性,unavailable.value.placeholder
。
默认值
如果指定一个默认值为一个列在数据库模式,PostgreSQL连接器将试图传播这个值尽可能卡夫卡模式。开云体育电动老虎机最常见的数据类型的支持,包括:
布尔
数字类型(
INT
,浮动
,数字
等)。文本类型(
字符
,VARCHAR
,文本
等)。时间类型(
日期
,时间
,时间间隔
,时间戳
,TIMESTAMPTZ
)JSON
,JSONB
,XML
UUID
注意,对于时间类型,解析提供的默认值是PostgreSQL库;因此,任何字符串表示通常支持PostgreSQL也应该支持的连接器。
如果生成的默认值是一个函数而不是直接指定的内联,连接器将出口的0
对于给定的数据类型。这些值包括:
假
为布尔
0
用适当的精度,数值类型空字符串text / XML类型
{}
JSON类型1970-01-01
为日期
,时间戳
,TIMESTAMPTZ
类型00:00
为时间
时代
为时间间隔
00000000-0000-0000-0000-000000000000
为UUID
这种支持目前只能扩展到明确的使用功能。例如,CURRENT_TIMESTAMP (6)
用括号的支持,但CURRENT_TIMESTAMP
不是。
支持默认值存在的传播主要是为了允许安全模式演化模式注册使用PostgreSQL连接器时,执行模式版本之间的兼容性。由于主要关心以及刷新行为不同的插件,在卡夫卡模式默认值是不能保证总是同步数据库模式的默认值。开云体育电动老虎机
这种行为可能是意想不到的,但它仍然是安全的。只有模式定义的影响,而实际价值存在于消息仍将符合所写的源数据库。开云体育电动老虎机 |
设置Postgres
之前使用PostgreSQL连接器监控变化PostgreSQL服务器上的承诺,决定哪些逻辑解码插件你打算使用。如果你计划不使用本机pgoutput
逻辑复制流支持,那么您必须安装到PostgreSQL服务器逻辑解码插件。后来,启用一个复制槽,并配置一个用户有足够的权限来执行复制。
如果您的数据库托开云体育电动老虎机管等服务Heroku Postgres您可能无法安装插件。如果是这样,如果你正在使用PostgreSQL 10 +,您可以使用pgoutput
译码器支持捕获数据库的变化。开云体育电动老虎机如果这不是一个选择,你不能使用Debezium数据库。开云体育官方注册网址开云体育电动老虎机
PostgreSQL的云
PostgreSQL在Amazon RDS
可以捕获一个PostgreSQL数据库运行的变化开云体育电动老虎机Amazon RDS。要做到这一点:
实例参数设置
rds.logical_replication
来1
。验证
wal_level
参数设置为逻辑
通过运行查询显示wal_level
作为数据库RD开云体育电动老虎机S主用户。这可能不是在分域复制设置。你不能手动设置这个选项。它是自动改变当rds.logical_replication
参数设置为1
。如果wal_level
没有设置为逻辑
你前面的修改之后,这可能是因为实例后必须重新启动参数组的变化。重启你的维护窗口期间出现,也可以发起一个手动重启。设置Debezi开云体育官方注册网址um
plugin.name
参数pgoutput
。启动逻辑复制从一个AWS帐户的
rds_replication
的角色。授予角色权限管理逻辑槽和使用逻辑槽流数据。默认情况下,只在AWS的主用户帐户rds_replication
在Amazon RDS的角色。使主账户以外的用户帐户启动逻辑复制,您必须授予账户rds_replication
的角色。例如,授予rds_replication< my_user >
。你必须有超级用户
授予访问rds_replication
一个用户角色。让主账户以外的账户创建一个初始快照,你必须给予选择
权限的账户表被捕获。关于安全的更多信息为PostgreSQL逻辑复制,看到PostgreSQL的文档。
PostgreSQL Azure上
可以使用与 Debezium开云体育官方注册网址Azure为开云体育电动老虎机PostgreSQL数据库支持pgoutput
逻辑解码 插件,这是由Debezium支持。开云体育官方注册网址
设置Azure复制支持逻辑
。您可以使用Azure CLI或者是Azure门户配置。例如,使用Azure CLI,这里是阿兹postgres服务器
你需要执行的命令:
阿兹postgres服务器配置设置——组资源组mygroup服务器名称azure myserver -名字。replication_support --value logical az postgres server restart --resource-group mygroup --name myserver
PostgreSQL CrunchyBridge上
可以使用Debezium开云体育官方注册网址CrunchyBridge;逻辑复制已经打开。的pgoutput
插件可用。你需要创建一个复制用户并提供正确的权限。
在使用 |
安装逻辑解码输出插件
看到逻辑解码输出插件安装PostgreSQL更多详细说明用于设置和测试逻辑解码插件。 |
PostgreSQL 9.4,阅读改变write-ahead-log的唯一方法就是安装一个逻辑解码输出插件。插件是用C编写、编译和安装在机器上运行的PostgreSQL服务器。插件使用PostgreSQL的特定api,如所描述的PostgreSQL的文档。
PostgreSQL连接器与Debezium的支持逻辑解码插件从数据库接收改变事件的开云体育官方注册网址开云体育电动老虎机Protobuf格式或者是pgoutput格式。的pgoutput
插件是即时可用的PostgreSQL数据库。开云体育电动老虎机使用Protobuf通过为更多的细节decoderbufs
插件,插件文档
讨论了其需求,限制,以及如何编译它。
为简单起见,Debezium还提开云体育官方注册网址供了一个容器图像基于上游PostgreSQL服务器图像,上面的编译和安装插件。你可以使用这张图片作为一个例子的详细步骤所需的安装。
Debe开云体育官方注册网址zium逻辑解码插件已经安装和测试只有Linux机器。为Windows和其他操作系统,可能需要不同的安装步骤。 |
插件的差异
插件的行为并不是完全相同的。这些差异已确定:
而所有插件将刷新模式从数据库元数据在检测在流模式的变化,开云体育电动老虎机
pgoutput
插件更渴望的是触发这种刷新。例如,改变一个列的默认值将触发刷新pgoutput
,而其他插件不会意识到这种变化,直到另一个变化触发刷新(如。添加一个新列)。这是由于的行为pgoutput
,而不是Debezium本身开云体育官方注册网址。
跟踪所有最新的差异在一个测试套件Java类。
PostgreSQL服务器配置
如果您使用的是逻辑解码插件安装后,除了pgoutput配置PostgreSQL服务器如下:
在启动时加载插件,添加以下的
postgresql.conf
文件:#模块shared_preload_libraries = ' decoderbufs '(1)
1 指示服务器加载 decoderbufs
逻辑解码插件在启动时(插件中设置的名称Protobuf
使文件)。配置复制槽不管所使用的解码器,指定以下
postgresql.conf
文件:#复制wal_level =逻辑(1)
1 指示服务器使用逻辑解码写前日志。
根据您的需求,您可能需要使用Debezium时设置其他PostgreSQL流复制参数。开云体育官方注册网址例子包括max_wal_senders
和max_replication_slots
提高连接器的数量可以同时发送服务器,和wal_keep_size
限制的最大的WAL大小复制槽将保留。关于配置流复制的更多信息,请参阅PostgreSQL的文档。
开云体育官方注册网址Debezium使用PostgreSQL的逻辑解码,它使用复制插槽。复制槽保证保留所有细胞膜部分所需Debezium即使在Debezium中断。开云体育官方注册网址出于这个原因,重要的是要密切关注复制槽为了避免太多的磁盘消费和其他条件,如目录膨胀如果复制槽保持闲置太久。有关更多信息,请参见PostgreSQL流复制文档。
如果你正在与一个synchronous_commit
设置其他比在
,建议设置wal_writer_delay
等一个值10毫秒来实现低延迟变化的事件。否则,其默认值是应用,增加了大约200毫秒的延迟。
阅读和理解PostgreSQL文档关于力学和PostgreSQL写前日志的配置强烈建议。 |
设置权限
建立一个PostgreSQL服务器运行Debezium连接器需要一个数据库用户能开云体育官方注册网址够进行复制。开云体育电动老虎机复制可以只有一个数据库用户执行适当的权限,只有数量配置的主机。开云体育电动老虎机
尽管如此,在默认情况下,超级有必要的复制
和登录
角色,如前所述安全,最好不要提供Debezium复制权限提升用户。开云体育官方注册网址相反,创建一个Debezium用户所开云体育官方注册网址需的最小权限。
PostgreSQL管理权限。
为用户提供复制权限,定义一个PostgreSQL的角色至少的
复制
和登录
权限,然后给予这个角色给用户。例如:创建角色<名称>复制登录;
设置权限使Debezium创建PostgreSQL出版物时开云体育官方注册网址使用pgoutput
如果你使用pgoutput
作为逻辑解码插件,Debezium必须运行在数据库中作为用户与特开云体育官方注册网址定的特权。开云体育电动老虎机
开云体育官方注册网址Debezium流PostgreSQL源表的更改事件出版物创建的表。出版物包含一组过滤的变化从一个或多个表生成的事件。在每个发布的数据过滤基于出版规范。规范由PostgreSQL数据库管理员可以创建或由Debezium连接器。开云体育官方注册网址开云体育电动老虎机允许Debezium Pos开云体育官方注册网址tgreSQL连接器创建出版物和指定数据复制,连接器必须与特定的操作数据库中的特权。开云体育电动老虎机
有几个选项确定出版物是如何创建的。一般来说,最好是手动创建出版物的表你想捕获,在你设置连接器。然而,您可以配置您的环境,允许Debezium自动创建的出版物,并指定被添加到他们的数据。开云体育官方注册网址
开云体育官方注册网址Debezium用途包括和排除列表属性列表来指定如何插入数据公布。更多信息的选项启用Debezium创建出版物,明白了开云体育官方注册网址publication.autocreate.mode
。
Debe开云体育官方注册网址zium创建一个PostgreSQL出版,它必须作为一个用户,运行以下特权:
复制数据库中的特权将表添加到出版。开云体育电动老虎机
创建
数据库添加出版物上的特权。开云体育电动老虎机选择
权限表复制初始表数据。表业主自动选择
权限表。
将表添加到出版,用户必须是一个表的所有者。但由于源表已经存在,您需要一个机制来共享所有权与原来的所有者。启用共享所有权,您创建一个PostgreSQL复制组,然后添加现有表的所有者和复制用户组。
创建一个复制组。
创建角色< replication_group >;
表的原始所有者添加到组中。
授予REPLICATION_GROUP< original_owner >;
添加Debezi开云体育官方注册网址um复制用户组。
授予REPLICATION_GROUP< replication_user >;
所有权转移的表
< replication_group >
。ALTER TABLE< table_name >主人REPLICATION_GROUP;
Debe开云体育官方注册网址zium指定捕获配置的值publication.autocreate.mode
必须设置为过滤后的
。
PostgreSQL允许复制与Debezium连接器配置主机开云体育官方注册网址
让Debezium 开云体育官方注册网址PostgreSQL复制数据,您必须配置数据库允许复制与主机运行PostgreSQL连接器。开云体育电动老虎机指定客户端允许复制的数据库,将条目添加到PostgreSQL基于主机的认证文件,开云体育电动老虎机pg_hba.conf
。更多的信息pg_hba.conf
文件的更多信息,请参考PostgreSQL的文档。
将条目添加到
pg_hba.conf
文件指定Debezium连接器可以复制数开云体育官方注册网址据库主机的主机。开云体育电动老虎机例如,pg_hba.conf
文件的例子:本地复制<对于>信任(1)主机复制<对于> 127.0.0.1/32信任(2)主机复制<对于>::1/128的信任(3)
1 指示服务器允许复制 <对于>
在本地,在服务器机器。2 指示服务器允许 <对于>
在本地主机
使用接收复制更改IPV4
。3 指示服务器允许 <对于>
在本地主机
使用接收复制更改IPV6
。
更多信息网络面具,看到PostgreSQL的文档。 |
支持PostgreSQL拓扑
可以使用PostgreSQL连接器与一个独立的PostgreSQL服务器或一个PostgreSQL服务器集群。
正如前面提到的在开始的时候PostgreSQL(所有版本⇐12)支持逻辑复制插槽上主
服务器。这意味着一个副本在PostgreSQL集群不能配置为逻辑复制,因此,Debezium PostgreSQL连接器只能主服务器连接和沟通。开云体育官方注册网址如果这个服务器失败,连接器停止。当集群是修理,如果原来的主服务器再次提升主
,您可以重新启动连接器。然而,如果不同的PostgreSQL服务器插件和适当的配置将提升主
,你必须改变连接器配置为指向主
服务器,然后你可以重新启动连接器。
细胞膜的磁盘空间消费
在某些情况下,有可能PostgreSQL磁盘空间被细胞膜文件飙升或增加的比例。这种情况有几个可能的原因:
连接器的LSN到接收的数据是可用的
confirmed_flush_lsn
列的服务器pg_replication_slots
视图。的数据比这个LSN不再可用,和数据库负责回收磁盘空间。开云体育电动老虎机还在
pg_replication_slots
看来,restart_lsn
列最古老的LSN WAL的连接器可能需要。如果该值为confirmed_flush_lsn
定期增加的价值restart_lsn
落后于数据库需要回收空间。开云体育电动老虎机数据库通开云体育电动老虎机常在批块回收磁盘空间。这是预期行为,由用户不采取行动是必要的。
有许多更新在数据库中被跟踪,但只有极少数的相关更新表(s开云体育电动老虎机)和模式(s)的连接器捕捉变化。这种情况可以很容易地解决与心跳周期事件。设置
heartbeat.interval.ms
连接器配置属性。PostgreSQL实例包含多个数据库和其中一个是一个高流量的数据库。开云体育电动老虎机开云体育官方注册网址Debezium捕获另一个数据库,是低流量的变化相对于其他数据库。开云体育电动老虎机开云体育官方注册网址Debezium然后不能确认的LSN复制插槽调用数据库和Debezium不是工作。开云体育电动老虎机细胞膜是由所有数据库共享,使用事件往往生长,直到开云体育电动老虎机发出Debezium捕捉变化的数据库。开云体育官方注册网址为了克服这一点,有必要:
使心跳周期记录生成的
heartbeat.interval.ms
连接器配置属性。从数据库定期发出更改事件Debezium捕捉变化。开云体育官方注册网址开云体育电动老虎机
一个单独的进程将会定期更新表中插入一个新行或重复更新相同的行。PostgreSQL然后调用Debezium,确开云体育官方注册网址认最新的LSN和允许数据库回收WAL空间。开云体育电动老虎机这个任务可以通过实现自动化
heartbeat.action.query
连接器配置属性。
为用户在AWS RDS PostgreSQL,类似于高流量/低交通场景中可以发生在一个无聊的环境。AWS RDS写入自己的系统表上看不见客户频繁(5分钟)。再一次,定期排放事件解决问题。 |
部署
部署Debezium P开云体育官方注册网址ostgreSQL连接器,安装Debezium PostgreSQL连接器存档,配置连接器,并开始通过添加其配置卡夫卡连接连接器。
安装PostgreSQL和设置运行Debezium连接器开云体育官方注册网址。
下载Debezium开云体育官方注册网址PostgreSQL连接器插件存档。
将文件解压缩到卡夫卡连接环境中。
添加JAR文件的目录卡夫卡连接的
plugin.path
。重新启动卡夫卡连接过程去接新的JAR文件。
如果你正在与不可变的容器,明白了开云体育官方注册网址Debezium集装箱的图片动物园管理员,卡夫卡,PostgreSQL和卡夫卡与PostgreSQL连接器已经安装并准备运行。你也可以上运行D开云体育官方注册网址ebezium Kubernetes OpenShift。
连接器配置示例
下面是一个例子的配置一个PostgreSQL连接器连接在192.168.99.100 PostgreSQL服务器在端口5432上,其逻辑名实现
。通常,您在JSON文件中配置Debezium Postgr开云体育官方注册网址eSQL连接器通过设置配置属性用于连接器。
你可以选择生成事件的一个子集模式和表在数据库中。开云体育电动老虎机可选地,您可以忽略,面具,或包含敏感数据的截断列,大于一个指定大小,或者你不需要。
{" name ": " fulfillment-connector”,(1)“配置”:{“连接器。class": "io.debezium.connector.postgresql.PostgresConnector",(2)“开云体育电动老虎机数据库。主机名”:“192.168.99.100”,(3)“开云体育电动老虎机数据库。港”:“5432”,(4)“开云体育电动老虎机数据库。user": "postgres",(5)“开云体育电动老虎机数据库。密码”:“postgres”,(6)“开云体育电动老虎机数据库。dbname" : "postgres",(7)”的话题。前缀": "fulfillment",(8)“table.include。名单”:“public.inventory”(9)}}
1 | 连接器的名称注册时卡夫卡连接服务。 |
2 | 这个PostgreSQL连接器类的名称。 |
3 | PostgreSQL服务器的地址。 |
4 | PostgreSQL服务器的端口号。 |
5 | PostgreSQL的用户的名称需要的特权。 |
6 | PostgreSQL的用户的密码需要的特权。 |
7 | PostgreSQL数据库连接的名称开云体育电动老虎机 |
8 | 主题为PostgreSQL服务器前缀/集群,形成一个名称空间和使用连接器的卡夫卡主题的名字写道,卡夫卡连接模式名称和对应的Avro模式的名称空间,当Avro使用转换器。 |
9 | 这个服务器托管的所有表的列表,这连接器将监控。这是可选的,还有其他属性清单模式和表包含或排除的监控。 |
看到PostgreSQL连接器属性的完整列表在这些配置可以指定。
你可以发送这个配置帖子
命令来运行卡夫卡连接服务。服务记录配置并启动一个连接器任务执行下列操作:
连接到PostgreSQL数据库。开云体育电动老虎机
读事务日志。
流变化事件记录卡夫卡的话题。
添加连接器配置
运行Debeziu开云体育官方注册网址m PostgreSQL连接器,创建一个连接器配置和配置添加到您的卡夫卡连接集群。
的逻辑解码插件安装。
安装PostgreSQL连接器。
创建一个配置PostgreSQL连接器。
使用卡夫卡REST API连接卡夫卡添加连接器配置连接集群。
连接器启动后,它执行一个一致的快照PostgreSQL服务器的数据库连接器配置。开云体育电动老虎机连接器然后开始生成数据行级操作的事件和流媒体改变事件记录,卡夫卡的话题。
连接器属性
Debe开云体育官方注册网址zium PostgreSQL连接器有许多配置属性,您可以使用它们来实现正确的连接器为您的应用程序的行为。许多属性的默认值。属性信息的组织结构如下:
以下配置属性要求除非一个默认值是可用的。
财产 | 默认的 | 描述 | ||
---|---|---|---|---|
没有默认的 |
独特的连接器的名称。再次尝试注册名称相同的就会失败。这个属性是必需的所有卡夫卡连接连接器。 |
|||
没有默认的 |
连接器的Java类的名称。总是使用的值 |
|||
|
的最大数量的任务应该创建连接器。PostgreSQL连接器总是使用一个单一的任务,因此不使用这个值,所以默认总是可以接受的。 |
|||
|
PostgreSQL的名称逻辑解码插件PostgreSQL服务器上安装。 支持的值 |
|||
|
PostgreSQL的名称创建逻辑解码槽流变化从一个特定的插件特定数据库/模式。开云体育电动老虎机服务器使用这个槽流事件Debezium连接器配置。开云体育官方注册网址 槽名称必须符合PostgreSQL复制槽命名规则的状态:“每个复制槽有一个名称,它可以包含小写字母,数字,下划线字符。” |
|||
|
是否要删除逻辑复制槽当连接器停止在一个优雅的,预期的方式。默认行为是复制槽仍为连接器配置连接器时停止。当连接器重启,拥有相同的复制槽使连接器在它停止的地方开始处理。 设置为 |
|||
|
PostgreSQL出版物的名称创建当使用流的变化 此出版物是在创建启动如果它不存在,它包括所有的表。开云体育官方注册网址Debezium然后应用自己的包括/排除列表过滤,如果配置,限制出版改变事件感兴趣的特定的表。连接器用户必须拥有超级用户权限来创建这个出版,所以它通常是更可取的创建开始前连接器首次出版。 如果出版已经存在,对所有表或配置表的一个子集,Debezium使用出版的定义。开云体育官方注册网址 |
|||
没有默认的 |
PostgreSQL数据库服务器的IP地址或主机名。开云体育电动老虎机 |
|||
|
整数PostgreSQL数据库服务器的端口号。开云体育电动老虎机 |
|||
没有默认的 |
PostgreSQL数据库用户名连接到Post开云体育电动老虎机greSQL数据库服务器。 |
|||
没有默认的 |
连接时使用的密码到PostgreSQL数据库服务器。开云体育电动老虎机 |
|||
没有默认的 |
流的PostgreSQL数据库的名称更改。开云体育电动老虎机 |
|||
没有默认的 |
主题提供一个名称空间前缀为特定PostgreSQL数据库服务器或集群Debezium捕捉变化。开云体育官方注册网址开云体育电动老虎机前缀应该是唯一的在所有其他连接器,因为它是用作所有卡夫卡主题主题名称前缀接收记录这个连接器。只有字母数字字符,连字符,点和强调必须用于数据库服务器逻辑名。开云体育电动老虎机
|
|||
没有默认的 |
可选,以逗号分隔的正则表达式匹配的模式的名称想要捕捉变化。不包括在任何模式名称 匹配一个模式的名字,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个标识符模式;它不可能出现在一个模式匹配的子字符串的名字。 |
|||
没有默认的 |
可选,以逗号分隔的正则表达式匹配的模式的名称不希望捕获的变化。不包括在任何模式的名称 匹配一个模式的名字,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个标识符模式;它不可能出现在一个模式匹配的子字符串的名字。 |
|||
没有默认的 |
一个可选,以逗号分隔的正则表达式匹配完全限定表标识符表你想捕捉的变化。设置此属性时,连接器捕捉变化只从指定的表。每个标识符的形式schemaName。的表。默认情况下,连接器捕捉变化在每一个非系统的表在每个模式的变化被抓获。 匹配一个表的名称,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个表标识符;可能存在不匹配的子字符串表中的名称。 |
|||
没有默认的 |
一个可选,以逗号分隔的正则表达式匹配完全限定表标识符表你不希望捕获的变化。每个标识符的形式schemaName。的表。设置此属性时,连接器捕捉变化从每个表你没有指定。 匹配一个表的名称,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个表标识符;可能存在不匹配的子字符串表中的名称。 |
|||
没有默认的 |
可选,以逗号分隔的正则表达式匹配列的完全限定名称应该包含在变更事件记录值。完全限定名称列的形式schemaName。的表。columnName。 匹配一个列的名称,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,表达式用于匹配整个字符串列的名称;子字符串不匹配,可能出现在一个列名。 |
|||
没有默认的 |
可选,以逗号分隔的正则表达式匹配的完全限定名称列应该排除在更改事件记录值。完全限定名称列的形式schemaName。的表。columnName。 匹配一个列的名称,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。也就是说,表达式用于匹配整个字符串列的名称;子字符串不匹配,可能出现在一个列名。 |
|||
|
时间、日期和时间戳可以表示不同的精度: |
|||
|
指定连接器应如何处理的值 |
|||
|
指定连接器应如何处理的值 |
|||
|
指定连接器应如何处理的值 |
|||
|
是否使用加密的连接到PostgreSQL服务器。选项包括: |
|||
没有默认的 |
文件的路径为客户机包含SSL证书。看到PostgreSQL的文档为更多的信息。 |
|||
没有默认的 |
的路径文件,其中包含SSL客户机的私钥。看到PostgreSQL的文档为更多的信息。 |
|||
没有默认的 |
密码访问的客户端私钥文件规定 |
|||
没有默认的 |
文件,其中包含的路径的根证书(s)服务器验证。看到PostgreSQL的文档为更多的信息。 |
|||
|
启用TCP点火电极探针来验证数据库连接仍然活着。开云体育电动老虎机看到PostgreSQL的文档为更多的信息。 |
|||
|
控制是否删除事件是紧随其后的是一个墓碑上的事件。 |
|||
n /一个 |
一个可选,以逗号分隔的正则表达式匹配的完全限定名称基于字符的列。设置该属性如果你想截断时的一组列中的数据超过指定的字符数长度在属性名。集 的完全限定名称列观察下列格式: 您可以指定多个属性具有不同的长度在一个配置。 |
|||
n /一个 |
一个可选,以逗号分隔的正则表达式匹配的完全限定名称基于字符的列。设置该属性如果你希望连接器面具的一组列的值,例如,如果他们包含敏感数据。集 的完全限定名称列观察下列格式:schemaName。的表。columnName。匹配一个列的名称,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个字符串列的名称;表达式不匹配的子字符串可能出现在一个列名。 您可以指定多个属性具有不同的长度在一个配置。 |
|||
n /一个 |
一个可选,以逗号分隔的正则表达式匹配的完全限定名称基于字符的列。完全限定名称列的形式< schemaName >。<表>。< columnName >。 一个假名由散列值指定应用的结果hashAlgorithm和盐。基于所使用的哈希函数,引用完整性维护,当列值替换为假名。支持哈希函数的描述MessageDigest节Java加密体系结构标准算法名称的文档。 column.mask.hash.sha with.salt——256.。CzQMA0cB5K = inventory.orders。自定义erName, inventory.shipment.customerName 如果有必要,笔名是自动缩短列的长度。连接器配置可以包括多个属性,指定不同的哈希算法和盐。 |
|||
n /一个 |
可选,以逗号分隔的正则表达式匹配列,您想要的完全限定名称连接器排放额外参数代表列元数据。设置此属性时,连接器将以下字段添加到事件记录的模式:
这些参数传递一个列的原始类型名称和长度(不同宽度的类型),分别。 的完全限定名称列观察下列格式:开云体育电动老虎机数据库名。的表。columnName,或开云体育电动老虎机数据库名。schemaName。的表。columnName。 |
|||
n /一个 |
可选,以逗号分隔的正则表达式,指定完全限定名称列的数据类型定义的一个数据库。开云体育电动老虎机当这个属性设置,对于匹配的数据类型的列,连接器发出事件记录在他们的模式包括以下额外的字段:
这些参数传递一个列的原始类型名称和长度(不同宽度的类型),分别。 的完全限定名称列观察下列格式:开云体育电动老虎机数据库名。的表。typeName,或开云体育电动老虎机数据库名。schemaName。的表。typeName。 PostgreSQL-specific数据类型名称的列表,请参阅PostgreSQL数据类型的映射。 |
|||
空字符串 |
的表达式列表指定连接器使用的列表单自定义消息键改变事件记录,发布卡夫卡指定表的主题。 默认情况下,Debezi开云体育官方注册网址um使用一个表的主键列,它发出的消息键记录。的默认值,或指定一个关键对于缺乏一个主键的表,您可以配置自定义消息键基于一个或多个列。 每一个完全限定表名是一个正则表达式在以下格式: 列的数量没有限制,您使用它来创建自定义消息键。然而,最好使用所需的最小数量,指定一个唯一键。 |
|||
all_tables |
只适用于当流变化通过使用的 |
|||
字节 |
指定二进制( |
|||
没有一个 |
指定应该如何调整的兼容模式名消息转换器使用的连接器。可能的设置:
|
|||
没有一个 |
指定字段名称应该如何调整的兼容性与消息转换器使用的连接器。可能的设置:
看到Avro命名为更多的细节。 |
|||
|
指定转换时应该使用多少小数位数Postgres |
|||
没有默认的 |
可选,以逗号分隔的正则表达式匹配逻辑解码消息前缀的名称,你想要捕获的连接器。默认情况下,连接器捕获所有逻辑解码信息。当这个属性设置中,连接器捕获只有逻辑解码消息指定的前缀属性。所有其他逻辑解码消息被排除在外。 匹配消息的名字前缀,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个消息前缀字符串;表达式不匹配的子字符串可能出现在一个前缀。 如果包含该属性的配置,也不设置 对有关的结构信息消息事件和对他们的顺序语义,明白了消息事件。 |
|||
没有默认的 |
可选,以逗号分隔的正则表达式匹配逻辑解码消息的名称前缀,您不希望捕获的连接器。当这个属性设置,连接器不捕捉逻辑解码消息使用指定的前缀。所有其他消息捕获。 匹配消息的名字前缀,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个消息前缀字符串;表达式不匹配的子字符串可能出现在一个前缀。 如果包含该属性的配置,不还 对有关的结构信息消息事件和对他们的顺序语义,明白了消息事件。 |
以下先进的配置属性默认值,在大多数情况下工作,因此很少需要指定连接器的配置。
财产 | 默认的 | 描述 | ||
---|---|---|---|---|
没有默认的 |
列举了一个以逗号分隔的符号名称自定义转换器连接器可以使用实例。例如,
你必须设置 对于每一个转换配置连接器,您必须添加一个
例如, isbn。类型:io.debezium.test.IsbnConverter 如果你想进一步控制配置转换器的行为,您可以添加一个或多个配置参数值传递给转换器。把任何额外的配置参数和一个转换器,前缀符号名称的参数名称的转换器。 isbn.schema.name: io.开云体育官方注册网址debezium.postgresql.type.Isbn |
|||
|
指定的标准执行快照当连接器开始: |
|||
没有默认的 |
一个完整的Java类的名称是一个实现 |
|||
所有表中指定 |
一个可选,以逗号分隔的正则表达式匹配的完全限定名称( 匹配一个表的名称,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个字符串表的名称;可能存在不匹配的子字符串表中的名称。 |
|||
|
正整数的值指定最大的时间(以毫秒为单位)等来获取表锁在执行一个快照。如果连接器不能获得表锁在这个时间间隔,快照就会失败。连接器如何执行快照提供细节。 |
|||
没有默认的 |
指定的表行包括一个快照。使用属性如果你想要一个快照包含只有一个子集的一个表中的记录。这个属性只影响快照。它不适用于事件连接器读取的日志。 属性包含一个以逗号分隔的完全限定表名的形式 从一个 “snapshot.select.statement。覆盖”:“客户。订单", "snapshot.select.statement.overrides.customer.orders": "SELECT * FROM [customers].[orders] WHERE delete_flag = 0 ORDER BY id DESC" 在生成的快照,连接器只包含的记录 |
|||
|
指定连接器应该如何应对异常事件的处理过程中: |
|||
|
正整数的值指定的最大大小每一批连接器的事件过程。 |
|||
|
正整数的值指定了阻塞队列的最大记录数所能容纳的量。当Debe开云体育官方注册网址zium从数据库读取事件流,它将事件阻塞队列之前写卡夫卡。开云体育电动老虎机阅读改变事件的阻塞队列可以提供反压力的情况下从数据库连接器吸入消息的速度比它可以编写卡夫卡,或者当卡夫卡变得不可用。开云体育电动老虎机事件队列连接器时忽视举行定期记录偏移量。总是设置的值 |
|||
|
一个长整型值,指定字节的阻塞队列的最大体积。默认情况下,体积限制不指定阻塞队列。指定的字节数,队列可以消费,将此属性设置为一个积极的长期价值。 |
|||
|
正整数的值指定的毫秒数连接器应该等待新的更改事件出现之前,开始处理一批事件。默认为500毫秒。 |
|||
|
指定连接器行为当连接器遇到一个字段的数据类型是未知的。默认行为是连接器省略了字段的更改事件和记录一个警告。
|
|||
没有默认的 |
分号分隔连接器执行的SQL语句列表时,它建立了一个JDBC连接到数据库。开云体育电动老虎机使用分号作为一个字符,而不是作为一个分隔符,指定连续两个分号, |
|||
|
频率发送复制连接状态更新到服务器,以毫秒为单位。 |
|||
|
控制频率连接器发送心跳消息到卡夫卡的主题。默认行为是连接器不发送心跳消息。 |
|||
没有默认的 |
指定一个查询时,连接器在源数据库上执行连接器发送心跳消息。开云体育电动老虎机 |
|||
|
指定的条件触发刷新内存模式的表。 |
|||
没有默认的 |
以毫秒为单位间隔,连接器之前应该等待连接器启动时执行一个快照。如果你开始集群中的多个连接器,这个属性是有用的为避免快照中断,这可能导致连接器的调整。 |
|||
|
在一个快照,连接器批量读取表内容的行。这个属性指定批处理的最大行数。 |
|||
没有默认的 |
分号分隔的列表参数通过配置的逻辑解码插件。例如, |
|||
|
如果插槽连接到复制失败,这是连续尝试连接的最大数量。 |
|||
|
等待的毫秒数之间重试尝试当连接器不能连接到复制槽。 |
|||
|
指定连接器提供的常数表明最初的值是一个烤的价值不是由数据库提供。开云体育电动老虎机如果设置的 |
|||
|
决定连接器生成事件与事务与事务边界和丰富变化事件信封的元数据。指定 |
|||
|
决定连接器是否应该提交的LSN源postgres数据库中的记录,这样处理WAL日志可以删除。开云体育电动老虎机指定 |
|||
10000(10秒) |
之前等待的毫秒数retriable错误发生后重新启动连接器。 |
|||
|
一个以逗号分隔的操作类型,在流将被忽略。的操作包括: |
|||
没有默认值 |
完全限定的名称数据收集,用于发送信号连接器。 |
|||
1024年 |
的最大行数连接器存取和读取到内存块在增量快照。增加块大小提供了更高的效率,因为快照少运行快照查询一个更大的规模。然而,更大的块的大小也需要更多的内存缓冲区快照数据。调整块大小的值提供了最佳的性能在您的环境中。 |
|||
|
多长时间,以毫秒为单位,XMIN将读取复制槽。XMIN价值提供了一个新的复制的下界槽可以开始。的默认值 |
|||
|
TopicNamingStrategy类的名称应该用于确定数据的主题名称变化,模式改变,交易,心跳事件等,默认 |
|||
|
为主题名称指定分隔符,违约 |
|||
|
大小用于举办的主题名称有界并发散列映射。这个缓存将有助于确定主题名称对应于给定的数据收集。 |
|||
|
控件的名称连接器发送心跳消息的主题。主题名称有这种模式: |
|||
|
控制主题的连接器的名称发送交易信息的元数据。主题名称有这种模式: |
连接器还支持直通配置属性在创建使用卡夫卡生产国和消费国。
监控
Debe开云体育官方注册网址zium PostgreSQL连接器提供了两种类型的指标除了动物园管理员的内置支持JMX的度量,卡夫卡,卡夫卡提供连接。
开云体育官方注册网址Debezium监控文档提供细节如何通过使用JMX公开这些指标。
快照指标
的MBean是开云体育官方注册网址debezium.postgres: type = connector-metrics上下文=快照,server =< postgresql.server.name >
。
快照指标并非暴露,除非一个快照操作被激活时,或者如果发生自上次快照连接器的开始。
下表列出了shapshot指标可用。
属性 | 类型 | 描述 |
---|---|---|
|
读过的最后一个快照事件连接器。 |
|
|
连接器以来的毫秒数读取和处理最近的事件。 |
|
|
这个连接器的事件总数已经从去年开始或重置。 |
|
|
事件的数量已经被包括/排除列表过滤规则过滤配置连接器。 |
|
|
表的列表被连接器。 |
|
|
队列长度用来传递事件之间的快照和主卡夫卡连接循环。 |
|
|
队列的自由能力用来传递事件之间的快照和主卡夫卡连接循环。 |
|
|
表的总数被包含在快照。 |
|
|
表的数量尚未复制快照。 |
|
|
快照是否开始。 |
|
|
快照是否停了下来。 |
|
|
快照是否中止。 |
|
|
快照是否完成。 |
|
|
总秒数,快照到目前为止,即使不完整。也包括时间快照时停了下来。 |
|
|
总秒数,快照是暂停。如果快照停了好几次,暂停时间增加。 |
|
|
地图包含扫描的行数为每个表的快照。表在处理过程中也逐渐被添加到地图。更新一个表扫描并完成每10000行。 |
|
|
的最大缓冲区队列以字节为单位。这个指标是可用的 |
|
|
当前的体积,以字节为单位,记录在队列中。 |
连接器还提供了以下额外的快照指标执行增量快照时:
属性 | 类型 | 描述 |
---|---|---|
|
当前的快照数据块的标识符。 |
|
|
下界的主键设置定义当前块。 |
|
|
主键的上限设置定义当前块。 |
|
|
下界的当前快照的表的主键设置。 |
|
|
主键的上界的当前快照表。 |
流指标
的MBean是开云体育官方注册网址debezium.postgres: type = connector-metrics、上下文=流媒体服务器=< postgresql.server.name >
。
下表列出了流指标可用。
属性 | 类型 | 描述 |
---|---|---|
|
过去的流事件连接器已经阅读。 |
|
|
连接器以来的毫秒数读取和处理最近的事件。 |
|
|
事件,该连接器的总数已经重置自上次启动或指标。 |
|
|
创建事件的总数,这个连接器以来最后复位启动或指标。 |
|
|
更新事件的总数,这个连接器以来最后复位启动或指标。 |
|
|
删除事件,该连接器的总数已经重置自上次启动或指标。 |
|
|
事件的数量已经被包括/排除列表过滤规则过滤配置连接器。 |
|
|
表的列表被连接器。 |
|
|
队列长度之间的拖缆和主要用来传递事件卡夫卡连接循环。 |
|
|
队列的自由能力用来传递事件之间的拖缆和主卡夫卡连接循环。 |
|
|
国旗,表示连接器是否正在连接到数据库服务器。开云体育电动老虎机 |
|
|
的毫秒数去年更改事件的时间戳和连接器之间的处理它。值将会把机器上的任何差异时钟运行数据库服务器和连接器。开云体育电动老虎机 |
|
|
处理事务的数量。 |
|
|
去年收到事件的坐标。 |
|
|
事务标识符的处理事务。 |
|
|
的最大缓冲区队列以字节为单位。这个指标是可用的 |
|
|
当前的体积,以字节为单位,记录在队列中。 |
当事情出错的行为
开云体育官方注册网址Debezium是一个分布式系统,捕获所有更改多个上游数据库;开云体育电动老虎机它从不错过或失去一个事件。当系统正常操作或管理仔细然后Debezium提供开云体育官方注册网址只有一天交付的每一个变化事件记录。
如果发生错误,那么系统不丢失任何事件。然而,尽管从故障中恢复,这可能重复一些更改事件。在异常情况下,Debezium,就像卡夫卡,提供开云体育官方注册网址至少一次交付更改事件。
本节的其余部分描述如何Debezium处理各种故障和问题。开云体育官方注册网址
配置和启动错误
在下列情况下,连接失败时开始,报告错误/异常日志,并停止运行:
连接器的配置是无效的。
连接器不能成功地连接到PostgreSQL通过使用指定的连接参数。
连接器从先前记录的位置重新启动PostgreSQL细胞膜(通过使用LSN)和PostgreSQL不再有历史。
在这些情况下,错误消息的细节问题和建议解决方案。正确配置或解决PostgreSQL的问题后,重新启动连接器。
PostgreSQL变得不可用
当连接器正在运行,PostgreSQL服务器,它是连接到可以为任意数量的原因不可用。如果发生这种情况,连接器与一个错误并停止失败。当服务器可用,重新启动连接器。
PostgreSQL连接器去年加工抵消外部存储的形式PostgreSQL LSN。连接器后重新启动并连接到一个服务器实例中,连接器与服务器通信继续流从特定的偏移量。此抵消只要Debezium复制可用插槽仍然完好无损。开云体育官方注册网址从来没有下降在主服务器上复制槽或你会丢失数据。请参阅下一部分失败情况下,槽被移除。
集群的失败
释放12,PostgreSQL允许逻辑复制插槽只有在主服务器上。这意味着您可以点Debezium PostgreSQL连接器只有开云体育官方注册网址积极主服务器数据库的集群。开云体育电动老虎机同时,复制槽本身并不是传播到副本。如果主服务器宕机,一个新的主必须提升。
一些PostgresSQL管理服务(例如AWS RDS和GCP CloudSQL)实现复制通过磁盘复制到备用。这意味着复制槽会复制和故障转移后仍将是可用的。 |
新的主必须有逻辑解码插件安装和复制插槽配置为使用的插件和你想捕捉的数据库更改。开云体育电动老虎机只有这样你才能点连接器到新的服务器并重新启动连接器。
有重要的警告当故障发生时,你应该暂停Debezium直到你可以确认你有一个完整的复制槽,不会丢失数据。开云体育官方注册网址故障转移之后:
必须有一个过程,重新创造Debezium复制槽允许应用程序之前写的开云体育官方注册网址新初选。这是至关重要的。如果没有这个过程,你的应用程序可以更改事件小姐。
您可能需要验证Debezium能够阅读所有位置的变化开云体育官方注册网址之前旧的主要失败。
恢复的一个可靠的方法和验证丢失任何更改是否恢复备份失败的主要之前立即失败。虽然这可以管理困难,它允许您检查复制任何未耗尽的变化。
卡夫卡连接过程停止优雅
假设卡夫卡连接正在运行在分布式模式和卡夫卡连接过程是优雅地停了下来。关闭这一过程之前,卡夫卡迁移任务进程的连接器连接到另一个组的卡夫卡连接过程。新连接器的任务开始处理之前任务的确切位置停了下来。有一个短暂的延迟在处理连接器任务优雅地停止并重新启动新的流程。
卡夫卡连接过程崩溃
如果卡夫卡连接器进程意外停止,任何连接器任务是运行终止没有记录他们最近补偿处理。当卡夫卡连接正在运行在分布式模式中,卡夫卡在其他进程重启这些连接器连接任务。然而,从去年抵消,PostgreSQL连接器的简历记录早些时候的过程。这意味着新的替换任务可能产生一些相同的更改事件被处理之前就崩溃。重复事件的数量取决于抵消冲洗周期和变化的数据量就在崩溃。
因为一些事件可能有机会复制从失败中恢复期间,消费者应该预见到一些重复的事件。开云体育官方注册网址Debezium变化是幂等的,所以一系列事件总是导致相同的状态。
在每个更改事件记录,Debezium连接器插入源特定事件的开云体育官方注册网址起源信息,包括事件的PostgreSQL服务器的时间,服务器事务的ID,位置在写前日志写事务更改。消费者可以跟踪这些信息,特别是LSN,确定一个事件是否重复。
卡夫卡变得不可用
连接器生成变化事件,卡夫卡连接框架记录这些事件在卡夫卡通过卡夫卡生产商API。定期在指定频率卡夫卡连接配置,卡夫卡连接记录最新的抵消,出现在这些更改事件。如果卡夫卡经纪人不可用,卡夫卡连接过程运行连接器多次试图重新连接到卡夫卡经纪人。换句话说,连接器任务暂停,直到可以重新建立一个连接,此时连接器简历哪里他们离开。
连接器停止时间
如果连接器优雅地停止,数据库可以继续被使用。开云体育电动老虎机记录在PostgreSQL犯下的任何更改。连接器重启的时候,简历流变化的地方重新开始,也就是说,它生成变化事件记录所有数据库更改了同时连接器停了下来。开云体育电动老虎机
正确配置卡夫卡集群能够处理大吞吐量。卡夫卡连接是根据卡夫卡写的最佳实践,并给予足够的资源卡夫卡连接连接器还可以处理大量数据库变更事件。开云体育电动老虎机正因为如此,停了一段时间后,Debezium连接器重新启动时,它很可能赶上的数据库更改时停止。开云体育官方注册网址开云体育电动老虎机如何迅速发生取决于卡夫卡的功能和性能和体积的变化在PostgreSQL的数据。