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

开云体育官方注册网址为PostgreSQL Debezium连接器

Debe开云体育官方注册网址zium PostgreSQL连接器捕获一个PostgreSQL数据库行级模式的变化。开云体育电动老虎机PostgreSQL的信息版本兼容的连接器,看到开云体育官方注册网址Debezium释放概述

第一次连接到一个PostgreSQL服务器或集群,连接器需要一致的快照的所有模式。快照完成之后,连接器不断捕捉行级变化,插入、更新和删除数据库内容和致力于一个PostgreSQL数据库。开云体育电动老虎机连接器生成数据更改事件记录和小溪卡夫卡的话题。为每个表,默认行为是连接器流所有生成的事件到一个单独的卡夫卡主题表。应用程序和服务消费主题的数据更改事件记录。

概述

PostgreSQL的逻辑解码功能是在version 9.4中引入的。它是一种机制,允许提取的变化,是致力于事务日志和以用户友好的方式处理这些变化的帮助输出插件。输出插件使客户消费的变化。

PostgreSQL连接器包含两个主要部分,共同努力,读取和处理数据库更改:开云体育电动老虎机

  • 一个逻辑解码输出插件。你可能需要安装插件,您选择使用的输出。您必须配置一个复制槽使用你选择的输出插件在运行PostgreSQL服务器之前。这个插件可以是下列之一:

    • decoderbufs基于Protobuf Debezium社区和维护。开云体育官方注册网址

    • pgoutput是标准的逻辑在PostgreSQL 10 +解码输出插件。它是由PostgreSQL社区维护,使用PostgreSQL本身逻辑复制。这个插件总是存在不需要安装额外的库。Debe开云体育官方注册网址zium连接器解释原始复制事件流直接进入更改事件。

  • Java代码(实际卡夫卡连接连接器),读取变化产生的选择逻辑解码输出插件。它使用PostgreSQL的流复制协议,通过PostgreSQLJDBC驱动程序

连接器生成一个更改事件对于每一行级插入、更新和删除操作,被捕并发送更改事件记录为每个表在一个单独的卡夫卡的话题。客户端应用程序读卡夫卡的主题对应于感兴趣的数据库表,并可以对每个行级事件他们收到这些话题。开云体育电动老虎机

PostgreSQL正常清洗写前日志(细胞膜)一段时间后段。这意味着所有的连接器没有完整的历史变化,已经到数据库。开云体育电动老虎机因此,当第一PostgreSQL连接器连接到一个特定的PostgreSQL数据库,它开始执行开云体育电动老虎机一致的快照每个数据库的模式。开云体育电动老虎机连接器完成后快照,它继续流变化的确切点快照。这种方式,连接器从所有的数据都是一致的,不忽略任何变化所做快照时被采取。

连接器是失败的宽容。随着连接器读取的变化和产生的事件,每个事件记录犯下的位置。如果连接器停止任何理由(包括通信失败,网络问题,或崩溃),在重新启动连接器继续阅读WAL它去年离开。这包括快照。如果连接器停止在一个快照,连接器开始一个新的快照时重新启动。

连接器依赖和反映了PostgreSQL逻辑解码功能,它具有以下限制:

  • 逻辑解码不支持DDL的变化。这意味着连接器无法回到消费者报告DDL变化事件。

  • 逻辑解码复制槽只支持服务器。有一个PostgreSQL服务器集群时,连接器只能运行在活跃服务器。它不能运行在温暖的备用副本。如果服务器发生故障或降职,连接器停止。后服务器已经恢复,您可以重新启动连接器。如果一个不同的PostgreSQL服务器已经晋升为重新启动之前,调整连接器配置连接器。

当事情出错的行为描述什么连接器时,是一个问题。

开云体育官方注册网址Debezium目前仅支持数据库与u开云体育电动老虎机tf - 8字符编码。用一个字节字符编码,不可能正确流程包含扩展的ASCII码字符的字符串。

连接器是如何工作的

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

安全

使用Debezium连开云体育官方注册网址接器流变化从一个PostgreSQL数据库,数据库中的连接器必须与特定的操作权限。开云体育电动老虎机尽管格兰特的一个方法是为用户提供必要的特权超级用户特权,这样做可能使您的PostgreSQL数据未经授权的访问。而不是给予过度特权Debezium用户,最好创建一个专用Debezium复制用户你授予特定的特权。开云体育官方注册网址

更多信息关于Debezium PostgreSQL用户配置权限,明白了开云体育官方注册网址设置权限。PostgreSQL逻辑复制安全的更多信息,见PostgreSQL的文档

快照

大多数PostgreSQL服务器配置为不保留的数据库的完整历史WAL段。开云体育电动老虎机这意味着PostgreSQL连接器将无法看到整个数据库通过阅读只有犯下的历史。开云体育电动老虎机因此,连接器第一次启动时,它执行一个初始一致的快照的数据库。开云体育电动老虎机默认行为执行快照由以下步骤组成。通过设置你可以改变这一行为snapshot.mode连接器配置属性以外的一个值最初的

  1. 开始一个事务可序列化的,只读,可延期的隔离级别,以确保后续读取该事务对单个版本的数据一致。由于随后的任何更改的数据插入,更新,删除被其他客户操作这个交易是不可见的。

  2. 读取当前位置在服务器的事务日志。

  3. 扫描数据库表和模式开云体育电动老虎机,生成一个事件为每一行和写事件到适当的table-specific卡夫卡的话题。

  4. 提交事务。

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

如果连接失败,重新平衡,或停止后第一步开始但是在第五步完成后,在重新启动连接器开始一个新的快照。连接器完成后其初始快照,PostgreSQL连接器继续流的位置在步骤2中阅读。这将确保连接器没有错过任何更新。如果连接器停止再因为任何原因,在重新启动后,连接器继续流从它之前离开的地方。

表1。选项snapshot.mode连接器配置属性
选项 描述

总是

连接器总是当它开始执行一个快照。快照完成之后,连接器持续流从步骤3在上面的序列。这种模式在这些情况下是有用的:

  • 众所周知,有些部分已被删除和不再可用。

  • 集群失败后,一个新的主要提升。的总是快照模式确保连接器没有错过之后所进行的任何更改新的主提升但连接器之前重新启动新主。

从来没有

连接器不执行快照。当连接器配置这种方式,它的行为当它开始如下。如果有以前存储的LSN卡夫卡抵消话题,连接器持续流从那个位置变化。如果没有LSN存储,连接器开始流变化时的时间点PostgreSQL服务器上创建逻辑复制槽。的从来没有快照模式是有用的只有当你知道所有的数据感兴趣的仍然是反映在细胞膜中。

initial_only

连接器执行数据库快照和停止在流任何更改事件记录。开云体育电动老虎机如果连接器已经开始,但没有完成一个快照停止之前,连接器重启快照过程和停止当快照完成。

出口

弃用,所有的模式都是无锁的。

自定义

自定义快照模式让你注入自己的实现io.开云体育官方注册网址debezium.connector.postgresql.spi.Snapshotter接口。设置snapshot.custom.class配置属性的类的类路径卡夫卡连接集群或如果使用JAR中EmbeddedEngine。更多细节,请参阅定制的快照SPI

特别的快照

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

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

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

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

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

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

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

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

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

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

类型

增量

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

数据收集

N /一个

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

附加条件

N /一个

一个可选的字符串,它指定一个条件基于表的列(s) (s),捕获的内容表的一个子集(年代)。

触发一个特别的快照

你发起一个特设的快照通过添加一个条目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发出这些剩余事件表的卡夫卡的话题。

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

Post开云体育官方注册网址greSQL的Debezium连接器不支持增量快照运行时模式变化。如果一个模式改变之前但增量快照开始发送信号然后透传配置选项开云体育电动老虎机database.autosave被设置为保守的正确处理模式的变化。

触发一个增量快照

目前,启动增量快照的唯一方法是发送一个特设快照信号源数据库上的信号表。开云体育电动老虎机你提交一个信号信号表的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,类型,数据参数对应的命令信号表的字段

    下表描述了参数的例子:

    表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

快照

指定类型的快照操作运行。
目前,唯一有效的选项是默认值,增量
指定一个类型在你提交的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,类型,数据参数对应的信号命令信号表的字段

    下表描述了参数的例子:

    表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主键信息不同步的更改事件逻辑解码插件生成。这个小期间,消息可以创建一个不一致的关键结构。为了防止这种不一致,更新主键结构如下:

  1. 把数据库或应用程开云体育电动老虎机序变成只读模式。

  2. 让Deb开云体育官方注册网址ezium处理所有剩余的事件。

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

  4. 更新相关表中定义主键。

  5. 把数据库或应用程开云体育电动老虎机序到读/写模式。

  6. 重启Debezi开云体育官方注册网址um。

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_collectionevent_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)…}},
表5所示。更改事件基本内容的概述
字段名 描述

1

模式

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

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

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 "}}
表6所示。描述变化事件的关键
字段名 描述

1

模式

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

2

PostgreSQL_server.inventory.customers.Key

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

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

  • 库存是数据库包含表开云体育电动老虎机改变了。

  • 客户是表更新。

3

可选

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

4

字段

指定每个字段,预计有效载荷,包括每个字段的名字、索引和模式。

5

有效载荷

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

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

如果表没有主键或唯一键,然后更改事件的关键是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)}}
表7所示。的描述创建事件值字段
字段名 描述

1

模式

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

2

的名字

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

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

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

3

的名字

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

4

的名字

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

5

有效载荷

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

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

6

之前

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

这个字段是否依赖于可用副本的身份设置为每个表。

7

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

8

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

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

  • 连接器类型和名称

  • 开云体育电动老虎机数据库和表包含新行

  • Stringified JSON数组的额外补偿信息。第一个值总是最后一个LSN,第二个值总是当前LSN。要么价值可能

  • 模式名

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

  • ID的事务被执行的操作

  • 抵消的操作在数据库日志开云体育电动老虎机

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

9

人事处

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

  • c=创建

  • u=更新

  • d=删除

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

  • t=截断

  • =消息

10

ts_ms

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

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

更新事件

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

{"模式":{…},“有效载荷”:{“前”:{(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)}}
表8所示。的描述更新事件值字段
字段名 描述

1

之前

一个可选的字段,其中包含值在数据库提交前的行。开云体育电动老虎机在这个例子中,只有主键列,id存在,因为表的副本的身份设置,在默认情况下,默认的。+一个更新事件包含之前的所有列的值的行,你将不得不改变客户通过运行表ALTER TABLE客户身份全部复制品

2

一个可选的字段指定事件发生后的状态行。在这个例子中,first_name值是现在安妮玛丽

3

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

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

  • 连接器类型和名称

  • 开云体育电动老虎机数据库和表包含新行

  • 模式名

  • 如果事件是一个快照(总是的一部分更新事件)

  • ID的事务被执行的操作

  • 抵消的操作在数据库日志开云体育电动老虎机

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

4

人事处

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

5

ts_ms

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

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

更新列一行的主要/唯一键改变值的行键。当一个关键变化,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)}}
表9所示。的描述删除事件值字段
字段名 描述

1

之前

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

在这个例子中,之前因为表字段只包含主键列副本的身份设置是默认的

2

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

3

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

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

  • 连接器类型和名称

  • 开云体育电动老虎机数据库和表,其中包含删除行

  • 模式名

  • 如果事件是一个快照(总是的一部分删除事件)

  • ID的事务被执行的操作

  • 抵消的操作在数据库日志开云体育电动老虎机

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

4

人事处

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

5

ts_ms

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

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

一个删除更改事件记录为消费者提供了信息需要处理删除这一行。

消费者能够处理删除事件生成的表没有主键,设置表的副本的身份完整的。当一个表没有主键表的副本的身份被设置为默认的没有什么,一个删除事件没有之前字段。

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)}}
表10。的描述截断事件值字段
字段名 描述

1

强制性字段描述了事件源的元数据。在一个截断事件的价值,场结构是一样的创建,更新,删除事件同样的表,提供了该元数据:

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

  • 连接器类型和名称

  • 开云体育电动老虎机数据库和表包含新行

  • 模式名

  • 如果事件是一个快照(总是的一部分删除事件)

  • ID的事务被执行的操作

  • 抵消的操作在数据库日志开云体育电动老虎机

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

2

人事处

强制性的字符串描述操作的类型。的人事处字段值是t,表示这个表被截断。

3

ts_ms

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

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

在一个单一的截断声明适用于多个表,一个截断更改事件记录每个截断表将会发出。

注意,因为截断事件代表一个改变了整个表,没有消息键,除非你跟单个分区处理议题,没有订购担保相关的更改事件表(创建,更新等)截断事件表。例如一个消费者可能会接收到一个更新事件后截断事件表,当这些事件读取不同的分区。

消息事件

这个事件类型只支持通过pgoutput插件在Postgres 14日+ (Postgres文档)

一个消息事件信号,一个通用的逻辑解码消息被直接插入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}}
表11所示。的描述消息事件值字段
字段名 描述

1

强制性字段描述了事件源的元数据。在一个消息事件的价值,场结构不会有模式信息对任何消息事件和只会有txId如果消息事件是事务性的。

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

  • 连接器类型和名称

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

  • 模式名(总”“消息事件)

  • 表名(总”“消息事件)

  • 如果事件是一个快照(总是的一部分消息事件)

  • ID的事务被执行的操作(对于非事务性消息事件)

  • 抵消的操作在数据库日志开云体育电动老虎机

  • 事务性消息:时间戳信息时插入到细胞膜中

  • 事务性消息;时间戳当连接器遇到消息

2

人事处

强制性的字符串描述操作的类型。的人事处字段值是,标志着这是一个消息事件。

3

ts_ms

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

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

对于非事务性消息事件,对象的ts_ms表示连接器接触的时间消息事件,而payload.ts_ms显示的时间连接器处理事件。这种差异是由于这一事实Postgres的提交时间戳不存在通用的逻辑消息格式和非逻辑不是之前的消息开始事件(时间戳信息)。

4

消息

字段包含消息的元数据

数据类型的映射

PostgreSQL连接器代表改变行等结构化事件存在的表行。事件的每一列都包含一个字段值。如何表示如果这个值取决于PostgreSQL数据类型的列。以下部分描述如何连接器PostgreSQL数据类型映射到一个文字类型和一个语义类型在事件字段。

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

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

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

基本类型

下表描述了连接器地图基本类型。

