Debezium日常分享系列之:Debezium2.5稳定版本之MySQL连接器配置示例和Connector参数详解
- [一、MySQL 连接器配置示例](#一、MySQL 连接器配置示例)
- 二、添加连接器配置
- 三、连接器属性
- 四、必须的连接器配置属性
- [五、高级 MySQL 连接器配置属性](#五、高级 MySQL 连接器配置属性)
- [六、Debezium 连接器数据库架构历史配置属性](#六、Debezium 连接器数据库架构历史配置属性)
- 七、用于配置生产者和消费者客户端的传递数据库架构历史属性
- [八、Debezium 连接器 Kafka 信号配置属性](#八、Debezium 连接器 Kafka 信号配置属性)
- [九、Debezium 连接器传递信号 Kafka 消费者客户端配置属性](#九、Debezium 连接器传递信号 Kafka 消费者客户端配置属性)
- [十、Debezium 连接器接收器通知配置属性](#十、Debezium 连接器接收器通知配置属性)
- [十一、Debezium 连接器直通数据库驱动程序配置属性](#十一、Debezium 连接器直通数据库驱动程序配置属性)
- 十二、Debezium技术总结
一、MySQL 连接器配置示例
以下是连接器实例的配置示例,该实例从 192.168.99.100 端口 3306 上的 MySQL 服务器捕获数据,我们在逻辑上将其命名为 fullfillment。通常,您可以通过设置连接器可用的配置属性在 JSON 文件中配置 Debezium MySQL 连接器。
您可以选择为数据库中的架构和表的子集生成事件。或者,您可以忽略、屏蔽或截断包含敏感数据、大于指定大小或不需要的列。
bash
{
"name": "inventory-connector", (1)
"config": {
"connector.class": "io.debezium.connector.mysql.MySqlConnector", (2)
"database.hostname": "192.168.99.100", (3)
"database.port": "3306", (4)
"database.user": "debezium-user", (5)
"database.password": "debezium-user-pw", (6)
"database.server.id": "184054", (7)
"topic.prefix": "fullfillment", (8)
"database.include.list": "inventory", (9)
"schema.history.internal.kafka.bootstrap.servers": "kafka:9092", (10)
"schema.history.internal.kafka.topic": "schemahistory.fullfillment", (11)
"include.schema.changes": "true" (12)
}
}
- 1.注册到 Kafka Connect 服务时的连接器名称。
- 2.连接器的类名。
- 3.MySQL 服务器地址。
- 4.MySQL 服务器端口号。
- 5.具有适当权限的 MySQL 用户。
- 6.MySQL 用户的密码。
- 7.连接器的唯一 ID。
- 8.MySQL 服务器或集群的主题前缀。
- 9.由指定服务器托管的数据库列表。
- 10.连接器用于向数据库架构历史记录主题写入和恢复 DDL 语句的 Kafka 代理列表。
- 11.数据库架构历史主题的名称。本主题仅供内部使用,消费者不应使用。
- 12.指定连接器是否应生成 DDL 更改事件并将其发送到履行架构更改主题以供使用者使用的标志。
您可以使用 POST 命令将此配置发送到正在运行的 Kafka Connect 服务。该服务记录配置并启动一个执行以下操作的连接器任务:
- 连接到 MySQL 数据库。
- 在捕获模式下读取表的更改数据表。
- 流将事件记录更改为 Kafka 主题。
二、添加连接器配置
要开始运行 MySQL 连接器,请配置连接器配置,并将该配置添加到 Kafka Connect 集群。
先决条件
- MySQL 设置为与 Debezium 连接器一起使用。
- Debezium MySQL 连接器已安装。
程序
- 为 MySQL 连接器创建配置。
- 使用 Kafka Connect REST API 将该连接器配置添加到您的 Kafka Connect 集群。
结果
- 连接器启动后,它会对连接器配置的 MySQL 数据库执行一致的快照。然后,连接器开始生成行级操作的数据更改事件,并将更改事件记录流式传输到 Kafka 主题。
三、连接器属性
Debezium MySQL 连接器具有许多配置属性,您可以使用它们来为您的应用程序实现正确的连接器行为。许多属性都有默认值。有关属性的信息组织如下:
-
所需的连接器配置属性
-
高级连接器配置属性
-
数据库架构历史连接器配置属性,用于控制 Debezium 如何处理从数据库架构历史主题读取的事件。
- 传递数据库架构历史属性
-
控制数据库驱动程序行为的传递数据库驱动程序属性。
四、必须的连接器配置属性
除非有默认值,否则需要以下配置属性。
属性 | 默认值 | 描述 |
---|---|---|
name | 无默认值 | 连接器的唯一名称。尝试使用相同名称再次注册失败。所有 Kafka Connect 连接器都需要此属性。 |
connector.class | 无默认值 | 连接器的 Java 类的名称。始终为 MySQL 连接器指定 io.debezium.connector.mysql.MySqlConnector。 |
tasks.max | 1 | 应为此连接器创建的最大任务数。 MySQL 连接器始终使用单个任务,因此不使用此值,因此默认值始终可以接受。 |
connector.adapter | mysql | 要使用的连接器适配器模式。 |
database.protocol | jdbc:mysql | 驱动程序连接字符串使用 JDBC 协议来连接数据库。 |
database.jdbc.driver | com.mysql.cj.jdbc.Driver | 要使用的驱动程序类名称。当使用连接器附带的替代驱动程序时,这会很有用。 |
database.hostname | 无默认值 | MySQL数据库服务器的IP地址或主机名。 |
database.port | 3306 | MySQL 数据库服务器的整数端口号。 |
database.user | 无默认值 | 连接到 MySQL 数据库服务器时使用的 MySQL 用户的名称。 |
database.password | 无默认值 | 连接到 MySQL 数据库服务器时使用的密码。 |
topic.prefix | 无默认值 | 主题前缀,为 Debezium 捕获更改的特定 MySQL 数据库服务器/集群提供命名空间。主题前缀在所有其他连接器中应该是唯一的,因为它用作接收此连接器发出的事件的所有 Kafka 主题名称的前缀。数据库服务器逻辑名称中只能使用字母数字字符、连字符、点和下划线。注意:不要更改此属性的值。如果您更改名称值,则在重新启动后,连接器不会继续向原始主题发出事件,而是向名称基于新值的主题发出后续事件。连接器也无法恢复其数据库架构历史主题。 |
database.server.id | 无默认值 | 该数据库客户端的数字 ID,在 MySQL 集群中当前运行的所有数据库进程中必须是唯一的。该连接器作为另一台服务器(具有唯一的 ID)加入 MySQL 数据库集群,以便它可以读取 binlog。 |
database.include.list | 空字符串 | 可选的、以逗号分隔的正则表达式列表,与要捕获更改的数据库的名称相匹配。连接器不会捕获名称不在database.include.list 中的任何数据库中的更改。默认情况下,连接器捕获所有数据库中的更改。为了匹配数据库的名称,Debezium 应用您指定为锚定正则表达式的正则表达式。也就是说,指定的表达式与数据库的整个名称字符串进行匹配;它与数据库名称中可能存在的子字符串不匹配。如果您在配置中包含此属性,则不要同时设置database.exclude.list 属性。 |
database.exclude.list | 空字符串 | 可选的、以逗号分隔的正则表达式列表,与您不想捕获其更改的数据库名称相匹配。连接器捕获名称不在database.exclude.list 中的任何数据库中的更改。为了匹配数据库的名称,Debezium 应用您指定为锚定正则表达式的正则表达式。也就是说,指定的表达式与数据库的整个名称字符串进行匹配;它与数据库名称中可能存在的子字符串不匹配。如果您在配置中包含此属性,则不要同时设置database.include.list 属性。 |
table.include.list | 空字符串 | 可选的、以逗号分隔的正则表达式列表,与要捕获其更改的表的完全限定表标识符相匹配。连接器不会捕获未包含在 table.include.list 中的任何表中的更改。每个标识符的格式为databaseName.tableName。默认情况下,连接器会捕获正在捕获更改的每个数据库中每个非系统表中的更改。为了匹配表的名称,Debezium 应用您指定为锚定正则表达式的正则表达式。也就是说,指定的表达式与表的整个名称字符串进行匹配;它与表名中可能存在的子字符串不匹配。如果您在配置中包含此属性,则不要同时设置 table.exclude.list 属性。 |
column.exclude.list | 空字符串 | 可选的、以逗号分隔的正则表达式列表,与要从更改事件记录值中排除的列的完全限定名称相匹配。列的完全限定名称的格式为databaseName.tableName.columnName。为了匹配列的名称,Debezium 应用您指定为锚定正则表达式的正则表达式。也就是说,指定的表达式与列的整个名称字符串相匹配;它与列名中可能存在的子字符串不匹配。如果您在配置中包含此属性,则不要同时设置 column.include.list 属性。 |
column.include.list | 空字符串 | 可选的、以逗号分隔的正则表达式列表,与要包含在更改事件记录值中的列的完全限定名称相匹配。列的完全限定名称的格式为databaseName.tableName.columnName。为了匹配列的名称,Debezium 应用您指定为锚定正则表达式的正则表达式。也就是说,指定的表达式与列的整个名称字符串相匹配;它与列名中可能存在的子字符串不匹配。如果您在配置中包含此属性,请不要设置column.exclude.list 属性。 |
skip.messages.without.change | false | 指定当包含的列没有变化时是否跳过发布消息。如果按照column.include.list 或column.exclude.list 属性包含的列没有变化,这实际上会过滤消息。 |
column.truncate.to.length.chars | n/a | 可选的、以逗号分隔的正则表达式列表,与基于字符的列的完全限定名称相匹配。如果要在一组列中的数据超过属性名称中长度指定的字符数时截断数据,请设置此属性。将长度设置为正整数值,例如column.truncate.to.20.chars。列的完全限定名称遵循以下格式:databaseName.tableName.columnName。为了匹配列的名称,Debezium 应用您指定为锚定正则表达式的正则表达式。也就是说,指定的表达式与列的整个名称字符串相匹配;该表达式与列名中可能存在的子字符串不匹配。您可以在单个配置中指定具有不同长度的多个属性。 |
column.mask.with.length.chars | n/a | 可选的、以逗号分隔的正则表达式列表,与基于字符的列的完全限定名称相匹配。如果您希望连接器屏蔽一组列的值(例如,如果它们包含敏感数据),请设置此属性。将 length 设置为正整数,以将指定列中的数据替换为属性名称中长度指定的星号 (*) 字符数。将长度设置为 0(零)以将指定列中的数据替换为空字符串。列的完全限定名称遵循以下格式:databaseName.tableName.columnName。为了匹配列的名称,Debezium 应用您指定为锚定正则表达式的正则表达式。也就是说,指定的表达式与列的整个名称字符串相匹配;该表达式与列名中可能存在的子字符串不匹配。您可以在单个配置中指定具有不同长度的多个属性。 |
column.mask.hash.hashAlgorithm.with.salt.salt; column.mask.hash.v2.hashAlgorithm.with.salt.salt | n/a | 可选的、以逗号分隔的正则表达式列表,与基于字符的列的完全限定名称相匹配。列的完全限定名称的格式为 <databaseName>.<tableName>.<columnName>。为了匹配列的名称,Debezium 应用您指定为锚定正则表达式的正则表达式。也就是说,指定的表达式与列的整个名称字符串相匹配;该表达式与列名中可能存在的子字符串不匹配。在生成的更改事件记录中,指定列的值将替换为假名。假名由应用指定的哈希算法和盐所产生的哈希值组成。基于所使用的散列函数,可以维护引用完整性,同时用假名替换列值。 在以下示例中,CzQMA0cB5K 是随机选择的盐。column.mask.hash.SHA-256.with.salt.CzQMA0cB5K = inventory.orders.customerName, inventory.shipment.customerName如有必要,笔名会自动缩短至列的长度。连接器配置可以包含指定不同哈希算法和盐的多个属性。根据使用的哈希算法、选择的盐和实际数据集,生成的数据集可能不会被完全屏蔽。如果值在不同的地方或系统中进行散列,则应使用散列策略版本 2 以确保保真度。 |
column.propagate.source.type | n/a | 可选的、以逗号分隔的正则表达式列表,与您希望连接器发出表示列元数据的额外参数的列的完全限定名称相匹配。设置此属性后,连接器会将以下字段添加到事件记录的架构中:__debezium.source.column.type,__debezium.source.column.length,__debezium.source.column.scale 这些参数分别传播列的原始类型名称和长度(对于可变宽度类型)。使连接器能够发出这些额外的数据可以帮助正确调整接收器数据库中特定数字或基于字符的列的大小。列的完全限定名称遵循以下格式之一:databaseName.tableName.columnName 或databaseName.schemaName.tableName.columnName。为了匹配列的名称,Debezium 应用您指定为锚定正则表达式的正则表达式。也就是说,指定的表达式与列的整个名称字符串相匹配;该表达式与列名中可能存在的子字符串不匹配。 |
datatype.propagate.source.type | n/a | 可选的、以逗号分隔的正则表达式列表,指定为数据库中的列定义的数据类型的完全限定名称。设置此属性后,对于具有匹配数据类型的列,连接器会发出在其架构中包含以下额外字段的事件记录:__debezium.source.column.type,__debezium.source.column.length,__debezium.source.column.scale 这些参数分别传播列的原始类型名称和长度(对于可变宽度类型)。使连接器能够发出这些额外的数据可以帮助正确调整接收器数据库中特定数字或基于字符的列的大小。列的完全限定名称遵循以下格式之一:databaseName.tableName.typeName 或databaseName.schemaName.tableName.typeName。为了匹配数据类型的名称,Debezium 应用您指定为锚定正则表达式的正则表达式。也就是说,指定的表达式与数据类型的整个名称字符串进行匹配;该表达式与类型名称中可能存在的子字符串不匹配。 |
time.precision.mode | adaptive_time_microseconds | 时间、日期和时间戳可以用不同类型的精度表示,包括:Adaptive_time_microseconds(默认值)完全按照数据库中的方式捕获日期、日期时间和时间戳值,根据数据库列的类型使用毫秒、微秒或纳秒精度值,但 TIME 类型字段除外,这些字段始终捕获为微秒。adaptive(已弃用)根据数据库列的类型,使用毫秒、微秒或纳秒精度值捕获与数据库中完全相同的时间和时间戳值。connect始终使用 Kafka Connect 的内置时间、日期和时间戳表示来表示时间和时间戳值,无论数据库列的精度如何,它们都使用毫秒精度。 |
decimal.handling.mode | precise | 指定连接器应如何处理 DECIMAL 和 NUMERIC 列的值:precise(默认)使用以二进制形式在更改事件中表示的 java.math.BigDecimal 值来精确表示它们。double 使用 double 值表示它们,这可能会导致精度损失,但更易于使用。string 将值编码为格式化字符串,这很容易使用,但有关真实类型的语义信息会丢失。 |
bigint.unsigned.handling.mode | long | 指定 BIGINT UNSIGNED 列应如何在更改事件中表示。可能的设置有:long 使用 Java 的 long 来表示值,这可能无法提供精度,但对于消费者来说很容易使用。 long 通常是首选设置。Precision 使用 java.math.BigDecimal 来表示值,这些值通过使用二进制表示形式和 Kafka Connect 的 org.apache.kafka.connect.data.Decimal 类型在更改事件中进行编码。当使用大于 2^63 的值时,请使用此设置,因为这些值无法使用 long 来传送。 |
include.schema.changes | true | 布尔值,指定连接器是否应将数据库架构中的更改发布到与数据库服务器 ID 名称相同的 Kafka 主题。每个架构更改都使用包含数据库名称且其值包含 DDL 语句的键来记录。这与连接器内部记录数据库模式历史记录的方式无关。 |
include.schema.comments | false | 布尔值,指定连接器是否应解析和发布元数据对象上的表和列注释。启用此选项将对内存使用产生影响。逻辑模式对象的数量和大小在很大程度上影响 Debezium 连接器消耗的内存量,并且向每个连接器添加潜在的大型字符串数据可能会非常昂贵。 |
include.query | false | 布尔值,指定连接器是否应包含生成更改事件的原始 SQL 查询。如果将此选项设置为 true,则还必须使用 binlog_rows_query_log_events 选项配置 MySQL,或将 binlog_annotate_row_events 选项设置为 ON 的 MariaDB。当 include.query 为 true 时,对于快照进程生成的事件不存在查询。将 include.query 设置为 true 可能会公开通过在更改事件中包含原始 SQL 语句而显式排除或屏蔽的表或字段。因此,默认设置为 false。 |
event.deserialization.failure.handling.mode | fail | 指定连接器在二进制日志事件反序列化期间应如何对异常做出反应。此选项已弃用,请改用 event.processing.failure.handling.mode 选项。 |
inconsistent.schema.handling.mode | fail | 指定连接器应如何对与内部架构表示中不存在的表相关的二进制日志事件做出反应。即内部表示与数据库不一致。fail会引发异常,指示有问题的事件及其二进制日志偏移量,并导致连接器停止。warn 记录有问题的事件及其二进制日志偏移量并跳过该事件。skip有问题的事件并且不记录任何内容。 |
connect.timeout.ms | 30000 | 一个正整数值,指定此连接器在尝试连接到 MySQL 数据库服务器后超时之前应等待的最长时间(以毫秒为单位)。默认为 30 秒。 |
gtid.source.includes | 无默认值 | 与 GTID 集中的源 UUID 匹配的正则表达式的逗号分隔列表,连接器使用它来查找 MySQL 服务器上的 binlog 位置。设置此属性后,连接器仅使用其源 UUID 与指定包含模式之一匹配的 GTID 范围。为了匹配 GTID 的值,Debezium 应用您指定为锚定正则表达式的正则表达式。也就是说,指定的表达式与整个 UUID 字符串进行匹配;它与 UUID 中可能存在的子字符串不匹配。如果您在配置中包含此属性,则不要同时设置 gtid.source.excludes 属性。 |
gtid.source.excludes | 无默认值 | 以逗号分隔的正则表达式列表,与连接器用来查找 MySQL 服务器上的 binlog 位置的 GTID 集中的源 UUID 相匹配。设置此属性后,连接器仅使用源 UUID 与任何指定排除模式都不匹配的 GTID 范围。为了匹配 GTID 的值,Debezium 应用您指定为锚定正则表达式的正则表达式。也就是说,指定的表达式与整个 UUID 字符串进行匹配;它与 UUID 中可能存在的子字符串不匹配。如果您在配置中包含此属性,则不要同时设置 gtid.source.includes 属性。 |
tombstones.on.delete | true | 控制删除事件后是否发生逻辑删除事件。true - 删除操作由删除事件和后续逻辑删除事件表示。false - 仅发出删除事件。删除源记录后,如果为主题启用了日志压缩,则发出逻辑删除事件(默认行为)允许 Kafka 完全删除与已删除行的键相关的所有事件。 |
message.key.columns | n/a | 表达式列表,指定连接器用于形成发布到指定表的 Kafka 主题的更改事件记录的自定义消息键的列。默认情况下,Debezium 使用表的主键列作为其发出的记录的消息键。您可以根据一列或多列配置自定义消息键,以代替默认值,或者为缺少主键的表指定键。要为表建立自定义消息键,请列出该表,然后列出要用作消息键的列。每个列表条目均采用以下格式:<fully-qualified_tableName>:,<keyColumn> 要将表键基于多个列名,请在列名之间插入逗号。每个完全限定的表名都是以下格式的正则表达式:<databaseName>.<tableName>该属性可以包含多个表的条目。使用分号分隔列表中的表条目。以下示例设置表 inventory.customers 和purchase.orders 的消息键:inventory.customers:pk1,pk2;(.*).purchaseorders:pk3,pk4对于表 inventory.customer,列 pk1 和 pk2 被指定为消息键。对于任何数据库中的purchaseorders 表,列pk3 和pk4 作为消息键。用于创建自定义消息键的列数没有限制。但是,最好使用指定唯一键所需的最小数量。 |
binary.handling.mode | bytes | 指定应如何在更改事件中表示二进制列(例如 blob、binary、varbinary)。可能的设置:bytes 将二进制数据表示为字节数组。Base64 将二进制数据表示为 Base64 编码的字符串。base64-url-safe 将二进制数据表示为 base64-url-safe 编码的字符串。hex 将二进制数据表示为十六进制编码 (base16) 字符串。 |
schema.name.adjustment.mode | none | 指定应如何调整架构名称以与连接器使用的消息转换器兼容。可能的设置:none 不应用任何调整。avro 将 Avro 类型名称中不能使用的字符替换为下划线。avro_unicode 将 Avro 类型名称中不能使用的下划线或字符替换为相应的 unicode,如 _uxxxx。注意:_是转义序列,类似于Java中的反斜杠 |
field.name.adjustment.mode | none | 指定应如何调整字段名称以与连接器使用的消息转换器兼容。可能的设置:none 不应用任何调整。avro 将 Avro 类型名称中不能使用的字符替换为下划线。avro_unicode 将 Avro 类型名称中不能使用的下划线或字符替换为相应的 unicode,如 _uxxxx。注意:_是转义序列,类似于Java中的反斜杠 |
五、高级 MySQL 连接器配置属性
下表描述了高级 MySQL 连接器属性。这些属性的默认值很少需要更改。因此,您不需要在连接器配置中指定它们。
表 24. MySQL 连接器高级配置属性的描述
属性 | 默认值 | 描述 |
---|---|---|
connect.keep.alive | true | 一个布尔值,指定是否应使用单独的线程来确保与 MySQL 服务器/集群的连接保持活动状态。 |
converters | 无默认值 | 枚举连接器可以使用的自定义转换器实例的符号名称的逗号分隔列表。例如,布尔值。需要此属性才能使连接器能够使用自定义转换器。对于为连接器配置的每个转换器,还必须添加 .type 属性,该属性指定实现转换器接口的类的完全限定名称。 .type 属性使用以下格式:<converterSymbolicName>.type例如,布尔类型:io.debezium.connector.mysql.converters.TinyIntOneToBooleanConverter如果您想进一步控制已配置转换器的行为,您可以添加一个或多个配置参数以将值传递给转换器。要将这些附加配置参数与转换器关联,请在参数名称前加上转换器的符号名称。例如,要定义指定布尔转换器处理的列子集的选择器参数,请添加以下属性:boolean.selector=db1.table1.*, db1.table2.column1 |
table.ignore.builtin | true | 一个布尔值,指定是否应忽略内置系统表。无论表包含和排除列表如何,这都适用。默认情况下,系统表不会捕获其更改,并且对任何系统表进行更改时不会生成任何事件。 |
database.ssl.mode | preferred | 指定是否使用加密连接。可能的设置有:disabled指定使用未加密的连接。preferred如果服务器支持安全连接,则建立加密连接。如果服务器不支持安全连接,则回退到未加密的连接。required建立加密连接,如果由于任何原因无法建立,则失败。verify_ca行为与必需的类似,但它还会根据配置的证书颁发机构 (CA) 证书验证服务器 TLS 证书,如果服务器 TLS 证书与任何有效的 CA 证书都不匹配,则会失败verify_identity行为类似于 verify_ca,但还验证服务器证书是否与远程连接的主机匹配。 |
database.ssl.keystore | 无默认值 | 密钥存储文件的位置。这是可选的,可用于客户端和 MySQL 服务器之间的双向身份验证。 |
binlog.buffer.size | 0 | binlog 读取器使用的前瞻缓冲区的大小。默认设置 0 禁用缓冲。在特定情况下,MySQL binlog 中可能包含由 ROLLBACK 语句完成的未提交数据。典型的示例是使用保存点或在单个事务中混合临时表和常规表更改。当检测到事务开始时,Debezium 会尝试前滚 binlog 位置并查找 COMMIT 或 ROLLBACK,以便确定是否从事务中流式传输更改。 binlog 缓冲区的大小定义了 Debezium 在搜索事务边界时可以缓冲的事务中最大更改数量。如果事务的大小大于缓冲区,则 Debezium 必须倒回并重新读取流式传输时未放入缓冲区的事件。 |
max.batch.size | 2048 | 正整数值,指定在此连接器的每次迭代期间应处理的每批事件的最大大小。默认为 2048。 |
max.queue.size | 8192 | 正整数值,指定阻塞队列可以保存的最大记录数。当 Debezium 读取从数据库流式传输的事件时,它会将事件放入阻塞队列中,然后再将其写入 Kafka。如果连接器摄取消息的速度快于将消息写入 Kafka 的速度,或者当 Kafka 不可用时,阻塞队列可以为从数据库读取更改事件提供反压。当连接器定期记录偏移量时,队列中保存的事件将被忽略。始终将 max.queue.size 的值设置为大于 max.batch.size 的值。 |
max.queue.size.in.bytes | 0 | 一个长整数值,指定阻塞队列的最大容量(以字节为单位)。默认情况下,没有为阻塞队列指定卷限制。要指定队列可以使用的字节数,请将此属性设置为正 long 值。如果还设置了 max.queue.size,则当队列大小达到任一属性指定的限制时,写入队列将被阻止。例如,如果设置 max.queue.size=1000,并且max.queue.size.in.bytes=5000,则在队列包含 1000 条记录之后或在队列中的记录量之后写入队列将被阻止达到5000字节。 |
poll.interval.ms | 500 | 正整数值,指定连接器在开始处理一批事件之前应等待新更改事件出现的毫秒数。默认为 500 毫秒或 0.5 秒。 |
snapshot.mode | initial | 指定连接器启动时运行快照的条件。可能的设置有:initial仅当未记录逻辑服务器名称的偏移量时,连接器才会运行快照。initial_only仅当逻辑服务器名称没有记录偏移量时,连接器才运行快照,然后停止;即它不会从 binlog 中读取更改事件。when_needed只要连接器认为有必要,它就会在启动时运行快照。也就是说,当没有可用的偏移量时,或者当先前记录的偏移量指定服务器中不可用的二进制日志位置或 GTID 时。never连接器从不使用快照。首次使用逻辑服务器名称启动时,连接器从 binlog 的开头读取。请谨慎配置此行为。仅当保证 binlog 包含数据库的完整历史记录时,它才有效。schema_onl连接器运行架构的快照而不是数据。当您不需要主题包含一致的数据快照但需要它们仅包含自连接器启动以来的更改时,此设置非常有用。schema_only_recovery这是已捕获更改的连接器的恢复设置。当您重新启动连接器时,此设置可以恢复损坏或丢失的数据库架构历史记录主题。您可以定期设置它来"清理"意外增长的数据库模式历史记录主题。数据库架构历史主题需要无限保留。 |
snapshot.locking.mode | minimal | 控制连接器是否持有全局 MySQL 读锁以及持有全局 MySQL 读锁的时间,以防止在连接器执行快照时对数据库进行任何更新。可能的设置有:minimal连接器仅对快照的初始部分持有全局读锁,在此期间连接器读取数据库架构和其他元数据。快照中的剩余工作包括从每个表中选择所有行。连接器可以通过使用可重复读取事务以一致的方式执行此操作。即使不再持有全局读锁并且其他 MySQL 客户端正在更新数据库,情况也是如此。minimal_percona连接器仅对快照的初始部分持有全局备份锁,在此期间连接器读取数据库架构和其他元数据。快照中的剩余工作包括从每个表中选择所有行。连接器可以通过使用可重复读取事务以一致的方式执行此操作。即使不再持有全局备份锁并且其他 MySQL 客户端正在更新数据库,情况也是如此。此模式不会将表刷新到磁盘,不会被长时间运行的读取阻塞,并且仅在 Percona Server 中可用。extended阻止快照期间的所有写入。如果存在正在提交 MySQL 从 REPEATABLE READ 语义中排除的操作的客户端,请使用此设置。none防止连接器在快照期间获取任何表锁。虽然所有快照模式都允许使用此设置,但当且仅当快照运行时没有发生架构更改时才可以安全使用。对于使用MyISAM引擎定义的表,尽管设置了该属性,但当MyISAM获取表锁时,表仍然会被锁定。此行为与 InnoDB 引擎不同,InnoDB 引擎获取行级锁。 |
heartbeat.interval.ms | 0 | 控制连接器向 Kafka 主题发送心跳消息的频率。默认行为是连接器不发送心跳消息。检测信号消息对于监视连接器是否正在从数据库接收更改事件非常有用。检测信号消息可能有助于减少连接器重新启动时需要重新发送的更改事件的数量。要发送心跳消息,请将此属性设置为正整数,该整数表示心跳消息之间的毫秒数。 |
heartbeat.action.query | 无默认值 | 指定当连接器发送检测信号消息时连接器在源数据库上执行的查询。例如,这可以用于定期捕获源数据库中执行的 GTID 集的状态。 INSERT INTO gtid_history_table (select * from mysql.gtid_executed) |
database.initial.statements | 无默认值 | 建立与数据库的 JDBC 连接(而不是读取事务日志的连接)时要执行的 SQL 语句的分号分隔列表。要将分号指定为 SQL 语句中的字符而不是分隔符,请使用两个分号 (;😉。连接器可能自行决定建立 JDBC 连接,因此该属性仅用于配置会话参数。它不用于执行 DML 语句。 |
enable.time.adjuster | true | 布尔值,指示连接器是否将 2 位数年份规范转换为 4 位数。当转换完全委托给数据库时设置为 false。MySQL 允许用户插入 2 位或 4 位数字的年份值。对于 2 位数的值,该值将映射到 1970 - 2069 范围内的年份。默认行为是连接器执行转换。 |
source.struct.version | v2 | Debezium 事件中源块的架构版本。 Debezium 0.10 对源块的结构进行了一些重大更改,以便统一所有连接器的暴露结构。通过将此选项设置为 v1,可以生成早期版本中使用的结构。但是,不建议使用此设置,并计划在未来的 Debezium 版本中删除此设置。 |
skipped.operations | t | 在流式传输过程中将跳过的以逗号分隔的操作类型列表。这些操作包括:c 表示插入/创建、u 表示更新、d 表示删除、t 表示截断,none 表示不跳过任何操作。默认情况下,会跳过截断操作。 |
signal.data.collection | 无默认值 | 用于向连接器发送信号的数据集合的完全限定名称。使用以下格式指定集合名称:<数据库名称>.<表名称> |
signal.enabled.channels | source | 为连接器启用的信令通道名称列表。默认情况下,以下通道可用:source、kafka、file、jmx |
notification.enabled.channels | 无默认值 | 为连接器启用的通知通道名称列表。默认情况下,以下通道可用:sink、log、jmx |
incremental.snapshot.allow.schema.changes | false | 允许在增量快照期间更改架构。启用后,连接器将在增量快照期间检测架构更改,并重新选择当前块以避免锁定 DDL。请注意,不支持对主键进行更改,如果在增量快照期间执行更改,可能会导致不正确的结果。另一个限制是,如果架构更改仅影响列的默认值,则在从 binlog 流处理 DDL 之前不会检测到更改。这不会影响快照事件的值,但快照事件的架构可能具有过时的默认值。 |
incremental.snapshot.chunk.size | 1024 | 连接器在增量快照块期间获取并读入内存的最大行数。增加块大小可以提高效率,因为快照运行的快照查询数量越大,查询的数量就越少。然而,较大的块大小也需要更多的内存来缓冲快照数据。将块大小调整为可在您的环境中提供最佳性能的值。 |
incremental.snapshot.watermarking.strategy | insert_insert | 指定连接器在增量快照期间使用的水印机制,以对增量快照可能捕获并在流恢复后重新捕获的事件进行重复数据删除。您可以指定以下选项之一:insert_insert当您发送信号来启动增量快照时,对于 Debezium 在快照期间读取的每个块,它都会向信令数据集合写入一个条目,以记录打开快照窗口的信号。快照完成后,Debezium 会插入第二个条目,记录关闭窗口的信号。insert_delete当您发送信号来启动增量快照时,对于 Debezium 读取的每个块,它都会向信令数据集合写入一个条目,以记录打开快照窗口的信号。快照完成后,该条目将被删除。不会为关闭快照窗口的信号创建条目。设置此选项可防止信令数据收集的快速增长。 |
read.only | false | 切换到替代增量快照水印实现以避免写入信号数据收集 |
provide.transaction.metadata | false | 确定连接器是否生成具有事务边界的事件并使用事务元数据丰富变更事件信封。如果您希望连接器执行此操作,请指定 true。 |
event.processing.failure.handling.mode | fail | 指定应如何处理事件处理期间的故障(即遇到损坏的事件时)。默认情况下,fail模式会引发异常,指示有问题的事件及其位置,从而导致连接器停止。warn模式不会引发异常,而是会记录有问题的事件及其位置,并跳过该事件。ignore模式完全忽略有问题的事件,不记录任何日志。 |
topic.naming.strategy | io.debezium.schema.DefaultTopicNamingStrategy | TopicNamingStrategy 类的名称应用于确定数据更改、架构更改、事务、心跳事件等的主题名称,默认为 DefaultTopicNamingStrategy。 |
topic.delimiter | . | 指定主题名称的分隔符,默认为... |
topic.cache.size | 10000 | 用于在有界并发哈希图中保存主题名称的大小。该缓存将有助于确定与给定数据集合对应的主题名称。 |
topic.heartbeat.prefix | __debezium-heartbeat | 控制连接器向其发送心跳消息的主题的名称。主题名称具有以下模式:topic.heartbeat.prefix.topic.prefix例如,如果主题前缀为fulfillment,则默认主题名称为__debezium-heartbeat.fulfillment。 |
topic.transaction | transaction | 控制连接器向其发送事务元数据消息的主题的名称。主题名称具有以下模式:topic.prefix.topic.transaction例如,如果主题前缀是fulfillment,则默认主题名称是fulfillment.transaction。 |
snapshot.max.threads | 1 | 指定连接器在执行初始快照时使用的线程数。要启用并行初始快照,请将该属性设置为大于 1 的值。在并行初始快照中,连接器会同时处理多个表。该功能正在孵化中。 |
snapshot.tables.order.by.row.count | disabled | 控制连接器在执行初始快照时处理表的顺序。指定以下选项之一:descending连接器根据行数从最高到最低按顺序快照表。ascending连接器根据行数从最低到最高顺序对表进行快照。disabled连接器在执行初始快照时忽略行计数。 |
custom.metric.tags | 无默认值 | 自定义指标标签将接受键值对来自定义 MBean 对象名称,该名称应附加在常规名称的末尾,每个键代表 MBean 对象名称的一个标签,相应的值将是该标签的值关键群岛。例如:k1=v1,k2=v2。 |
errors.max.retries | -1 | 失败前可重试错误(例如连接错误)的最大重试次数(-1 = 无限制,0 = 禁用,> 0 = 重试次数)。 |
六、Debezium 连接器数据库架构历史配置属性
Debezium 提供了一组 schema.history.internal.* 属性,用于控制连接器如何与架构历史主题交互。
下表描述了用于配置 Debezium 连接器的schema.history.internal 属性。
表 25. 连接器数据库模式历史配置属性
属性 | 默认值 | 描述 |
---|---|---|
schema.history.internal.kafka.topic | 无默认值 | 连接器存储数据库架构历史记录的 Kafka 主题的全名。 |
schema.history.internal.kafka.bootstrap.servers | 无默认值 | 连接器用于建立与 Kafka 集群的初始连接的主机/端口对列表。此连接用于检索连接器先前存储的数据库模式历史记录,并用于写入从源数据库读取的每个 DDL 语句。每对都应指向 Kafka Connect 进程使用的同一个 Kafka 集群。 |
schema.history.internal.kafka.recovery.poll.interval.ms | 100 | 一个整数值,指定连接器在启动/恢复期间轮询持久数据时应等待的最大毫秒数。默认值为 100 毫秒。 |
schema.history.internal.kafka.query.timeout.ms | 3000 | 一个整数值,指定连接器在使用 Kafka 管理客户端获取集群信息时应等待的最大毫秒数。 |
schema.history.internal.kafka.create.timeout.ms | 30000 | 一个整数值,指定连接器在使用 Kafka 管理客户端创建 kafka 历史主题时应等待的最大毫秒数。 |
schema.history.internal.kafka.recovery.attempts | 100 | 在连接器恢复因错误而失败之前,连接器应尝试读取持久历史数据的最大次数。没有收到数据后等待的最长时间为recovery.attempts × recovery.poll.interval.ms。 |
schema.history.internal.skip.unparseable.ddl | false | 一个布尔值,指定连接器是否应忽略格式错误或未知的数据库语句或停止处理以便人工修复问题。安全默认值是 false。应谨慎使用跳过,因为在处理二进制日志时,它可能会导致数据丢失或损坏。 |
schema.history.internal.store.only.captured.tables.ddl | false | 一个布尔值,指定连接器是记录架构或数据库中所有表的架构结构,还是仅记录指定捕获的表的架构结构。指定以下值之一:false (default) 在数据库快照期间,连接器记录数据库中所有非系统表的架构数据,包括未指定捕获的表。最好保留默认设置。如果您稍后决定从最初未指定捕获的表中捕获更改,则连接器可以轻松地开始从这些表中捕获数据,因为它们的架构结构已存储在架构历史记录主题中。 Debezium 需要表的模式历史记录,以便它可以识别更改事件发生时存在的结构。true在数据库快照期间,连接器仅记录 Debezium 从中捕获更改事件的表的表模式。如果更改默认值,并且稍后将连接器配置为从数据库中的其他表捕获数据,则连接器将缺少从表捕获更改事件所需的架构信息。 |
schema.history.internal.store.only.captured.databases.ddl | false | 一个布尔值,指定连接器是否记录数据库实例中所有逻辑数据库的架构结构。指定以下值之一:true连接器仅记录逻辑数据库中的表的模式结构以及 Debezium 从中捕获更改事件的模式。false连接器记录所有逻辑数据库的模式结构。注意:MySQL 连接器的默认值为 true |
七、用于配置生产者和消费者客户端的传递数据库架构历史属性
Debezium 依赖 Kafka 生产者将模式更改写入数据库模式历史主题。同样,当连接器启动时,它依赖 Kafka 使用者从数据库架构历史主题中读取。您可以通过将值分配给一组以 schema.history.internal. Producer.* 和 schema.history.internal.consumer.* 前缀开头的传递配置属性来定义 Kafka 生产者和消费者客户端的配置。传递生产者和消费者数据库架构历史属性控制一系列行为,例如这些客户端如何保护与 Kafka 代理的连接,如以下示例所示:
bash
schema.history.internal.producer.security.protocol=SSL
schema.history.internal.producer.ssl.keystore.location=/var/private/ssl/kafka.server.keystore.jks
schema.history.internal.producer.ssl.keystore.password=test1234
schema.history.internal.producer.ssl.truststore.location=/var/private/ssl/kafka.server.truststore.jks
schema.history.internal.producer.ssl.truststore.password=test1234
schema.history.internal.producer.ssl.key.password=test1234
schema.history.internal.consumer.security.protocol=SSL
schema.history.internal.consumer.ssl.keystore.location=/var/private/ssl/kafka.server.keystore.jks
schema.history.internal.consumer.ssl.keystore.password=test1234
schema.history.internal.consumer.ssl.truststore.location=/var/private/ssl/kafka.server.truststore.jks
schema.history.internal.consumer.ssl.truststore.password=test1234
schema.history.internal.consumer.ssl.key.password=test1234
八、Debezium 连接器 Kafka 信号配置属性
Debezium 提供了一组 signal.* 属性,用于控制连接器如何与 Kafka 信号主题交互。
下表描述了 Kafka 信号属性。
表 26. Kafka 信号配置属性
属性 | 默认值 | 描述 |
---|---|---|
signal.kafka.topic | <topic.prefix>-signal | 连接器监视临时信号的 Kafka 主题的名称。注意:如果禁用自动创建主题,则必须手动创建所需的信令主题。需要一个信令主题来保留信号顺序。信令主题必须具有单个分区。 |
signal.kafka.groupId | kafka-signal | Kafka 消费者使用的组 ID 的名称。 |
signal.kafka.bootstrap.servers | 无默认值 | 连接器用于建立与 Kafka 集群的初始连接的主机/端口对列表。每对都引用 Debezium Kafka Connect 进程使用的 Kafka 集群。 |
signal.kafka.poll.timeout.ms | 100 | 一个整数值,指定连接器在轮询信号时等待的最大毫秒数。 |
kafka.consumer.offset.commit.enabled | false | 为信号主题启用偏移量提交,以保证至少一次传递。如果禁用,则仅处理消费者启动和运行时收到的信号。当消费者宕机时收到的任何信号都会丢失。 |
九、Debezium 连接器传递信号 Kafka 消费者客户端配置属性
Debezium 连接器提供信号 Kafka 消费者的直通配置。直通信号属性以前缀 Signals.consumer.* 开头。例如,连接器将 signal.consumer.security.protocol=SSL 等属性传递给 Kafka 使用者。
Debezium 在将属性传递给 Kafka 信号使用者之前会去除属性中的前缀。
十、Debezium 连接器接收器通知配置属性
下表描述了通知属性。
表 27. 接收器通知配置属性
属性 | 默认值 | 描述 |
---|---|---|
notification.sink.topic.name | 无默认值 | 从 Debezium 接收通知的主题的名称。当您配置 notification.enabled.channels 属性以将接收器包含为启用的通知通道之一时,需要此属性。 |
十一、Debezium 连接器直通数据库驱动程序配置属性
Debezium 连接器提供数据库驱动程序的直通配置。传递数据库属性以前缀 driver.* 开头。例如,连接器将 driver.foobar=false 等属性传递给 JDBC URL。
与数据库模式历史客户端的传递属性的情况一样,Debezium 在将属性传递到数据库驱动程序之前会从属性中去除前缀。
十二、Debezium技术总结
更多Debezium技术请参考: