postgresql 连接示例
- 查看pgsql已有的插槽
select * from pg_replication_slots;
- 指定表(迁移 postgres 数据库下的 test 表,多个表需要用 逗号分隔 )
curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" http://10.100.11.37:8083/connectors/ -d '{"name": "pg_connector2","config": {"connector.class": "io.debezium.connector.postgresql.PostgresConnector","database.hostname":"10.2.2.171","database.port": "5432","database.user": "repuser","slot.name":"插槽名","database.password": "repuser","database.history.kafka.topic": "dbhistory.pgsql","database.dbname" : "zcdb","database.server.name": "pgsql2","table.whitelist": "public.test","plugin.name":"wal2json"}}'
- 指定库(迁移 postgres 数据库public 模式下的所有表,多个模式需要用 逗号分隔)
curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" http://10.100.11.37:8083/connectors/ -d '{"name": "pg_connector4","config": {"connector.class": "io.debezium.connector.postgresql.PostgresConnector","database.hostname":"10.2.2.171","database.port": "5432","database.user": "repuser","slot.name":"pgtest","database.password": "repuser","database.history.kafka.topic": "dbhistory.pgsql","database.dbname":"postgres","database.server.name": "pgsql4","schema.whitelist": "public","plugin.name":"wal2json","slot.drop_on_stop":"true"}}'
参照官网:https://debezium.io/documentation/reference/0.10/connectors/postgresql.html
连接器属性
除非提供默认值,否则以下配置属性是必需的。
属性 | 默认 | 描述 |
---|---|---|
name | 连接器的唯一名称。再次尝试使用相同名称注册将失败。(所有Kafka Connect连接器都需要此属性。) | |
connector.class | 连接器的Java类的名称。始终io.debezium.connector.postgresql.PostgresConnector 对PostgreSQL连接器使用值。 | |
tasks.max | 1 | 为此连接器应创建的最大任务数。PostgreSQL连接器始终使用单个任务,因此不使用该值,因此默认值始终可以接受。 |
plugin.name | decoderbufs | 安装在服务器上的Postgres 逻辑解码插件的名称。支持的值是decoderbufs ,wal2json ,wal2json_rds ,wal2json_streaming (在0.8.0.Beta1加入), wal2json_rds_streaming (在0.8.0.Beta1加入)和pgoutput (在0.10.0.Beta3加入)当处理的事务非常大时,事务中JSON 所有更改的批处理事件可能无法放入大小为1 GB的硬编码内存缓冲区中。在这种情况下,当事务中的每个更改作为单独的消息从PostgreSQL发送到Debezium时,都可以切换到所谓的流模式。 |
slot.name | debezium | 为从插件和数据库实例进行流式更改而创建的Postgres逻辑解码插槽的名称。值必须符合Postgres复制插槽的命名规则,该规则指出:“每个复制插槽都有一个名称,该名称可以包含小写字母,数字和下划线字符。” |
slot.drop_on_stop | false | 连接器有序完成时是否删除逻辑复制插槽。仅应true 在测试或开发环境中设置。删除插槽可让数据库丢弃WAL段,因此可能会发生以下情况:重新启动后,连接器无法从之前中断的WAL位置恢复。 |
publication.name | dbz_publication | 使用时为流式传输而创建的PostgreSQL出版物的名称已创建pgoutput 。如果该出版物尚不包含所有表,则将在启动时创建该出版物。然后,Debezium将使用其自己的白名单/黑名单过滤功能将更改事件限制为感兴趣的特定表(如果已配置)。请注意,连接器用户必须具有超级用户权限才能创建此发布,因此通常最好先创建发布。如果发布已经存在(针对所有表或已配置表的子集),则Debezium将改为使用定义的发布。 |
database.hostname | PostgreSQL数据库服务器的IP地址或主机名。 | |
database.port | 5432 | PostgreSQL数据库服务器的整数端口号。 |
database.user | 连接到PostgreSQL数据库服务器时要使用的PostgreSQL数据库的名称。 | |
database.password | 连接到PostgreSQL数据库服务器时使用的密码。 | |
database.dbname | 从中流式传输更改的PostgreSQL数据库的名称 | |
database.server.name | 逻辑名称,用于标识特定的PostgreSQL数据库服务器/集群并为其提供名称空间。逻辑名称在所有其他连接器上都应该是唯一的,因为它用作来自该连接器的所有Kafka主题名称的前缀。 | |
schema.whitelist | 可选的以逗号分隔的正则表达式列表,与要监视的模式名称匹配;白名单中未包含的任何架构名称都将被排除在监视范围之外。默认情况下,将监视所有非系统架构。不可与一起使用schema.blacklist 。 | |
schema.blacklist | 可选的用逗号分隔的正则表达式列表,这些列表与要从监视中排除的模式名称匹配;除系统架构外,所有未列入黑名单的架构名称都将受到监控。不可与一起使用schema.whitelist 。 | |
table.whitelist | 可选的以逗号分隔的正则表达式列表,与要监视的表的标准表标识符匹配;白名单中未包含的任何表都将被排除在监视范围之外。每个标识符的格式为schemaName。tableName。默认情况下,连接器将监视每个受监视模式中的每个非系统表。不可与一起使用table.blacklist 。 | |
table.blacklist | 可选的以逗号分隔的正则表达式列表,与要从监视中排除的表的标准表标识符匹配;黑名单中未包含的任何表格都将受到监控。每个标识符的格式为schemaName。tableName。不可与一起使用table.whitelist 。 | |
column.blacklist | 与逗号的全限定名匹配的正则表达式的可选逗号分隔列表,应将其排除在更改事件消息值之外。列的完全限定名称的格式为schemaName。tableName。columnName | |
time.precision.mode | adaptive | 可以使用不同的精度来表示时间,日期和时间戳,包括:(adaptive 默认值)使用基于数据库列类型的毫秒,微秒或纳秒精度值来捕获与数据库中完全相同的时间和时间戳值;adaptive_time_microseconds 根据数据库列的类型使用毫秒,微秒或纳秒精度值来捕获与数据库中完全相同的日期,日期时间和时间戳值,但TIME类型字段除外,它们始终以微秒为单位捕获;或connect 始终使用Kafka Connect内置的Time,Date和Timestamp表示来表示时间和时间戳记值,无论数据库列的精度如何,该表示法都使用毫秒精度。参见时间值。 |
decimal.handling.mode | precise | 指定连接器应如何处理DECIMAL 和NUMERIC 列的值:(precise 默认)使用java.math.BigDecimal 二进制形式的更改事件中表示的值精确地表示它们;或double 使用double 值表示它们,这可能会导致精度损失,但使用起来容易得多。string 选项将值编码为易于使用的格式化字符串,但会丢失有关实型的语义信息。请参见小数值。 |
hstore.handling.mode | map | 指定连接器应如何处理hstore 列的值:(map 默认值)表示使用MAP ;或json 使用表示它们json string 。json 选项将值编码为格式字符串,例如{"key" : "val"} 。请参见HStore值。 |
database.sslmode | disable | 是否使用到PostgreSQL服务器的加密连接。选项包括:禁用(默认)以使用未加密的连接;要求使用安全(加密)连接,如果无法建立,则失败;验证类似,require 但另外针对配置的证书颁发机构(CA)证书验证服务器TLS证书,如果找不到有效的匹配CA证书,则失败;验证全像verify-ca ,但还验证服务器证书到该尝试连接主机相匹配。有关更多信息,请参见PostgreSQL文档。 |
database.sslcert | 包含客户端SSL证书的文件的路径。有关更多信息,请参见PostgreSQL文档。 | |
database.sslkey | 包含客户端SSL私钥的文件的路径。有关更多信息,请参见PostgreSQL文档。 | |
database.sslpassword | 从中指定的文件访问客户端私钥的密码database.sslkey 。有关更多信息,请参见PostgreSQL文档。 | |
database.sslrootcert | 包含验证服务器所依据的根证书的文件的路径。有关更多信息,请参见PostgreSQL文档。 | |
database.tcpKeepAlive | 启用TCP保持活动探测以验证数据库连接仍然有效。(默认情况下启用)。有关更多信息,请参见PostgreSQL文档。 | |
tombstones.on.delete | true | 控制是否应在删除事件之后生成逻辑删除事件。 当true 删除操作由删除事件和随后的逻辑删除事件表示时。如果false 只发送删除事件。 发出逻辑删除事件(默认行为)后,一旦源记录被删除,Kafka便可以完全删除与给定键有关的所有事件。 |
column.propagate.source.type 0.8.0及更高版本 | 不适用 | 与列的全限定名称匹配的可选正则表达式列表,以逗号分隔,其原始类型和长度应作为参数添加到发出的变更消息中的相应字段模式中。模式参数__debezium.source.column.type ,__debezium.source.column.length 和__debezium.source.column.scale 将被用于分别传播的原始类型的名称和长度(对于可变宽度的类型),。用于适当调整接收器数据库中相应列的大小。列的标准名称的格式为databaseName。tableName。columnName或databaseName。schemaName。tableName。columnName。 |
message.key.columns | 空字符串 | 与完全限定的表和列匹配以映射主键的正则表达式的分号列表。 每个项目(正则表达式)必须与: 代表自定义键的标准字符匹配。 可以将完全限定的表定义为DB_NAME.TABLE_NAME 或SCHEMA_NAME.TABLE_NAME ,具体取决于特定的连接器。 |
以下高级配置属性具有良好的默认值,这些默认值在大多数情况下都可以使用,因此很少需要在连接器的配置中指定。
属性 | 默认 | 描述 |
---|---|---|
snapshot.mode | initial | 指定在连接器启动时运行快照的条件。默认值为initial,并指定连接器仅在逻辑服务器名称未记录任何偏移量时才能运行快照。将始终选项指定连接器运行快照在启动时各一次。在从不选项指定连接不应该使用的快照,在与逻辑服务器名称第一个启动的连接器应读取无论是从它上次离开(最后LSN的位置),或者从一开始就从视图的角度入手逻辑复制插槽。该initial_only选项指定连接器应仅拍摄初始快照,然后停止,而不处理任何后续更改。该导出选项指定数据库快照将基于在时间点被创建,并且是在一个无锁的方式执行快照的极好方式复制槽时。最后,如果设置为**custom,**则用户还必须设置接口snapshot.custom.class 的自定义实现io.debezium.connector.postgresql.spi.Snapshotter 。查看快照。 |
snapshot.custom.class | 完整的Java类名称,必须是io.debezium.connector.postgresql.spi.Snapshotter 接口的实现。只有使用时snapshot.mode 是定制 | |
snapshot.lock.timeout.ms | 10000 | 正整数值,它指定执行快照时等待获取表锁的最长时间(以毫秒为单位)。如果在此时间间隔内无法获取表锁,则快照将失败。请参见snapshosts |
snapshot.select.statement.overrides | 控制表中的哪些行将包含在快照中。 此属性包含以逗号分隔的标准表*(DB_NAME.TABLE_NAME)的列表*。在进一步的配置属性中指定各个表的select语句,每个表一个,由id标识snapshot.select.statement.overrides.[DB_NAME].[TABLE_NAME] 。这些属性的值是在快照过程中从特定表中检索数据时要使用的SELECT语句。大型仅追加表的可能用例是设置一个特定点,以在先前快照被中断的情况下开始(恢复)快照。 注意:此设置仅对快照有影响。逻辑解码器生成的事件完全不受它影响。 | |
max.queue.size | 20240 | 正整数值,它指定阻塞队列的最大大小,通过流复制接收的更改事件在写入到Kafka之前将被放入该队列中。例如,当写入Kafka的速度较慢或Kafka不可用时,此队列可以提供背压。 |
max.batch.size | 10240 | 正整数值,指定在此连接器的每次迭代期间应处理的每批事件的最大大小。 |
poll.interval.ms | 1000 | 正整数值,指定连接器在每次迭代期间应等待的毫秒数,以便出现新的更改事件。默认为1000毫秒或1秒。 |
include.unknown.datatypes | false | 当Debezium遇到数据类型未知的字段时,默认情况下,更改事件将忽略该字段,并记录警告。在某些情况下,最好包含该字段,然后以不透明的二进制表示形式将该字段发送到下游,以便客户端自己解码。设置为false 从事件中过滤出未知数据并将true 其保留为二进制格式。注意:客户端冒着向后兼容性问题的风险。不仅数据库特定的二进制表示形式在发行版之间可能会发生变化,而且当Debezium最终支持该数据类型时,它将以逻辑类型发送到下游,需要使用者进行调整。通常,遇到不支持的数据类型时,请提出功能请求,以便添加支持。 |
database.initial.statements | 建立与数据库的JDBC连接(而不是事务日志读取连接)时,要用分号分隔的SQL语句列表。使用双分号(’;;’)可以将分号用作字符而不是定界符。注意:连接器可以自行决定建立JDBC连接,因此通常应仅将其用于配置会话参数,而不用于执行DML语句。 | |
heartbeat.interval.ms | 0 | 控制心跳消息的发送频率。 此属性包含以毫秒为单位的间隔,该间隔定义连接器将消息发送到心跳主题的频率。这可用于监视连接器是否仍在从数据库接收更改事件。在较长时间内仅更改未捕获表中的记录的情况下,还应利用心跳消息。在这种情况下,连接器将继续从数据库中读取日志,但永远不会将任何更改消息发送到Kafka中,这反过来意味着不会将偏移更新提交给Kafka。这将导致WAL文件在数据库中的保留时间超过需要的时间(因为连接器实际上已经对其进行了处理,但是从未有机会将最新检索到的LSN刷新到数据库中),并且还可能导致更多更改事件需要重新存储。 -在连接器重启后发送。0 完全不发送心跳消息。 默认禁用。 |
heartbeat.topics.prefix | __debezium-heartbeat | 控制将心跳消息发送到的主题的命名。 根据模式命名主题. 。 |
schema.refresh.mode | columns_diff | 指定触发刷新表中内存模式的条件。columns_diff (默认)是最安全的模式,以确保内存中架构始终与数据库表的架构保持同步。columns_diff_exclude_unchanged_toast 如果连接器与从传入消息派生的架构之间存在差异,则指示连接器刷新内存中架构高速缓存,除非未更改的TOASTable数据完全解决了差异。如果存在频繁更新的表中包含TOASTed数据的表,而这些数据很少是这些更新的一部分,那么此设置可以显着提高连接器性能。但是,如果从表中删除了TOASTable列,则内存中架构可能会过时。 |
snapshot.delay.ms | 连接器在启动后拍摄快照之前应等待的间隔(以毫秒为单位); 可用于在启动集群中的多个连接器时避免快照中断,这可能会导致连接器重新平衡。 | |
snapshot.fetch.size | 10240 | 指定在拍摄快照时应一次从每个表读取的最大行数。连接器将分多次读取此大小的表内容。默认为10240 |
slot.stream.params | 传递到已配置的逻辑解码插件的可选参数列表;例如,在使用wal2json插件时,可以用于启用服务器端表过滤。允许值取决于所选插件,以分号分隔,例如add-tables=public.table,public.table2;include-lsn=true 。 | |
sanitize.field.names | true 当连接器配置明确指定使用Avro 的key.converter 或value.converter 参数时,否则默认为false 。 | 是否将字段名称进行清理以符合Avro命名要求。有关更多详细信息,请参见Avro命名。 |
slot.max.retries | 6 | 尝试失败时重试连接到复制插槽的次数。 |
slot.retry.delay.ms | 10000(10秒) | 当连接器无法连接到复制插槽时,两次重试之间要等待的毫秒数。 |
toasted.value.placeholder | __debezium_unavailable_value | 指定Debezium将提供的常数,以指示原始值是数据库未提供的烘烤值。如果以hex: 前缀开头,则预期其余字符串代表十六进制编码的八位位组。请参阅部分以获取更多详细信息。 |
该连接器还支持在创建Kafka生产者和使用者时使用的直通配置属性。
对于Kafka生产者和消费者,请务必参阅Kafka文档以获取所有配置属性。(PostgreSQL连接器确实使用新的使用者。)