表12。PostgreSQL基本数据类型的映射
PostgreSQL数据类型 文字类型(模式类型) 语义类型(模式名称)和笔记

布尔

布尔

n /一个

位(1)

布尔

n /一个

位(> 1)

字节

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

长度模式参数包含一个整数,代表的比特数。由此产生的byte []包含位低位优先形式和大小的包含指定的位数。例如,numBytes = n / 8 + (n % 8 = = 0 ?0:1)在哪里n的比特数。

有些不同((M))

字节

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

长度模式参数包含一个整数,代表的比特数(2 ^ 31 - 1中没有给定长度的列)。由此产生的byte []包含位低位优先形式和大小的基于内容。指定的尺寸(M)存储在长度参数的io.开云体育官方注册网址debezium.data.Bits类型。

短整型,SMALLSERIAL

INT16

n /一个

整数,串行

INT32

n /一个

长整型数字,BIGSERIAL,OID

INT64

n /一个

真正的

FLOAT32

n /一个

双精度

FLOAT64

n /一个

CHAR ((M))

字符串

n /一个

VARCHAR ((M))

字符串

n /一个

字符((M))

字符串

n /一个

性格不同((M))

字符串

n /一个

TIMESTAMPTZ,时间戳和时区

字符串

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

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

TIMETZ,时间和时区

字符串

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

字符串表示的时间价值时区信息,格林尼治时间时区的地方。

区间[P]

INT64

io.开云体育官方注册网址debezium.time.MicroDuration
(默认)

的近似数微秒时间间隔使用365.25/12.0每月平均公式天。

区间[P]

字符串

io.开云体育官方注册网址debezium.time.Interval
(当interval.handling.mode被设置为字符串)

接下来的区间值的字符串表示的模式P <年> Y <月> M <天> DT <时间> H <分钟> M <秒> S例如,P1Y2M3DT4H5M6.78S

BYTEA

字节字符串

n /一个

原始字节(默认),一个base64编码的字符串,或base64-url-safe-encoded字符串,或hex-encoded字符串,根据连接器的二进制处理模式设置。

开云体育官方注册网址Debezium只支持Postgresbytea_output配置的值十六进制。看到这个文档Postgres二进制数据类型

JSON,JSONB

字符串

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

包含一个JSON文档的字符串表示,数组,或标量。

XML

字符串

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

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

UUID

字符串

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

包含一个PostgreSQL UUID值的字符串表示。

结构体

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

包含一个结构有两个FLOAT64字段,(x, y)。每个字段表示一个几何点的坐标。

LTREE

字符串

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

包含一个PostgreSQL LTREE值的字符串表示。

CITEXT

字符串

n /一个

INET

字符串

n /一个

INT4RANGE

字符串

n /一个

范围的整数。

INT8RANGE

字符串

n /一个

范围的长整型数字

NUMRANGE

字符串

n /一个

范围的数字

TSRANGE

字符串

n /一个

包含一个时间戳字符串表示的范围没有一个时区。

TSTZRANGE

字符串

n /一个

包含一个时间戳字符串表示的范围与本地系统时区。

DATERANGE

字符串

n /一个

包含的字符串表示一个日期范围。它总是有一个上限。

枚举

字符串

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

包含PostgreSQL的字符串表示枚举价值。维护组允许的值允许模式参数。

时间类型

除了PostgreSQL的TIMESTAMPTZTIMETZ数据类型,它包含时区信息,如何时间类型映射的值取决于time.precision.mode连接器配置属性。以下部分描述了这些映射:

time.precision.mode =自适应

time.precision.mode属性设置为自适应默认,连接器决定了文本类型和语义类型基于列的数据类型定义。这将确保事件完全表示数据库中的值。开云体育电动老虎机

表13。映射时time.precision.mode自适应
PostgreSQL数据类型 文字类型(模式类型) 语义类型(模式名称)和笔记

日期

INT32

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

代表时代以来的天数。

时间(1),时间(2),(3)

INT32

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

代表的是午夜的毫秒数,不包括时区信息。

(4),时间(5),(6)

INT64

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

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

时间戳(1),时间戳(2),时间戳(3)

INT64

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

代表时代以来的毫秒数,不包括时区信息。

时间戳(4),时间戳(5),时间戳(6),时间戳

INT64

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

代表时代以来的毫秒数,不包括时区信息。

time.precision.mode = adaptive_time_microseconds

time.precision.mode配置属性设置为adaptive_time_microseconds,连接器将确定时间类型的文字类型和语义类型基于列的数据类型定义。这将确保事件完全表示数据库中的值,除了所有开云体育电动老虎机时间字段是捕获为微秒。

表14。映射时time.precision.modeadaptive_time_microseconds
PostgreSQL数据类型 文字类型(模式类型) 语义类型(模式名称)和笔记

日期

INT32

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

代表时代以来的天数。

时间([P])

INT64

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

代表了时间价值以微秒为单位,不包括时区信息。PostgreSQL允许精度P范围在0 - 6存储到微秒级精度。

时间戳(1),时间戳(2),时间戳(3)

INT64

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

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

时间戳(4),时间戳(5),时间戳(6),时间戳

INT64

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

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

time.precision.mode =连接

time.precision.mode配置属性设置为连接卡夫卡,连接器使用逻辑连接类型。消费者只能处理时,这可能是有用的内置卡夫卡连接逻辑类型,无法处理可变精度时间值。然而,由于PostgreSQL支持微秒级精度,通过连接器生成的事件连接时间精度模式结果精度的损失当数据库列开云体育电动老虎机精确到小数部分的第二值大于3。

表15。映射时time.precision.mode连接
PostgreSQL数据类型 文字类型(模式类型) 语义类型(模式名称)和笔记

日期

INT32

org.apache.kafka.connect.data.Date

代表时代以来的天数。

时间([P])

INT64

org.apache.kafka.connect.data.Time

代表午夜以来的毫秒数,不包括时区信息。PostgreSQL允许P范围在0 - 6存储到微秒级精度,尽管这种模式结果在精度的损失P大于3。

时间戳([P])

INT64

org.apache.kafka.connect.data.Timestamp

代表时代以来的毫秒数,不包括时区信息。PostgreSQL允许P范围在0 - 6存储到微秒级精度,尽管这种模式结果在精度的损失P大于3。

时间戳类型

时间戳类型代表没有时区的时间戳信息。这些列转化为一个等价的基于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逻辑类型为所有小数,数字列。这是默认的模式。

表16所示。映射时decimal.handling.mode精确的
PostgreSQL数据类型 文字类型(模式类型) 语义类型(模式名称)和笔记

数字((M [D]))

字节

org.apache.kafka.connect.data.Decimal

规模模式参数包含一个整数代表多少小数点位数转移。

小数((M [D]))

字节

org.apache.kafka.connect.data.Decimal

规模模式参数包含一个整数代表多少小数点位数转移。

钱((M [D]))

字节

org.apache.kafka.connect.data.Decimal

规模模式参数包含一个整数代表多少小数点位数转移。的规模模式参数决定的money.fraction.digits连接器配置属性。

有一个例外。当数字小数类型没有规模约束,使用来自数据库的值有不同的每个值(变量)的规模。开云体育电动老虎机在这种情况下,连接器使用io.开云体育官方注册网址debezium.data.VariableScaleDecimal,其中包含价值和价值转移的规模。

