成都网站制作套餐,phpcms 网站根目录,ps制作网站首页教程,医院推广营销方式Debezium日常分享系列之#xff1a;Debezium2.5版本之connector for JDBC 一、概述二、JDBC 连接器的工作原理三、使用复杂的 Debezium 变更事件四、至少一次交付五、多项任务六、数据和列类型映射七、主键处理八、删除模式九、幂等写入十、Schema evolution十一、引用和区分大… Debezium日常分享系列之Debezium2.5版本之connector for JDBC 一、概述二、JDBC 连接器的工作原理三、使用复杂的 Debezium 变更事件四、至少一次交付五、多项任务六、数据和列类型映射七、主键处理八、删除模式九、幂等写入十、Schema evolution十一、引用和区分大小写十二、数据类型映射十三、部署十四、Debezium JDBC 连接器配置十五、Connector属性十六、经常问的问题十七、实际应用案例 一、概述
该连接器目前处于孵化状态。Debezium JDBC 连接器是 Kafka Connect 接收器连接器实现它可以使用来自多个源主题的事件然后使用 JDBC 驱动程序将这些事件写入关系数据库。该连接器支持多种数据库方言包括 Db2、MySQL、Oracle、PostgreSQL 和 SQL Server。
二、JDBC 连接器的工作原理
Debezium JDBC 连接器是 Kafka Connect 接收器连接器因此需要 Kafka Connect 运行时。连接器定期轮询其订阅的 Kafka 主题使用这些主题中的事件然后将事件写入配置的关系数据库。连接器通过使用 upsert 语义和基本模式演化来支持幂等写入操作。
Debezium JDBC 连接器提供以下功能
使用复杂的 Debezium 变更事件至少一次交付多项任务数据和列类型映射主键处理删除模式幂等写入模式演变引用和区分大小写
三、使用复杂的 Debezium 变更事件
默认情况下Debezium 源连接器会生成复杂的、分层的更改事件。当 Debezium 连接器与其他 JDBC 接收器连接器实现一起使用时可能需要应用 ExtractNewRecordState 单消息转换 (SMT) 来展平更改事件的负载以便接收器实现可以使用它们。如果运行 Debezium JDBC 接收器连接器则无需部署 SMT因为 Debezium 接收器连接器可以直接使用本机 Debezium 更改事件而无需使用转换。
当 JDBC 接收器连接器使用来自 Debezium 源连接器的复杂更改事件时它会从原始插入或更新事件的后续部分中提取值。当接收器连接器使用删除事件时不会查阅事件有效负载的任何部分。
重要的
Debezium JDBC 接收器连接器并非设计用于读取架构更改主题。如果您的源连接器配置为捕获架构更改请在 JDBC 连接器配置中设置主题或topics.regex 属性以便连接器不会使用架构更改主题。
四、至少一次交付
Debezium JDBC 接收器连接器保证从 Kafka 主题消耗的事件至少被处理一次。
五、多项任务
可以跨多个 Kafka Connect 任务运行 Debezium JDBC 接收器连接器。要跨多个任务运行连接器请将tasks.max 配置属性设置为希望连接器使用的任务数。 Kafka Connect 运行时启动指定数量的任务并为每个任务运行一个连接器实例。多个任务可以通过并行读取和处理多个源主题的更改来提高性能。
六、数据和列类型映射
为了使 Debezium JDBC 接收器连接器能够将数据类型从入站消息字段正确映射到出站消息字段连接器需要有关源事件中存在的每个字段的数据类型的信息。该连接器支持跨不同数据库方言的各种列类型映射。为了从事件字段中的类型元数据正确转换目标列类型连接器应用为源数据库定义的数据类型映射。可以通过在源连接器配置中设置 column.propagate.source.type 或 datatype.propagate.source.type 选项来增强连接器解析列数据类型的方式。当启用这些选项时Debezium 会包含额外的参数元数据这有助于 JDBC 接收器连接器更准确地解析目标列的数据类型。
为了让 Debezium JDBC 接收器连接器处理来自 Kafka 主题的事件Kafka 主题消息键如果存在必须是原始数据类型或 Struct。此外源消息的有效负载必须是一个 Struct该结构要么具有没有嵌套结构类型的扁平结构要么具有符合 Debezium 复杂的分层结构的嵌套结构布局。
如果 Kafka 主题中的事件结构不遵守这些规则则必须实现自定义单消息转换以将源事件的结构转换为可用的格式。
七、主键处理
默认情况下Debezium JDBC 接收器连接器不会将源事件中的任何字段转换为事件的主键。不幸的是缺乏稳定的主键可能会使事件处理复杂化具体取决于业务需求或者接收器连接器使用 upsert 语义时。要定义一致的主键可以将连接器配置为使用下表中描述的主键模式之一
模式描述none创建表时未指定主键字段。kafka主键由以下三列组成__连接主题__连接分区__connect_offset这些列的值源自 Kafka 事件的坐标。record_key主键由 Kafka 事件的键组成。如果主键是基本类型请通过设置primary.key.fields属性指定要使用的列的名称。如果主键是结构体类型则结构体中的字段将映射为主键的列。可以使用primary.key.fields 属性将主键限制为列的子集。record_value主键由 Kafka 事件的值组成。由于Kafka事件的值始终是一个Struct因此默认情况下值中的所有字段都成为主键的列。要使用主键中的字段子集请设置primary.key.fields 属性以指定要从中派生主键列的值中以逗号分隔的字段列表。record_header主键由 Kafka 事件的标头组成。Kafka 事件的标头可以包含多个标头每个标头可以是 Struct 或基元数据类型连接器将这些标头组成一个 Struct。因此该结构中的所有字段都成为主键的列。要使用主键中的字段子集请设置primary.key.fields 属性以指定要从中派生主键列的值中以逗号分隔的字段列表。
重要
如果将 Primary.key.mode 设置为 kafka 并将 schema.evolution 设置为 basic某些数据库方言可能会引发异常。当方言将 STRING 数据类型映射到可变长度字符串数据类型例如 TEXT 或 CLOB并且该方言不允许主键列具有无限长度时会发生此异常。要避免此问题请在您的环境中应用以下设置
不要将 schema.evolution 设置为 basic。提前创建数据库表和主键映射。
八、删除模式
当使用 DELETE 或逻辑删除事件时Debezium JDBC 接收器连接器可以删除目标数据库中的行。默认情况下JDBC 接收器连接器不启用删除模式。
如果希望连接器删除行则必须在连接器配置中显式设置delete.enabledtrue。要使用此模式还必须将primary.key.fields设置为none以外的值。上述配置是必要的因为删除是根据主键映射执行的所以如果目标表没有主键映射连接器将无法删除行。
九、幂等写入
Debezium JDBC 接收器连接器可以执行幂等写入使其能够重复重放相同的记录并且不会更改最终的数据库状态。
要使连接器能够执行幂等写入必须显式将连接器的 insert.mode 设置为 upsert。 upsert 操作应用为更新或插入具体取决于指定的主键是否已存在。
如果主键值已存在则该操作会更新该行中的值。如果指定的主键值不存在则插入会添加新行。
每种数据库方言处理幂等写入的方式都不同因为没有针对 upsert 操作的 SQL 标准。下表显示了 Debezium 支持的数据库方言的 upsert DML 语法
方言更新语法Db2MERGE …MySQLINSERT … ON DUPLICATE KEY UPDATE …OracleMERGE …PostgreSQLINSERT … ON CONFLICT … DO UPDATE SET …SQL ServerMERGE …
十、Schema evolution
可以将以下模式演化模式与 Debezium JDBC 接收器连接器结合使用
模式描述none连接器不执行任何 DDL 架构演变。basic连接器自动检测事件负载中但目标表中不存在的字段。连接器更改目标表以添加新字段。
当 schema.evolution 设置为 basic 时连接器会根据传入事件的结构自动创建或更改目标数据库表。
当第一次从主题接收事件并且目标表尚不存在时Debezium JDBC 接收器连接器使用事件的键或记录的模式结构来解析表的列结构。如果启用了架构演化连接器会在将 DML 事件应用到目标表之前准备并执行 CREATE TABLE SQL 语句。
当 Debezium JDBC 连接器从主题接收事件时如果记录的模式结构与目标表的模式结构不同连接器将使用事件的键或其模式结构来识别哪些列是新的并且必须是新的。添加到数据库表中。如果启用了架构演化连接器会在将 DML 事件应用到目标表之前准备并执行 ALTER TABLE SQL 语句。由于更改列数据类型、删除列和调整主键可能被视为危险操作因此禁止连接器执行这些操作。
每个字段的架构决定列是 NULL 还是 NOT NULL。该架构还定义了每列的默认值。如果连接器尝试创建具有可为空性设置或不需要的默认值的表则必须提前手动创建该表或者在接收器连接器处理事件之前调整关联字段的架构。要调整为空性设置或默认值可以引入自定义单消息转换该转换应用管道中的更改或修改源数据库中定义的列状态。
字段的数据类型是根据一组预定义的映射来解析的。
重要的
当向目标数据库中已存在的表的事件结构引入新字段时必须将新字段定义为可选或者这些字段必须具有在数据库架构中指定的默认值。如果希望从目标表中删除字段请使用以下选项之一
手动删除该字段。删除该列。为该字段指定默认值。将字段定义为可为空。
十一、引用和区分大小写
Debezium JDBC 接收器连接器通过构建在目标数据库上执行的 DDL架构更改或 DML数据更改SQL 语句来使用 Kafka 消息。默认情况下连接器使用源主题和事件字段的名称作为目标表中的表名称和列名称的基础。构造的 SQL 不会自动用引号分隔标识符以保留原始字符串的大小写。因此默认情况下目标数据库中表名或列名的文本大小写完全取决于数据库在未指定大小写时处理名称字符串的方式。
例如如果目标数据库方言是 Oracle 并且事件的主题是订单则目标表将创建为 ORDERS因为当名称不带引号时Oracle 默认使用大写名称。同样如果目标数据库方言是 PostgreSQL 并且事件的主题是 ORDERS则目标表将创建为 order因为当名称不带引号时 PostgreSQL 默认为小写名称。
要显式保留 Kafka 事件中存在的表名称和字段名称的大小写请在连接器配置中将 quote.identifiers 属性的值设置为 true。设置此选项后当传入事件针对名为orders 的主题且目标数据库方言为Oracle 时连接器将创建一个名为orders 的表因为构造的SQL 将表的名称定义为“orders”。当连接器创建列名称时启用引号会导致相同的行为。
十二、数据类型映射
Debezium JDBC 接收器连接器通过使用逻辑或原始类型映射系统来解析列的数据类型。基本类型包括整数、浮点数、布尔值、字符串和字节等值。通常这些类型仅用特定的 Kafka Connect 架构类型代码表示。逻辑数据类型通常是复杂类型包括具有一组固定字段名称和架构的基于结构的类型等值或用特定编码表示的值例如自纪元以来的天数。
以下示例显示了原始数据类型和逻辑数据类型的代表性结构
原始字段模式
{schema: {type: INT64}
}逻辑字段模式
[schema: {type: INT64,name: org.apache.kafka.connect.data.Date}
]Kafka Connect 并不是这些复杂逻辑类型的唯一来源。事实上Debezium 源连接器生成的更改事件具有类似逻辑类型的字段来表示各种不同的数据类型包括但不限于时间戳、日期甚至 JSON 数据。
Debezium JDBC 接收器连接器使用这些基元和逻辑类型将列的类型解析为 JDBC SQL 代码该代码表示列的类型。然后底层 Hibernate 持久性框架使用这些 JDBC SQL 代码将列的类型解析为所使用方言的逻辑数据类型。下表说明了 Kafka Connect 和 JDBC SQL 类型之间以及 Debezium 和 JDBC SQL 类型之间的原始映射和逻辑映射。实际的最终列类型因每种数据库类型而异。
Kafka Connect 原语与列数据类型之间的映射Kafka Connect逻辑类型与列数据类型的映射关系Debezium 逻辑类型和列数据类型之间的映射Debezium 方言特定的逻辑类型和列数据类型之间的映射
表 1. Kafka Connect 原语和列数据类型之间的映射
原始类型JDBC SQL类型INT8Types.TINYINTINT16Types.SMALLINTINT32Types.INTEGERINT64Types.BIGINTFLOAT32Types.FLOATFLOAT64Types.DOUBLEBOOLEANTypes.BOOLEANSTRINGTypes.CHAR, Types.NCHAR, Types.VARCHAR, Types.NVARCHARBYTESTypes.VARBINARY
表 2. Kafka Connect 逻辑类型和列数据类型之间的映射
逻辑类型JDBC SQL类型org.apache.kafka.connect.data.DecimalTypes.DECIMALorg.apache.kafka.connect.data.DateTypes.DATEorg.apache.kafka.connect.data.TimeTypes.TIMESTAMPorg.apache.kafka.connect.data.TimestampTypes.TIMESTAMP
表 3. Debezium 逻辑类型和列数据类型之间的映射
逻辑类型JDBC SQL类型io.debezium.time.DateTypes.DATEio.debezium.time.TimeTypes.TIMESTAMPio.debezium.time.MicroTimeTypes.TIMESTAMPio.debezium.time.NanoTimeTypes.TIMESTAMPio.debezium.time.ZonedTimeTypes.TIME_WITH_TIMEZONEio.debezium.time.TimestampTypes.TIMESTAMPio.debezium.time.MicroTimestampTypes.TIMESTAMPio.debezium.time.NanoTimestampTypes.TIMESTAMPio.debezium.time.ZonedTimestampTypes.TIMESTAMP_WITH_TIMEZONEio.debezium.data.VariableScaleDecimalTypes.DOUBLE
重要如果数据库不支持带时区的时间或时间戳则映射将解析为不带时区的等效值。
逻辑类型MySQL SQL类型PostgreSQL SQL类型SQL Server SQL类型io.debezium.data.Bitsbit(n)bit(n) or bit varyingvarbinary(n)io.debezium.data.EnumenumTypes.VARCHARn/aio.debezium.data.Jsonjsonjsonn/aio.debezium.data.EnumSetsetn/an/aio.debezium.time.Yearyear(n)n/an/aio.debezium.time.MicroDurationn/aintervaln/aio.debezium.data.Ltreen/altreen/aio.debezium.data.Uuidn/auuidn/aio.debezium.data.Xmln/axmlxml
除了上面的原语和逻辑映射之外如果更改事件的源是 Debezium 源连接器则可以通过启用列或数据类型进一步影响列类型的分辨率及其长度、精度和小数位数传播。要强制传播必须在源连接器配置中设置以下属性之一
column.propagate.source.typedatatype.propagate.source.type
Debezium JDBC 接收器连接器应用具有较高优先级的值。
例如假设更改事件中包含以下字段架构
Debezium 更改事件字段架构并启用列或数据类型传播
{schema: {type: INT8,parameters: {__debezium.source.column.type: TINYINT,__debezium.source.column.length: 1}}
}在前面的示例中如果未设置架构参数则 Debezium JDBC 接收器连接器会将此字段映射到 Types.SMALLINT 列类型。 Types.SMALLINT 可以具有不同的逻辑数据库类型具体取决于数据库方言。对于 MySQL示例中的列类型转换为没有指定长度的 TINYINT 列类型。如果为源连接器启用了列或数据类型传播则 Debezium JDBC 接收器连接器将使用映射信息来优化数据类型映射过程并创建类型为 TINYINT(1) 的列。
注意通常当源数据库和接收器数据库使用相同类型的数据库时使用列或数据类型传播的效果要大得多。我们不断寻找改进跨异构数据库映射的方法当前的类型系统使我们能够根据反馈继续完善这些映射。
十三、部署
安装步骤
下载 Debezium JDBC 连接器插件将Debezium JDBC 连接器插件文件提取到Kafka Connect 环境中。可选从 Maven Central 下载 JDBC 驱动程序并将下载的驱动程序文件提取到包含 JDBC 接收器连接器 JAR 文件的目录。注意JDBC 接收器连接器不包含 Oracle 和 Db2 的驱动程序。必须下载驱动程序并手动安装。将驱动程序 JAR 文件添加到 JDBC 接收器连接器的安装路径。确保安装 JDBC 接收器连接器的路径是 Kafka Connect plugin.path 的一部分。重新启动 Kafka Connect 进程以获取新的 JAR 文件。
安装详细步骤请参考博主下面这篇技术博客
Debezium系列之安装部署debezium详细步骤并把debezium服务托管到systemctl
十四、Debezium JDBC 连接器配置
通常可以通过提交指定连接器配置属性的 JSON 请求来注册 Debezium JDBC 连接器。以下示例显示了用于注册 Debezium JDBC 接收器连接器实例的 JSON 请求该连接器使用最常见的配置设置使用来自名为 order 的主题的事件
示例Debezium JDBC 连接器配置
{name: jdbc-connector, 1config: {connector.class: io.debezium.connector.jdbc.JdbcSinkConnector, 2tasks.max: 1, 3connection.url: jdbc:postgresql://localhost/db, 4connection.username: pguser, 5connection.password: pgpassword, 6insert.mode: upsert, 7delete.enabled: true, 8primary.key.mode: record_key, 9schema.evolution: basic, 10database.time_zone: UTC, 11topics: orders 12}
}1.当向 Kafka Connect 服务注册连接器时分配给连接器的名称。2.JDBC 接收器连接器类的名称。3.为此连接器创建的最大任务数。4.连接器用于连接到其写入的接收器数据库的 JDBC URL。5.用于身份验证的数据库用户的名称。6.用于身份验证的数据库用户的密码。7.连接器使用的 insert.mode。8.允许删除数据库中的记录。9.指定用于解析主键列的方法。10.使连接器能够发展目标数据库的架构。11.指定编写时间字段类型时使用的时区。12.要使用的主题列表以逗号分隔。
有关可以为 Debezium JDBC 连接器设置的配置属性的完整列表。
可以使用 POST 命令将此配置发送到正在运行的 Kafka Connect 服务。该服务记录配置并启动执行以下操作的接收器连接器任务
连接到数据库。使用订阅的 Kafka 主题中的事件。将事件写入配置的数据库。
十五、Connector属性
Debezium JDBC 接收器连接器具有多个配置属性可以使用它们来实现满足您需求的连接器行为。许多属性都有默认值。有关属性的信息组织如下
JCBC 连接器通用属性JDBC 连接器连接属性JDBC 连接器运行时属性JDBC 连接器可扩展属性
表 5. 通用属性
属性默认值描述nameNo default连接器的唯一名称。如果您在注册连接器时尝试重复使用此名称则会导致失败。所有 Kafka Connect 连接器都需要此属性。connector.classNo default连接器的 Java 类的名称。对于 Debezium JDBC 连接器指定值 io.debezium.connector.jdbc.JdbcSinkConnector。tasks.max1用于此连接器的最大任务数。topicsNo default要使用的主题列表以逗号分隔。请勿将此属性与 topic.regex 属性结合使用。topics.regexNo default指定要使用的主题的正则表达式。在内部正则表达式被编译为 java.util.regex.Pattern。请勿将此属性与主题属性结合使用。
表 6. JDBC 连接器连接属性
PropertyDefaultDescriptionconnection.urlNo default用于连接数据库的 JDBC 连接 URL。connection.usernameNo default连接器用于连接到数据库的数据库用户帐户的名称。connection.passwordNo default连接器用于连接数据库的密码。connection.pool.min_size5指定池中的最小连接数。connection.pool.max_size32指定池维护的最大并发连接数。connection.pool.acquire_increment32指定当连接池超过其最大大小时连接器尝试获取的连接数。connection.pool.timeout1800指定未使用的连接在被丢弃之前保留的秒数。
表 7. JDBC 连接器运行时属性
属性默认值描述database.time_zoneUTC指定插入 JDBC 临时值时使用的时区。delete.enabledfalse指定连接器是否处理 DELETE 或逻辑删除事件并从数据库中删除相应的行。使用此选项需要将primary.key.mode 设置为record.key。truncate.enabledfalse指定连接器是否处理 TRUNCATE 事件并从数据库中截断相应的表。insert.modeinsert指定用于将事件插入数据库的策略。可以使用以下选项insert指定所有事件都应构造基于 INSERT 的 SQL 语句。仅当未使用主键时或者当您可以确定不会对具有现有主键值的行进行更新时才使用此选项。update指定所有事件都应构造基于 UPDATE 的 SQL 语句。仅当您可以确定连接器仅接收适用于现有行的事件时才使用此选项。upsert指定连接器使用 upsert 语义将事件添加到表中。也就是说如果主键不存在则连接器执行 INSERT 操作如果主键存在则连接器执行 UPDATE 操作。当需要幂等写入时应将连接器配置为使用此选项。primary.key.modenone指定连接器如何解析事件中的主键列。none指定不创建主键列。kafka指定连接器使用 Kafka 坐标作为主键列。键坐标是根据事件的主题名称、分区和偏移量定义的并映射到具有以下名称的列__连接主题__连接分区__connect_offsetrecord_key指定主键列源自事件的记录键。如果记录键是原始类型则需要使用primary.key.fields属性来指定主键列的名称。如果记录键是结构类型则primary.key.fields属性是可选的并且可用于将事件键中的列子集指定为表的主键。record_value指定主键列源自事件的值。您可以设置primary.key.fields属性来将主键定义为事件值的字段子集否则默认使用所有字段。primary.key.fieldsNo default主键列的名称或从中派生主键的逗号分隔字段列表。当primary.key.mode设置为record_key并且事件的键是原始类型时预计该属性指定用于键的列名。当 Primary.key.mode 设置为具有非原始键的 record_key 或 record_value 时预计此属性会指定键或值中的以逗号分隔的字段名称列表。如果primary.key.mode设置为具有非原始键的record_key或record_value并且未指定此属性则连接器从记录键或记录值的所有字段派生主键具体取决于指定的模式。quote.identifiersfalse指定生成的 SQL 语句是否使用引号来分隔表名和列名。schema.evolutionnone指定连接器如何演变目标表架构。有关更多信息请参阅架构演变。可以使用以下选项none指定连接器不发展目标架构。basic指定发生基本进化。连接器通过将传入事件的记录架构与数据库表结构进行比较将缺失的列添加到表中。table.name.format${topic}指定一个字符串该字符串根据事件的主题名称确定目标表名称的格式。占位符 ${topic} 将替换为主题名称。dialect.postgres.postgis.schemapublic指定安装 PostgreSQL PostGIS 扩展的架构名称。默认为public但是如果 PostGIS 扩展安装在另一个模式中则应使用此属性来指定备用模式名称。dialect.sqlserver.identity.insertfalse指定连接器是否在对 SQL Server 表的标识列执行 INSERT 或 UPSERT 操作之前自动设置 IDENTITY_INSERT然后在操作后立即取消设置。当默认设置 (false) 生效时对表的 IDENTITY 列执行 INSERT 或 UPSERT 操作会导致 SQL 异常。batch.size500指定尝试将多少记录一起批处理到目标表中。请注意如果您在 Connect Worker 属性中将 Consumer.max.poll.records 设置为低于batch.size的值则批处理将受到consumer.max.poll.records的限制并且将无法达到所需的batch.size 。您还可以在连接器配置中使用consumer.override.max.poll.records来配置连接器的底层消费者的max.poll.records。field.include.listempty string可选的、以逗号分隔的字段名称列表与要包含在更改事件值中的字段的完全限定名称相匹配。字段的完全限定名称的格式为 fieldName 或 topicName:_fieldName_。如果您在配置中包含此属性请不要设置 field.exclude.list 属性。field.exclude.listempty string任选的、以分隔的字段名称列表与要从更改事件值中删除的字段的完全限定名称相匹配。字段的完全限定名称的格式为 fieldName 或 topicName:_fieldName_。如果您在配置中包含此属性请不要设置 field.include.list 属性。
表 8. JDBC 连接器可扩展属性
属性默认值描述column.naming.strategyi.d.c.j.n.DefaultColumnNamingStrategy指定连接器用来解析事件字段名称中的列名称的 ColumnNamingStrategy 实现的完全限定类名称。默认情况下连接器使用字段名称作为列名称。table.naming.strategyi.d.c.j.n.DefaultTableNamingStrategy指定 TableNamingStrategy 实现的完全限定类名称连接器使用该实现来解析传入事件主题名称中的表名称。默认行为是将 table.name.format 配置属性中的 ${topic} 占位符替换为事件的主题。通过用下划线 (_) 替换点 (.) 来清理表名称。
十六、经常问的问题
是否需要 ExtractNewRecordState 单消息转换
不这实际上是 Debezium JDBC 连接器与其他实现的区别因素之一。虽然连接器能够像其竞争对手一样摄取扁平化事件但它也可以本地摄取 Debezium 的复杂变更事件结构而不需要任何特定类型的转换。
如果列的类型发生更改或者列被重命名或删除这是否由模式演化处理
不会Debezium JDBC 连接器不会对现有列进行任何更改。连接器支持的模式演变非常基本。它只是将事件结构中的字段与表的列列表进行比较然后添加尚未定义为表中的列的任何字段。如果列的类型或默认值发生更改连接器不会在目标数据库中调整它们。如果重命名列旧列将保持原样并且连接器会将具有新名称的列追加到表中但是旧列中包含数据的现有行保持不变。这些类型的架构更改应手动处理。
如果列的类型无法解析为我想要的类型如何强制映射到不同的数据类型
Debezium JDBC 连接器使用复杂的类型系统来解析列的数据类型。有关此类型系统如何将特定字段的架构定义解析为 JDBC 类型的详细信息请参阅数据和列类型映射部分。如果要应用不同的数据类型映射请手动定义表以显式获取首选列类型。
如何在不更改Kafka主题名称的情况下为表名称指定前缀或后缀
要向目标表名称添加前缀或后缀请调整 table.name.format 连接器配置属性以应用所需的前缀或后缀。例如要为所有表名称添加 jdbc_ 前缀请指定 table.name.format 配置属性的值为 jdbc_${topic}。如果连接器订阅了名为orders 的主题则结果表将创建为jdbc_orders。
即使未启用标识符引用为什么某些列会自动引用
在某些情况下即使未启用 quote.identifiers也可能会显式引用特定的列或表名称。当列名或表名以特定约定开头或使用特定约定否则将被视为非法语法时这通常是必要的。例如当primary.key.mode设置为kafka时某些数据库仅允许列名以下划线开头如果列名被引用。引用行为是特定于方言的并且在不同类型的数据库之间有所不同。
十七、实际应用案例
Debezium系列之基于Debezium JDBC connector消费Topic数据到Mysql数据库
更多Debezium实战应用可以参考博主Debezium专栏
Debezium专栏Debezium实战应用详细总结 文章转载自: http://www.morning.rxsgk.cn.gov.cn.rxsgk.cn http://www.morning.grynb.cn.gov.cn.grynb.cn http://www.morning.kltmt.cn.gov.cn.kltmt.cn http://www.morning.njpny.cn.gov.cn.njpny.cn http://www.morning.leboju.com.gov.cn.leboju.com http://www.morning.zryf.cn.gov.cn.zryf.cn http://www.morning.gwzfj.cn.gov.cn.gwzfj.cn http://www.morning.dwwbt.cn.gov.cn.dwwbt.cn http://www.morning.wnkbf.cn.gov.cn.wnkbf.cn http://www.morning.kldtf.cn.gov.cn.kldtf.cn http://www.morning.tkhyk.cn.gov.cn.tkhyk.cn http://www.morning.jmwrj.cn.gov.cn.jmwrj.cn http://www.morning.zqdhr.cn.gov.cn.zqdhr.cn http://www.morning.xsjfk.cn.gov.cn.xsjfk.cn http://www.morning.dmnqh.cn.gov.cn.dmnqh.cn http://www.morning.pyzt.cn.gov.cn.pyzt.cn http://www.morning.cywf.cn.gov.cn.cywf.cn http://www.morning.qbccg.cn.gov.cn.qbccg.cn http://www.morning.rgpy.cn.gov.cn.rgpy.cn http://www.morning.lokext.com.gov.cn.lokext.com http://www.morning.mnkhk.cn.gov.cn.mnkhk.cn http://www.morning.pmlgr.cn.gov.cn.pmlgr.cn http://www.morning.tfcwj.cn.gov.cn.tfcwj.cn http://www.morning.hfrbt.cn.gov.cn.hfrbt.cn http://www.morning.wctqc.cn.gov.cn.wctqc.cn http://www.morning.dztp.cn.gov.cn.dztp.cn http://www.morning.hfrbt.cn.gov.cn.hfrbt.cn http://www.morning.dlwzm.cn.gov.cn.dlwzm.cn http://www.morning.bkppb.cn.gov.cn.bkppb.cn http://www.morning.dqcpm.cn.gov.cn.dqcpm.cn http://www.morning.hyryq.cn.gov.cn.hyryq.cn http://www.morning.huayaosteel.cn.gov.cn.huayaosteel.cn http://www.morning.btgxf.cn.gov.cn.btgxf.cn http://www.morning.pzcjq.cn.gov.cn.pzcjq.cn http://www.morning.rnxs.cn.gov.cn.rnxs.cn http://www.morning.ywgrr.cn.gov.cn.ywgrr.cn http://www.morning.rqfzp.cn.gov.cn.rqfzp.cn http://www.morning.rcttz.cn.gov.cn.rcttz.cn http://www.morning.mgzjz.cn.gov.cn.mgzjz.cn http://www.morning.cnxpm.cn.gov.cn.cnxpm.cn http://www.morning.zpjhh.cn.gov.cn.zpjhh.cn http://www.morning.gkmwk.cn.gov.cn.gkmwk.cn http://www.morning.nxtgb.cn.gov.cn.nxtgb.cn http://www.morning.pqkrh.cn.gov.cn.pqkrh.cn http://www.morning.smxyw.cn.gov.cn.smxyw.cn http://www.morning.rkxk.cn.gov.cn.rkxk.cn http://www.morning.dlbpn.cn.gov.cn.dlbpn.cn http://www.morning.ntqlz.cn.gov.cn.ntqlz.cn http://www.morning.nysjb.cn.gov.cn.nysjb.cn http://www.morning.rjljb.cn.gov.cn.rjljb.cn http://www.morning.lbrwm.cn.gov.cn.lbrwm.cn http://www.morning.hotlads.com.gov.cn.hotlads.com http://www.morning.nwczt.cn.gov.cn.nwczt.cn http://www.morning.bpmft.cn.gov.cn.bpmft.cn http://www.morning.qpmwb.cn.gov.cn.qpmwb.cn http://www.morning.wtdyq.cn.gov.cn.wtdyq.cn http://www.morning.mbbgk.com.gov.cn.mbbgk.com http://www.morning.rkmsm.cn.gov.cn.rkmsm.cn http://www.morning.mxtjl.cn.gov.cn.mxtjl.cn http://www.morning.fykrm.cn.gov.cn.fykrm.cn http://www.morning.zqkms.cn.gov.cn.zqkms.cn http://www.morning.0small.cn.gov.cn.0small.cn http://www.morning.wgtr.cn.gov.cn.wgtr.cn http://www.morning.nkkr.cn.gov.cn.nkkr.cn http://www.morning.rbffj.cn.gov.cn.rbffj.cn http://www.morning.mhdwp.cn.gov.cn.mhdwp.cn http://www.morning.xbkcr.cn.gov.cn.xbkcr.cn http://www.morning.mywnk.cn.gov.cn.mywnk.cn http://www.morning.cknrs.cn.gov.cn.cknrs.cn http://www.morning.ympcj.cn.gov.cn.ympcj.cn http://www.morning.rfjmy.cn.gov.cn.rfjmy.cn http://www.morning.fwllb.cn.gov.cn.fwllb.cn http://www.morning.kghss.cn.gov.cn.kghss.cn http://www.morning.kflzy.cn.gov.cn.kflzy.cn http://www.morning.pyswr.cn.gov.cn.pyswr.cn http://www.morning.hpcpp.cn.gov.cn.hpcpp.cn http://www.morning.qgkcs.cn.gov.cn.qgkcs.cn http://www.morning.xppj.cn.gov.cn.xppj.cn http://www.morning.bmts.cn.gov.cn.bmts.cn http://www.morning.wjhdn.cn.gov.cn.wjhdn.cn