表17所示。的映射小数数字当没有规模约束类型
PostgreSQL数据类型 文字类型(模式类型) 语义类型(模式名称)和笔记

数字

结构体

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

与两个字段包含一个结构:规模类型的INT32包含转移的规模和价值价值类型的字节包含任何范围的原始值形式。

小数

结构体

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

与两个字段包含一个结构:规模类型的INT32包含转移的规模和价值价值类型的字节包含任何范围的原始值形式。

decimal.handling.mode属性设置为代表所有的连接器小数,数字值作为Java双值并将它们编码见下表。

表18。映射时decimal.handling.mode
PostgreSQL数据类型 文字类型(模式类型) 语义类型(模式名称)

数字((M [D]))

FLOAT64

小数((M [D]))

FLOAT64

钱((M [D]))

FLOAT64

最后可能的设置decimal.handling.mode配置属性字符串。在这种情况下,连接器代表小数,数字值格式化的字符串表示,并将它们编码见下表。

表19。映射时decimal.handling.mode字符串
PostgreSQL数据类型 文字类型(模式类型) 语义类型(模式名称)

数字((M [D]))

字符串

小数((M [D]))

字符串

钱((M [D]))

字符串

PostgreSQL支持(不是一个数字)作为一种特殊的值存储在小数/数字值的设置decimal.handling.mode字符串。在这种情况下,连接器编码作为Double.NaN或字符串常量

HSTORE类型

的设置PostgreSQL连接器配置属性hstore.handling.mode决定了连接器的地图HSTORE值。

dhstore.handling.mode属性设置为json(默认),连接器HSTORE值作为字符串表示JSON值并将它们编码见下表。当hstore.handling.mode属性设置为地图连接器使用地图模式类型HSTORE值。

表20。映射HSTORE数据类型
PostgreSQL数据类型 文字类型(模式类型) 语义类型(模式名称)和笔记

HSTORE

字符串

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

示例:使用JSON转换器输出表示{“关键”:“val”}

HSTORE

地图

n /一个

示例:使用JSON转换器输出表示{“关键”:“val”}

域类型

PostgreSQL支持用户定义的类型基于其他潜在的类型。当使用这些列类型,Debezium公开列表示基于完整的类型层次结构开云体育官方注册网址。

捕获的变化列使用PostgreSQL域类型需要特殊考虑。当一列定义包含一个域类型扩展一个默认的数据库类型和域类型定义了一个定制的长度或规模,生成的模式继承定义长度或规模。开云体育电动老虎机

当一列定义包含一个域类型扩展另一个域类型定义了一个定制长度或规模,生成的模式继承定义的长度或规模,因为信息不是PostgreSQL驱动程序中可用的列元数据。

网络地址类型

PostgreSQL数据类型可以存储IPv4, IPv6, MAC地址。最好是使用这些类型而不是纯文本类型来存储网络地址。网络地址类型提供输入错误检查和专业运营商和功能。

表21。为网络地址类型映射
PostgreSQL数据类型 文字类型(模式类型) 语义类型(模式名称)和笔记

INET

字符串

n /一个

IPv4和IPv6网络

CIDR

字符串

n /一个

IPv4和IPv6主机和网络

MACADDR

字符串

n /一个

MAC地址

MACADDR8

字符串

n /一个

行- 64格式的MAC地址

PostGIS类型

PostgreSQL连接器支持所有PostGIS数据类型

表22。PostGIS数据类型的映射
PostGIS数据类型 文字类型(模式类型) 语义类型(模式名称)和笔记

几何
(平面)

结构体

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

与两个字段包含一个结构:

  • srid (INT32)——空间引用系统标识符定义什么类型的几何对象存储在结构。

  • wkb(字节)——几何对象编码的二进制表示Well-Known-Binary格式。

地理位置
(球)

结构体

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

与两个字段包含一个结构:

  • srid (INT32)——空间引用系统标识符定义什么类型的地理对象存储在结构。

  • wkb(字节)——几何对象编码的二进制表示Well-Known-Binary格式。

烤的价值观

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

这种支持目前只能扩展到明确的使用功能。例如,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_replication1

  • 验证wal_level参数设置为逻辑通过运行查询显示wal_level作为数据库RD开云体育电动老虎机S主用户。这可能不是在分域复制设置。你不能手动设置这个选项。它是自动改变rds.logical_replication参数设置为1。如果wal_level没有设置为逻辑你前面的修改之后,这可能是因为实例后必须重新启动参数组的变化。重启你的维护窗口期间出现,也可以发起一个手动重启。

  • 设置Debezi开云体育官方注册网址umplugin.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插件可用。你需要创建一个复制用户并提供正确的权限。

在使用pgoutput插件,建议您配置过滤后的随着publication.autocreate.mode。如果你使用all_tables的默认值publication.autocreate.mode没有找到,出版,连接器使用 试图创建一个为所有表创建出版< publication_name >;,但这失败由于缺乏权限。

安装逻辑解码输出插件

看到逻辑解码输出插件安装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服务器如下:

  1. 在启动时加载插件,添加以下的postgresql.conf文件:

    #模块shared_preload_libraries = ' decoderbufs '(1)
    1 指示服务器加载decoderbufs逻辑解码插件在启动时(插件中设置的名称Protobuf使文件)。
  2. 配置复制槽不管所使用的解码器,指定以下postgresql.conf文件:

    #复制wal_level =逻辑(1)
    1 指示服务器使用逻辑解码写前日志。

根据您的需求,您可能需要使用Debezium时设置其他PostgreSQL流复制参数。开云体育官方注册网址例子包括max_wal_sendersmax_replication_slots提高连接器的数量可以同时发送服务器,和wal_keep_size限制的最大的WAL大小复制槽将保留。关于配置流复制的更多信息,请参阅PostgreSQL的文档

开云体育官方注册网址Debezium使用PostgreSQL的逻辑解码,它使用复制插槽。复制槽保证保留所有细胞膜部分所需Debezium即使在Debezium中断。开云体育官方注册网址出于这个原因,重要的是要密切关注复制槽为了避免太多的磁盘消费和其他条件,如目录膨胀如果复制槽保持闲置太久。有关更多信息,请参见PostgreSQL流复制文档

如果你正在与一个synchronous_commit设置其他比,建议设置wal_writer_delay等一个值10毫秒来实现低延迟变化的事件。否则,其默认值是应用,增加了大约200毫秒的延迟。

设置权限

建立一个PostgreSQL服务器运行Debezium连接器需要一个数据库用户能开云体育官方注册网址够进行复制。开云体育电动老虎机复制可以只有一个数据库用户执行适当的权限,只有数量配置的主机。开云体育电动老虎机

尽管如此,在默认情况下,超级有必要的复制登录角色,如前所述安全,最好不要提供Debezium复制权限提升用户。开云体育官方注册网址相反,创建一个Debezium用户所开云体育官方注册网址需的最小权限。

先决条件
  • PostgreSQL管理权限。

过程
  1. 为用户提供复制权限,定义一个PostgreSQL的角色至少复制登录权限,然后给予这个角色给用户。例如:

    创建角色<名称>复制登录;

设置权限使Debezium创建PostgreSQL出版物时开云体育官方注册网址使用pgoutput

如果你使用pgoutput作为逻辑解码插件,Debezium必须运行在数据库中作为用户与特开云体育官方注册网址定的特权。开云体育电动老虎机

开云体育官方注册网址Debezium流PostgreSQL源表的更改事件出版物创建的表。出版物包含一组过滤的变化从一个或多个表生成的事件。在每个发布的数据过滤基于出版规范。规范由PostgreSQL数据库管理员可以创建或由Debezium连接器。开云体育官方注册网址开云体育电动老虎机允许Debezium Pos开云体育官方注册网址tgreSQL连接器创建出版物和指定数据复制,连接器必须与特定的操作数据库中的特权。开云体育电动老虎机

有几个选项确定出版物是如何创建的。一般来说,最好是手动创建出版物的表你想捕获,在你设置连接器。然而,您可以配置您的环境,允许Debezium自动创建的出版物,并指定被添加到他们的数据。开云体育官方注册网址

开云体育官方注册网址Debezium用途包括和排除列表属性列表来指定如何插入数据公布。更多信息的选项启用Debezium创建出版物,明白了开云体育官方注册网址publication.autocreate.mode

Debe开云体育官方注册网址zium创建一个PostgreSQL出版,它必须作为一个用户,运行以下特权:

  • 复制数据库中的特权将表添加到出版。开云体育电动老虎机

  • 创建数据库添加出版物上的特权。开云体育电动老虎机

  • 选择权限表复制初始表数据。表业主自动选择权限表。

将表添加到出版,用户必须是一个表的所有者。但由于源表已经存在,您需要一个机制来共享所有权与原来的所有者。启用共享所有权,您创建一个PostgreSQL复制组,然后添加现有表的所有者和复制用户组。

过程
  1. 创建一个复制组。

    创建角色< replication_group >;
  2. 表的原始所有者添加到组中。

    授予REPLICATION_GROUP< original_owner >;
  3. 添加Debezi开云体育官方注册网址um复制用户组。

    授予REPLICATION_GROUP< replication_user >;
  4. 所有权转移的表< 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连接器存档,配置连接器,并开始通过添加其配置卡夫卡连接连接器。

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

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

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

  4. 重新启动卡夫卡连接过程去接新的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连接器,创建一个连接器配置和配置添加到您的卡夫卡连接集群。

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

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

结果

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

连接器属性

Debe开云体育官方注册网址zium PostgreSQL连接器有许多配置属性,您可以使用它们来实现正确的连接器为您的应用程序的行为。许多属性的默认值。属性信息的组织结构如下:

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

表23。需要连接器配置属性
财产 默认的 描述

没有默认的

独特的连接器的名称。再次尝试注册名称相同的就会失败。这个属性是必需的所有卡夫卡连接连接器。

没有默认的

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

1

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

decoderbufs

PostgreSQL的名称逻辑解码插件PostgreSQL服务器上安装。

支持的值decoderbufs,pgoutput

开云体育官方注册网址

PostgreSQL的名称创建逻辑解码槽流变化从一个特定的插件特定数据库/模式。开云体育电动老虎机服务器使用这个槽流事件Debezium连接器配置。开云体育官方注册网址

槽名称必须符合PostgreSQL复制槽命名规则的状态:“每个复制槽有一个名称,它可以包含小写字母,数字,下划线字符。”

是否要删除逻辑复制槽当连接器停止在一个优雅的,预期的方式。默认行为是复制槽仍为连接器配置连接器时停止。当连接器重启,拥有相同的复制槽使连接器在它停止的地方开始处理。

设置为真正的只有在测试或开发环境。减少槽允许数据库丢弃WAL段。开云体育电动老虎机当连接器重启它执行一个新的快照也可以继续从卡夫卡的持久抵消连接补偿的话题。

dbz_publication

PostgreSQL出版物的名称创建当使用流的变化pgoutput

此出版物是在创建启动如果它不存在,它包括所有的表。开云体育官方注册网址Debezium然后应用自己的包括/排除列表过滤,如果配置,限制出版改变事件感兴趣的特定的表。连接器用户必须拥有超级用户权限来创建这个出版,所以它通常是更可取的创建开始前连接器首次出版。

如果出版已经存在,对所有表或配置表的一个子集,Debezium使用出版的定义。开云体育官方注册网址

没有默认的

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

5432年

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

没有默认的

PostgreSQL数据库用户名连接到Post开云体育电动老虎机greSQL数据库服务器。

没有默认的

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

没有默认的

流的PostgreSQL数据库的名称更改。开云体育电动老虎机

没有默认的

主题提供一个名称空间前缀为特定PostgreSQL数据库服务器或集群Debezium捕捉变化。开云体育官方注册网址开云体育电动老虎机前缀应该是唯一的在所有其他连接器,因为它是用作所有卡夫卡主题主题名称前缀接收记录这个连接器。只有字母数字字符,连字符,点和强调必须用于数据库服务器逻辑名。开云体育电动老虎机

不改变这个属性的值。如果你改变名称值,重启之后,而不是继续发出事件最初的话题,连接器发出后续事件主题的名字是基于新值。

没有默认的

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

匹配一个模式的名字,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个标识符模式;它不可能出现在一个模式匹配的子字符串的名字。
如果包含该属性的配置,也不设置schema.exclude.list财产。

没有默认的

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

匹配一个模式的名字,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个标识符模式;它不可能出现在一个模式匹配的子字符串的名字。
如果包含该属性的配置,不设置schema.include.list财产。

没有默认的

一个可选,以逗号分隔的正则表达式匹配完全限定表标识符表你想捕捉的变化。设置此属性时,连接器捕捉变化只从指定的表。每个标识符的形式schemaName的表。默认情况下,连接器捕捉变化在每一个非系统的表在每个模式的变化被抓获。

匹配一个表的名称,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个表标识符;可能存在不匹配的子字符串表中的名称。
如果包含该属性的配置,也不设置table.exclude.list财产。

没有默认的

一个可选,以逗号分隔的正则表达式匹配完全限定表标识符表你不希望捕获的变化。每个标识符的形式schemaName的表。设置此属性时,连接器捕捉变化从每个表你没有指定。

匹配一个表的名称,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个表标识符;可能存在不匹配的子字符串表中的名称。
如果包含该属性的配置,不设置table.include.list财产。

没有默认的

可选,以逗号分隔的正则表达式匹配列的完全限定名称应该包含在变更事件记录值。完全限定名称列的形式schemaName的表columnName

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

没有默认的

可选,以逗号分隔的正则表达式匹配的完全限定名称列应该排除在更改事件记录值。完全限定名称列的形式schemaName的表columnName

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

自适应

时间、日期和时间戳可以表示不同的精度:

自适应捕获时间和时间戳值在数据库中一样使用毫秒、微秒,或纳秒精度值基于数据库列的类型。开云体育电动老虎机

adaptive_time_microseconds抓住了日期,日期时间和时间戳值在数据库中一样使用毫秒,微秒或纳秒精度值基于数据库列的类型。开云体育电动老虎机是一个例外时间类型字段,它总是捕获为微秒。

连接总是代表着时间和时间戳值通过卡夫卡连接的内置表示时间,日期,时间戳使用毫秒精度无论数据库列的精度。开云体育电动老虎机看到时间值

精确的

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

精确的代表值通过使用java.math.BigDecimal以二进制形式表示值更改事件。

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

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

地图

指定连接器应如何处理的值hstore列:

地图代表值通过使用地图

json代表值通过使用json字符串。这个设置编码等格式化的字符串值{“关键”:“val”}。看到PostgreSQLHSTORE类型

数字

指定连接器应如何处理的值时间间隔列:

数字代表间隔使用近似数微秒。

字符串代表间隔完全通过使用字符串模式表示P <年> Y <月> M <天> DT <时间> H <分钟> M <秒> S。例如:P1Y2M3DT4H5M6.78S。看到PostgreSQL基本类型

禁用

是否使用加密的连接到PostgreSQL服务器。选项包括:

禁用使用一个未加密的连接。

需要使用一个安全(加密)连接,,如果不能建立失败。

verify-ca表现得像需要还验证服务器TLS证书根据配置的证书颁发机构(CA)证书,或失败如果没有有效匹配的CA证书。

verify-full表现得像verify-ca但也验证服务器证书匹配连接器试图连接的主机。看到PostgreSQL的文档为更多的信息。

没有默认的

文件的路径为客户机包含SSL证书。看到PostgreSQL的文档为更多的信息。

没有默认的

的路径文件,其中包含SSL客户机的私钥。看到PostgreSQL的文档为更多的信息。

没有默认的

密码访问的客户端私钥文件规定开云体育电动老虎机database.sslkey。看到PostgreSQL的文档为更多的信息。

没有默认的

文件,其中包含的路径的根证书(s)服务器验证。看到PostgreSQL的文档为更多的信息。

真正的

启用TCP点火电极探针来验证数据库连接仍然活着。开云体育电动老虎机看到PostgreSQL的文档为更多的信息。

真正的

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

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

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

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

n /一个

一个可选,以逗号分隔的正则表达式匹配的完全限定名称基于字符的列。设置该属性如果你想截断时的一组列中的数据超过指定的字符数长度在属性名。集长度为一个正整数的值,例如,column.truncate.to.20.chars

的完全限定名称列观察下列格式:< schemaName ><表>< columnName >。匹配一个列的名称,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个字符串列的名称;表达式不匹配的子字符串可能出现在一个列名。

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

n /一个

一个可选,以逗号分隔的正则表达式匹配的完全限定名称基于字符的列。设置该属性如果你希望连接器面具的一组列的值,例如,如果他们包含敏感数据。集长度一个正整数指定列中的数据替换为星号的数量(*)指定的字符长度在属性名。集长度0(零),用一个空字符串替换指定列中的数据。

的完全限定名称列观察下列格式:schemaName的表columnName。匹配一个列的名称,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个字符串列的名称;表达式不匹配的子字符串可能出现在一个列名。

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

n /一个

一个可选,以逗号分隔的正则表达式匹配的完全限定名称基于字符的列。完全限定名称列的形式< schemaName ><表>< columnName >
匹配的名称列Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个字符串列的名称;表达式不匹配的子字符串可能出现在一个列名。在生成的更改事件记录,指定列的值替换为假名。

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

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

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

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

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

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

n /一个

可选,以逗号分隔的正则表达式匹配列,您想要的完全限定名称连接器排放额外参数代表列元数据。设置此属性时,连接器将以下字段添加到事件记录的模式:

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

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

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

这些参数传递一个列的原始类型名称和长度(不同宽度的类型),分别。
使连接器正确地发出这个额外的数据可以帮助大小水槽数据库中特定的数字或字符的列。开云体育电动老虎机

的完全限定名称列观察下列格式:开云体育电动老虎机数据库名的表columnName,或开云体育电动老虎机数据库名schemaName的表columnName
匹配一个列的名称,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个字符串列的名称;表达式不匹配的子字符串可能出现在一个列名。

n /一个

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

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

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

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

这些参数传递一个列的原始类型名称和长度(不同宽度的类型),分别。
使连接器正确地发出这个额外的数据可以帮助大小水槽数据库中特定的数字或字符的列。开云体育电动老虎机

的完全限定名称列观察下列格式:开云体育电动老虎机数据库名的表typeName,或开云体育电动老虎机数据库名schemaName的表typeName
匹配一个数据类型的名称,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个字符串数据类型的名称;表达式不匹配的子字符串可能存在的类型名称。

PostgreSQL-specific数据类型名称的列表,请参阅PostgreSQL数据类型的映射

空字符串

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

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

建立一个自定义消息键表,列出表格,紧随其后的是列使用消息键。每个列表项采用以下格式:

< fully-qualified_tableName >:< keyColumn >,< keyColumn >

基地主要在多个列的表名称,插入逗号之间的列名。

每一个完全限定表名是一个正则表达式在以下格式:

< schemaName ><表>

属性可以包含多个表的条目。使用分号来单独的表条目列表中。

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

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

为表inventory.customer,列pk1pk2指定消息键。为在任何模式表,列pk3pk4服务器消息键。

列的数量没有限制,您使用它来创建自定义消息键。然而,最好使用所需的最小数量,指定一个唯一键。

all_tables

只适用于当流变化通过使用pgoutput插件。设置决定如何创建一个出版应该工作。指定以下值之一:

all_tables——如果存在出版,连接器使用它。如果发布不存在,连接器为数据库中的所有表创建一个出版的连接器捕捉变化。开云体育电动老虎机创建一个发布它的连接器必须通过数据库访问数据库用户帐户创建出版物和执行许可复制。开云体育电动老虎机您授予所需的许可使用以下SQL命令为所有表创建出版< publication_name >;

禁用——连接器并不试图创建一个出版。数据开云体育电动老虎机库管理员或用户配置为执行复制必须创造了在运行连接器之前出版。如果连接器不能找到出版,连接器将抛出一个异常,停止。

过滤后的——如果存在出版,连接器使用它。如果没有出版,连接器为表创建一个新的出版物匹配当前指定的过滤器配置schema.include.list,schema.exclude.list,table.include.list,table.exclude.list连接器的配置属性。例如:为表创建出版< publication_name > < tbl1、tbl2 tbl3 >。如果出版存在,相匹配的连接器更新表的发布当前过滤器配置。例如:改变出版< publication_name >设置表< tbl1、tbl2 tbl3 >

字节

指定二进制(bytea)列应该在改变事件:

字节将二进制数据表示为字节数组。

base64将二进制数据表示为base64编码的字符串。

base64-url-safe将二进制数据表示为base64-url-safe-encoded字符串。

十六进制将二进制数据表示为hex-encoded (base16)字符串。

没有一个

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

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

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

  • avro_unicode替换下划线或字符,不能用于像_uxxxx Avro与相应的unicode类型名称。注意:_是一个转义序列类似于Java反斜杠

没有一个

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

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

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

  • avro_unicode替换下划线或字符,不能用于像_uxxxx Avro与相应的unicode类型名称。注意:_是一个转义序列类似于Java反斜杠

看到Avro命名为更多的细节。

2

指定转换时应该使用多少小数位数Postgres类型java.math.BigDecimal代表的值改变的事件。适用于只有当decimal.handling.mode被设置为精确的

没有默认的

可选,以逗号分隔的正则表达式匹配逻辑解码消息前缀的名称,你想要捕获的连接器。默认情况下,连接器捕获所有逻辑解码信息。当这个属性设置中,连接器捕获只有逻辑解码消息指定的前缀属性。所有其他逻辑解码消息被排除在外。

匹配消息的名字前缀,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个消息前缀字符串;表达式不匹配的子字符串可能出现在一个前缀。

如果包含该属性的配置,也不设置message.prefix.exclude.list财产。

对有关的结构信息消息事件和对他们的顺序语义,明白了消息事件

没有默认的

可选,以逗号分隔的正则表达式匹配逻辑解码消息的名称前缀,您不希望捕获的连接器。当这个属性设置,连接器不捕捉逻辑解码消息使用指定的前缀。所有其他消息捕获。
排除所有逻辑解码信息,设置这个属性的值。*

匹配消息的名字前缀,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个消息前缀字符串;表达式不匹配的子字符串可能出现在一个前缀。

如果包含该属性的配置,不还message.prefix.include.list财产。

对有关的结构信息消息事件和对他们的顺序语义,明白了消息事件

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

表24。先进的连接器配置属性
财产 默认的 描述

没有默认的

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

国际标准图书编号

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

对于每一个转换配置连接器,您必须添加一个.type属性,该属性指定了fully-qualifed实现converter接口的类的名称。的.type财产使用以下格式:

< converterSymbolicName >.type

例如,

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

如果你想进一步控制配置转换器的行为,您可以添加一个或多个配置参数值传递给转换器。把任何额外的配置参数和一个转换器,前缀符号名称的参数名称的转换器。
例如,

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

最初的

指定的标准执行快照当连接器开始:

最初的——连接器执行快照只有当没有记录补偿逻辑服务器的名称。

总是——连接器连接器开始每次执行一个快照。

从来没有——连接器从未执行快照。当连接器配置这种方式,它的行为当它开始如下。如果有以前存储的LSN卡夫卡抵消话题,连接器持续流从那个位置变化。如果没有LSN存储,连接器开始流变化时的时间点PostgreSQL服务器上创建逻辑复制槽。的从来没有快照模式是有用的只有当你知道所有的数据感兴趣的仍然是反映在细胞膜中。

initial_only——连接器执行初始快照,然后停止,不处理任何后续变化。

出口——弃用

自定义——连接器执行根据设定的一个快照snapshot.custom.class房地产,这是一个自定义的实现io.开云体育官方注册网址debezium.connector.postgresql.spi.Snapshotter接口。

有关更多信息,请参见snapshot.mode选项

没有默认的

一个完整的Java类的名称是一个实现io.开云体育官方注册网址debezium.connector.postgresql.spi.Snapshotter接口。需要的时候snapshot.mode属性设置为自定义。看到定制的快照SPI

所有表中指定table.include.list

一个可选,以逗号分隔的正则表达式匹配的完全限定名称(< schemaName >。<表>)表包括的一个快照。指定的物品必须命名的连接器table.include.list财产。这个属性生效只有连接器snapshot.mode除了属性设置为一个值从来没有
这个属性不会影响增量快照的行为。

匹配一个表的名称,Debezium适用于您指定的正则表达式开云体育官方注册网址锚定正则表达式。即指定表达式匹配整个字符串表的名称;可能存在不匹配的子字符串表中的名称。

10000年

正整数的值指定最大的时间(以毫秒为单位)等来获取表锁在执行一个快照。如果连接器不能获得表锁在这个时间间隔,快照就会失败。连接器如何执行快照提供细节。

没有默认的

指定的表行包括一个快照。使用属性如果你想要一个快照包含只有一个子集的一个表中的记录。这个属性只影响快照。它不适用于事件连接器读取的日志。

属性包含一个以逗号分隔的完全限定表名的形式< 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

失败

指定连接器应该如何应对异常事件的处理过程中:

失败传播例外,表示问题事件的偏移,导致连接器停止。

警告日志的抵消问题事件,事件的跳过,继续处理。

跳过跳过问题事件,并继续处理。

2048年

正整数的值指定的最大大小每一批连接器的事件过程。

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字节。

500年

正整数的值指定的毫秒数连接器应该等待新的更改事件出现之前,开始处理一批事件。默认为500毫秒。

指定连接器行为当连接器遇到一个字段的数据类型是未知的。默认行为是连接器省略了字段的更改事件和记录一个警告。

将此属性设置为真正的如果您希望更改事件包含一个不透明的二进制表示的字段。这让消费者解码。你可以通过设置控制精确的表示二进制处理模式财产。

当消费者风险向后兼容性问题include.unknown.datatypes被设置为真正的。不仅可以释放之间的特定于数据库的二开云体育电动老虎机进制表示形式改变,但如果Debezium,支持的数据类型是最终的数据类型将下游的逻辑类型,需要调整的消费者。开云体育官方注册网址一般来说,当遇到不支持的数据类型,创建一个可以添加功能请求,以便支持。

没有默认的

分号分隔连接器执行的SQL语句列表时,它建立了一个JDBC连接到数据库。开云体育电动老虎机使用分号作为一个字符,而不是作为一个分隔符,指定连续两个分号,;;

连接器可以建立JDBC连接在自己的自由裁量权。因此,这个属性是用于配置会话参数,而不是执行DML语句。

连接器不执行这些语句创建一个连接时读事务日志。

10000年

频率发送复制连接状态更新到服务器,以毫秒为单位。
房地产也控制频率数据库状态检查发现一个死连接,以防数据库被关闭。开云体育电动老虎机

0

控制频率连接器发送心跳消息到卡夫卡的主题。默认行为是连接器不发送心跳消息。

心跳消息是有用的监测从数据库连接器是否接受更改事件。开云体育电动老虎机心跳消息可能有助于减少更改事件的数量时,需要发送一个连接器将重新启动。发送心跳消息,将此属性设置为一个正整数,这表明心跳消息之间的毫秒数。

心跳消息时需要有许多更新在数据库中被跟踪,但只有极少数的更新相关表格(s)和模式(s)的连接器捕捉变化。开云体育电动老虎机在这种情况下,连接器从数据库读取事务日志像往常一样但很少发出记录改为卡夫卡。开云体育电动老虎机这意味着没有抵消更新致力于卡夫卡和连接器不有机会发送最新的LSN数据库检索。开云体育电动老虎机的数据库开云体育电动老虎机保留的WAL文件包含事件已经处理的连接器。发送心跳消息使连接器发送最新的LSN检索数据库,数据库可以回收使用的磁盘空间不再需要WAL文件。开云体育电动老虎机

没有默认的

指定一个查询时,连接器在源数据库上执行连接器发送心跳消息。开云体育电动老虎机

这对解决中所描述的情况是非常有用的细胞膜的磁盘空间消费,捕捉变化从一个低流量数据库在同一个主机上作为一个高流量数据库可以防止Debezium处理开云体育电动老虎机记录和因此承认WAL位置与数据库。开云体育官方注册网址为了解决此问题,在低流量数据库中创建一个心跳表,并设置该属性的声明,将记录插入表,例如:开云体育电动老虎机

插入test_heartbeat_table(文本)值(“test_heartbeat”)

这允许从低流量数据库连接器接受变化和承认他们的lsn,从而防止无限WAL数据库主机上的增长。开云体育电动老虎机

columns_diff

指定的条件触发刷新内存模式的表。

columns_diff是最安全的模式。它确保内存模式与数据库保持同步表的模式。开云体育电动老虎机

columns_diff_exclude_unchanged_toast指示连接器刷新内存模式缓存如果有差异来自传入消息,除非不变TOASTable数据完全占差异。

这个设置可以显著改善接头性能如果有由表烤数据更新的很少部分。然而,它是可能的内存模式成为过时如果TOASTable列从桌子上掉了下来。

没有默认的

以毫秒为单位间隔,连接器之前应该等待连接器启动时执行一个快照。如果你开始集群中的多个连接器,这个属性是有用的为避免快照中断,这可能导致连接器的调整。

10240年

在一个快照,连接器批量读取表内容的行。这个属性指定批处理的最大行数。

没有默认的

分号分隔的列表参数通过配置的逻辑解码插件。例如,添加表= public.table public.table2; include-lsn = true

6

如果插槽连接到复制失败,这是连续尝试连接的最大数量。

10000年(10秒)

等待的毫秒数之间重试尝试当连接器不能连接到复制槽。

__开云体育官方注册网址debezium_unavailable_value

指定连接器提供的常数表明最初的值是一个烤的价值不是由数据库提供。开云体育电动老虎机如果设置的unavailable.value.placeholder十六进制:前缀预计剩下的字符串表示十六进制编码的八位字节。看到烤的价值观额外的细节。

决定连接器生成事件与事务与事务边界和丰富变化事件信封的元数据。指定真正的如果你想连接器。看到事务的元数据获取详细信息。

真正的

决定连接器是否应该提交的LSN源postgres数据库中的记录,这样处理WAL日志可以删除。开云体育电动老虎机指定如果你不希望连接器。请注意,如果设置LSN不会承认Debezium因此犯下日志不会被清除,可能导致磁开云体育官方注册网址盘空间的问题。用户预计处理确认LSN Debezium之外。开云体育官方注册网址

10000(10秒)

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

t

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

没有默认值

完全限定的名称数据收集,用于发送信号连接器。
使用以下格式指定集合名称:
< schemaName ><表>

1024年

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

0

多长时间,以毫秒为单位,XMIN将读取复制槽。XMIN价值提供了一个新的复制的下界槽可以开始。的默认值0禁用跟踪XMIN跟踪。

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

TopicNamingStrategy类的名称应该用于确定数据的主题名称变化,模式改变,交易,心跳事件等,默认SchemaTopicNamingStrategy

为主题名称指定分隔符,违约

10000年

大小用于举办的主题名称有界并发散列映射。这个缓存将有助于确定主题名称对应于给定的数据收集。

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

控件的名称连接器发送心跳消息的主题。主题名称有这种模式:

topic.heartbeat.prefixtopic.prefix

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

事务

控制主题的连接器的名称发送交易信息的元数据。主题名称有这种模式:

topic.prefixtopic.transaction

例如,如果话题是前缀实现,默认的主题名称fulfillment.transaction

直通连接器配置属性

连接器还支持直通配置属性在创建使用卡夫卡生产国和消费国。

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

监控

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

  • 快照指标提供连接器的信息操作在执行一个快照。

  • 流指标提供连接器的信息操作连接器时捕捉变化和流改变事件记录。

开云体育官方注册网址Debezium监控文档提供细节如何通过使用JMX公开这些指标。

快照指标

MBean开云体育官方注册网址debezium.postgres: type = connector-metrics上下文=快照,server =< postgresql.server.name >

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

下表列出了shapshot指标可用。

属性 类型 描述

字符串

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

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

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

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

string []

表的列表被连接器。

int

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

int

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

int

表的总数被包含在快照。

int

表的数量尚未复制快照。

布尔

快照是否开始。

布尔

快照是否停了下来。

布尔

快照是否中止。

布尔

快照是否完成。

总秒数,快照到目前为止,即使不完整。也包括时间快照时停了下来。

总秒数,快照是暂停。如果快照停了好几次,暂停时间增加。

Map < String,长>

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

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

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

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

属性 类型 描述

字符串

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

字符串

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

字符串

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

字符串

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

字符串

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

流指标

MBean开云体育官方注册网址debezium.postgres: type = connector-metrics、上下文=流媒体服务器=< postgresql.server.name >

下表列出了流指标可用。

属性 类型 描述

字符串

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

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

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

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

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

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

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

string []

表的列表被连接器。

int

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

int

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

布尔

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

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

处理事务的数量。

Map < String, String >

去年收到事件的坐标。

字符串

事务标识符的处理事务。

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

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

当事情出错的行为

开云体育官方注册网址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社区功能故障转移槽有助于缓解这一问题,但随着PostgreSQL 12,他们尚未实现。然而,有积极开发为PostgreSQL 13支持逻辑解码备用,这是一个主要需求使故障转移成为可能。你可以找到更多关于这个社区的线程

更多关于故障转移槽的概念这篇博客

卡夫卡连接过程停止优雅

假设卡夫卡连接正在运行在分布式模式和卡夫卡连接过程是优雅地停了下来。关闭这一过程之前,卡夫卡迁移任务进程的连接器连接到另一个组的卡夫卡连接过程。新连接器的任务开始处理之前任务的确切位置停了下来。有一个短暂的延迟在处理连接器任务优雅地停止并重新启动新的流程。

卡夫卡连接过程崩溃

如果卡夫卡连接器进程意外停止,任何连接器任务是运行终止没有记录他们最近补偿处理。当卡夫卡连接正在运行在分布式模式中,卡夫卡在其他进程重启这些连接器连接任务。然而,从去年抵消,PostgreSQL连接器的简历记录早些时候的过程。这意味着新的替换任务可能产生一些相同的更改事件被处理之前就崩溃。重复事件的数量取决于抵消冲洗周期和变化的数据量就在崩溃。

因为一些事件可能有机会复制从失败中恢复期间,消费者应该预见到一些重复的事件。开云体育官方注册网址Debezium变化是幂等的,所以一系列事件总是导致相同的状态。

在每个更改事件记录,Debezium连接器插入源特定事件的开云体育官方注册网址起源信息,包括事件的PostgreSQL服务器的时间,服务器事务的ID,位置在写前日志写事务更改。消费者可以跟踪这些信息,特别是LSN,确定一个事件是否重复。

卡夫卡变得不可用

连接器生成变化事件,卡夫卡连接框架记录这些事件在卡夫卡通过卡夫卡生产商API。定期在指定频率卡夫卡连接配置,卡夫卡连接记录最新的抵消,出现在这些更改事件。如果卡夫卡经纪人不可用,卡夫卡连接过程运行连接器多次试图重新连接到卡夫卡经纪人。换句话说,连接器任务暂停,直到可以重新建立一个连接,此时连接器简历哪里他们离开。

连接器停止时间

如果连接器优雅地停止,数据库可以继续被使用。开云体育电动老虎机记录在PostgreSQL犯下的任何更改。连接器重启的时候,简历流变化的地方重新开始,也就是说,它生成变化事件记录所有数据库更改了同时连接器停了下来。开云体育电动老虎机

正确配置卡夫卡集群能够处理大吞吐量。卡夫卡连接是根据卡夫卡写的最佳实践,并给予足够的资源卡夫卡连接连接器还可以处理大量数据库变更事件。开云体育电动老虎机正因为如此,停了一段时间后,Debezium连接器重新启动时,它很可能赶上的数据库更改时停止。开云体育官方注册网址开云体育电动老虎机如何迅速发生取决于卡夫卡的功能和性能和体积的变化在PostgreSQL的数据。