开云体育官方注册网址Debezium为JDBC连接器
概述
Debe开云体育官方注册网址zium JDBC连接器是卡夫卡连接水槽连接器实现可以使用来自多个源的事件主题,然后写这些事件到一个关系数据库中通过使用JDBC驱动程序。开云体育电动老虎机这个连接器支持多种数据库方言,包括Db2、MySQL,甲骨文,PostgreSQL和开云体育电动老虎机SQL Server。
JDBC连接器是如何运作的吗
Debe开云体育官方注册网址zium JDBC连接器是卡夫卡水槽连接器连接,因此要求卡夫卡连接运行时。连接器定期民调卡夫卡主题订阅,消费活动的主题,然后将事件写入关系数据库进行配置。开云体育电动老虎机连接器支持幂等写操作通过使用插入语义和基本模式演化。
支持以下特性:
使用复杂Debezium变化事件开云体育官方注册网址
默认情况下,Debezi开云体育官方注册网址um源连接器生产复杂,层次变化的事件。当Debe开云体育官方注册网址zium连接器水槽与其他使用JDBC连接器实现,您可能需要应用ExtractNewRecordState
单个消息转换(SMT)平载荷变化的事件,这样他们可以被实现。如果运行水槽Debezium 开云体育官方注册网址JDBC连接器,它不是必要的部署SMT,因为Debezium水槽连接器可以直接使用本地Debezium改变事件,没有使用一个转换。
当水槽JDBC连接器使用一个复杂的更改事件从Debezium源连接器,它提取的值开云体育官方注册网址后
部分的原始插入
或更新
事件。删除事件时被水槽连接器,没有咨询事件有效负载的一部分。
多个任务
您可以运行跨多个卡夫卡水槽Deb开云体育官方注册网址ezium JDBC连接器连接的任务。连接器运行多个任务,设置tasks.max
配置属性的任务的数量你想要使用的连接器。卡夫卡连接运行时启动指定数量的任务,并运行一个实例连接器的每个任务。多个任务可以通过阅读提高性能和并行处理来自多个源变化的话题。
和列数据类型映射
让水槽Debezium JD开云体育官方注册网址BC连接器正确地从一个入站消息字段的数据类型映射到出站消息字段,连接器需要的每个字段的数据类型的信息存在于源的事件。连接器支持广泛的列类型映射在不同数据库方言。开云体育电动老虎机正确转换的目标列类型类型
元数据在一个事件字段中,连接器适用于数据类型映射定义的源数据库。开云体育电动老虎机你可以提高连接器的方式解决通过设置数据类型的列column.propagate.source.type
或datatype.propagate.source.type
源连接器配置选项。当你启用这些选项,Debezium包括额外参数元数据,它帮助水开云体育官方注册网址槽JDBC连接器更准确地解决目标列的数据类型。
水槽Debezi开云体育官方注册网址um JDBC连接器处理事件从卡夫卡的话题,卡夫卡主题消息键,当礼物,必须是原始数据类型或结构体
。此外,必须是源的负载信息结构体
有一个扁平的结构没有嵌套结构体
类型,或者一个嵌套结构体
布局符合Debezium复杂的层次结构。开云体育官方注册网址
如果事件在卡夫卡的结构主题不遵守这些规则,你必须实现一个自定义单个消息转换源事件的结构转换成一个可用的格式。
主键处理
默认情况下,水槽Debezium开云体育官方注册网址 JDBC连接器不源事件中的任何字段转换成主键的事件。不幸的是,缺乏一个稳定的主键可以复杂事件处理,根据您的业务需求,或者当水槽连接器使用插入语义。定义一个主键一致,您可以配置连接器使用的主键模式中描述如下表:
模式 | 描述 |
---|---|
|
在创建表时没有指定主键字段。 |
|
主键包含以下三个列:
这些列的值是来自卡夫卡事件的坐标。 |
|
主键是由卡夫卡事件的关键。 |
|
卡夫卡的主键是由事件的价值。 |
一些数据库开云体育电动老虎机方言如果你设置可能会抛出一个异常
|
删除模式
水槽De开云体育官方注册网址bezium JDBC连接器可以在目标数据库中删除行开云体育电动老虎机删除
或墓碑上事件被消耗。默认情况下,水槽JDBC连接器不支持删除模式。
如果你想支持删除行,在连接器配置通过设置显式地启用它delete.enabled = true
在连接器配置。然而,使用这种模式必须设置primary.key.fields
以外的一个值没有一个
。前面的配置是必要的,因为删除执行基于主键映射,所以如果一个目标表没有主键映射,连接器无法删除行。
幂等写道
水槽De开云体育官方注册网址bezium JDBC连接器支持幂等写道,允许同一记录反复重播,最后数据库状态保持一致。开云体育电动老虎机为了支持幂等写道,水槽JDBC连接器必须显式地配置了insert.mode
设置为插入
。一个插入
操作和一个应用更新
或者一个插入
,这取决于指定的主键已经存在。如果主键值已经存在,操作更新值的行。如果指定的主键值不存在,一个插入
添加一个新行。
每个数据库开云体育电动老虎机方言处理幂等不同写道,因为没有SQL标准插入操作。下面说明了插入特定于数据库的使用DML语法,支持数据库方言:开云体育电动老虎机
方言 | Upsert语法 |
---|---|
Db2 |
|
MySQL |
|
甲骨文 |
|
PostgreSQL |
|
SQL Server |
|
模式演化
水槽De开云体育官方注册网址bezium JDBC连接器支持以下模式演化模式:
模式 | 描述 |
---|---|
|
连接器不执行任何DDL模式演化。 |
|
连接器自动检测领域的事件有效负载,但目标表中不存在。连接器改变了目标表添加新字段。 |
当schema.evolution
被设置为基本
,连接器会自动创建或改变目标数据库表根据传入的事件的结构。开云体育电动老虎机
事件时收到一个主题第一次和目标表不存在,水槽Debezium JDBC连接器使用事件的关键,或记录的模式结构表的结构来解决这一列。开云体育官方注册网址如果启用了模式演化,连接器准备和执行创建表
SQL语句之前应用DML事件到目标表。
当Debezium开云体育官方注册网址 JDBC连接器接收到一个事件从一个话题,如果模式记录的结构不同于目标表的模式结构,连接器使用事件的关键或其模式结构来识别哪些列是新的,而且必须被添加到数据库表中。开云体育电动老虎机如果启用了模式演化,连接器准备和执行ALTER TABLE
SQL语句之前应用DML事件到目标表。因为改变列的数据类型,删除列,调整主键可以被认为是危险的操作,连接器禁止执行这些操作。
确定每个字段列的模式零
或非空
。模式还定义了每一列的默认值。如果连接器试图创建一个表nullability设置或不希望一个默认值,您必须手动创建表,提前,或调整相关领域的模式在水槽连接器处理事件。调整nullability设置或默认值,您可以引入一个自定义单独的消息转换,适用于管道的变化,或修改列源数据库中定义的状态。开云体育电动老虎机
一个字段的数据类型是解决基于一组预定义的映射。有关更多信息,请参见数据类型的映射。
当你引入新的领域的事件结构在目标数据库中已经存在的表,您必须定义新的字段为可选,或者字段必须有一个默认值中指定的数据库模式。开云体育电动老虎机如果你想要一个字段删除目标表,使用下列选项之一:
|
引用和大小写敏感性
水槽De开云体育官方注册网址bezium JDBC连接器消耗卡夫卡消息通过构造DDL(模式变化)或DML(数据变化)在目标数据库上执行SQL语句。开云体育电动老虎机默认情况下,连接器使用源话题和事件字段的名称为基础目标表中的表和列的名称。构建SQL不会自动划标识符和引用保存原始字符串的情况下。因此,默认情况下,文本的目标数据库中的表名或列名完全取决于数据库如何处理名称字符串时没有指定。开云体育电动老虎机
例如,如果目标数据库方言是甲骨文和事件的主题是开云体育电动老虎机订单
,目标表将被创建订单
因为甲骨文时默认为大写的名字的名字不是引用。类似地,如果目的地PostgreSQL数据库方言和事件的主题开云体育电动老虎机是订单
,目标表将被创建订单
因为PostgreSQL时默认为小写的名字的名字不是引用。
通过设置quote.identifiers
来真正的
在连接器配置,您可以显式地设置表和字段的名称保存的情况下,存在于卡夫卡事件。如果传入的事件为主题订单
和目标数据库方言是甲骨文,如果启用了引用开云体育电动老虎机——也就是说,如果quote.identifiers
被设置为真正的
——连接器创建一个表的名称订单
,因为构造SQL定义的表的名称“订单”
。当启用引用时,创建列名的行为以同样的方式工作。
数据类型的映射
水槽De开云体育官方注册网址bezium JDBC连接器解决一个列的数据类型使用一个逻辑或原始类型映射系统。原始类型包括价值观,如整数、浮点数、布尔值、字符串和字节。通常,这些类型与一个特定的卡夫卡连接表示模式
类型的代码。逻辑数据类型更复杂的类型,包括价值观等结构体
有一组固定的字段名称的类型和模式,或值,用特定的编码表示,如时代以来的天数。
下面的例子展示代表原始结构和逻辑数据类型:
{"模式":{“类型”:“INT64}}
["模式":{“类型”:“INT64”、“名称”:“org.apache.kafka.connect.data。日期”}]
卡夫卡这些复杂的连接并不是唯一来源,逻辑类型。事实上,Debez开云体育官方注册网址ium源连接器生成变化事件,与类似的逻辑字段类型来表示各种不同的数据类型,包括但不限于,时间戳,日期,甚至JSON数据。
水槽De开云体育官方注册网址bezium JDBC连接器使用这些原始和逻辑类型来解决一个列的类型为JDBC SQL代码,代表一个列的类型。然后使用这些JDBC SQL代码由底层Hibernate持久性框架解决逻辑数据类型的列的类型使用的方言。下表说明了原始和卡夫卡连接之间的逻辑映射和JDBC SQL类型,和Debezium之间和JDBC SQL类型。开云体育官方注册网址实际的最后一列类型为每个数据库类型随。开云体育电动老虎机
原始类型 | JDBC SQL类型 |
---|---|
INT8 |
Types.TINYINT |
INT16 |
Types.SMALLINT |
INT32 |
Types.INTEGER |
INT64 |
Types.BIGINT |
FLOAT32 |
Types.FLOAT |
FLOAT64 |
Types.DOUBLE |
布尔 |
Types.BOOLEAN |
字符串 |
类型。字符,类型。NCHAR,类型。VARCHAR、Types.NVARCHAR |
字节 |
Types.VARBINARY |
逻辑类型 | JDBC SQL类型 |
---|---|
org.apache.kafka.connect.data.Decimal |
Types.DECIMAL |
org.apache.kafka.connect.data.Date |
Types.DATE |
org.apache.kafka.connect.data.Time |
Types.TIMESTAMP |
org.apache.kafka.connect.data.Timestamp |
Types.TIMESTAMP |
逻辑类型 | JDBC SQL类型 |
---|---|
io.开云体育官方注册网址debezium.time.Date |
Types.DATE |
io.开云体育官方注册网址debezium.time.Time |
Types.TIMESTAMP |
io.开云体育官方注册网址debezium.time.MicroTime |
Types.TIMESTAMP |
io.开云体育官方注册网址debezium.time.NanoTime |
Types.TIMESTAMP |
io.开云体育官方注册网址debezium.time.ZonedTime |
Types.TIME_WITH_TIMEZONE |
io.开云体育官方注册网址debezium.time.Timestamp |
Types.TIMESTAMP |
io.开云体育官方注册网址debezium.time.MicroTimestamp |
Types.TIMESTAMP |
io.开云体育官方注册网址debezium.time.NanoTimestamp |
Types.TIMESTAMP |
io.开云体育官方注册网址debezium.time.ZonedTimestamp |
Types.TIMESTAMP_WITH_TIMEZONE |
io.开云体育官方注册网址debezium.data.VariableScaleDecimal |
Types.DOUBLE |
如果数据库不支开云体育电动老虎机持时间或时间戳与时区,解决其等效没有时区的映射。 |
逻辑类型 | MySQL SQL类型 | PostgreSQL SQL类型 | SQL Server SQL类型 |
---|---|---|---|
io.开云体育官方注册网址debezium.data.Bits |
|
|
|
io.开云体育官方注册网址debezium.data.Enum |
|
Types.VARCHAR |
n /一个 |
io.开云体育官方注册网址debezium.data.Json |
|
|
n /一个 |
io.开云体育官方注册网址debezium.data.EnumSet |
|
n /一个 |
n /一个 |
io.开云体育官方注册网址debezium.time.Year |
|
n /一个 |
n /一个 |
io.开云体育官方注册网址debezium.time.MicroDuration |
n /一个 |
|
n /一个 |
io.开云体育官方注册网址debezium.data.Ltree |
n /一个 |
|
n /一个 |
io.开云体育官方注册网址debezium.data.Uuid |
n /一个 |
|
n /一个 |
io.开云体育官方注册网址debezium.data.Xml |
n /一个 |
|
|
除了上面的原始和逻辑映射中,如果改变事件的来源是Debezium源连接器,该决议的列类型,随着它的长度,精度和规模,可以进一步受到传播使列或数据类型。开云体育官方注册网址执行传播,以下属性必须设置在源连接器配置:
column.propagate.source.type
datatype.propagate.source.type
水槽De开云体育官方注册网址bezium JDBC连接器应用价值更高的优先级。
例如,假设以下字段更改事件模式包括:
{"模式":{“类型”:“INT8”,“参数”:{“__debezium.source.colum开云体育官方注册网址n。”:“非常小的整数型”、“__debezi开云体育官方注册网址um.source.column。长度”:“1”}}}
在前面的例子中,如果没有模式参数设置、水槽Debezium JDBC连接器将这个字段映射到列类型开云体育官方注册网址Types.SMALLINT
。Types.SMALLINT
可以有不同的逻辑数据库类型,根据数据库方言。开云体育电动老虎机将转换为一个MySQL的例子非常小的整数
列类型没有指定的长度。如果启用了列或数据类型传播源连接器,水槽Debezium JDBC连接器使用映射信息提炼数据类型映射过程和创建一个列的类型开云体育官方注册网址非常小的整数(1)
。
通常,使用列或数据类型传播的影响是更大当相同类型的数据库用于源和汇的数据库。开云体育电动老虎机我们不断地寻找方法来提高跨异构数据库之间的映射和当前类型系统允许我们在反馈的基础上继续改进这些映射。开云体育电动老虎机如果你发现一个映射可以改进的,请告诉我们。 |
部署
部署Debezium J开云体育官方注册网址DBC连接器,安装Debezium JDBC连接器存档,配置连接器,并开始通过添加其配置卡夫卡连接连接器。
下载Debezium开云体育官方注册网址JDBC连接器插件存档。
将文件解压缩到卡夫卡连接环境中。
选择从Maven中央和提取下载JDBC驱动程序下载的驱动程序文件包含JDBC水槽连接器JAR文件的目录。
Oracle和Db2驱动程序不会自动附带水槽JDBC连接器,必须手动安装。 添加JDBC驱动程序JAR文件的路径水槽连接器已经安装。
确保JDBC连接器水槽安装的路径的一部分卡夫卡连接的
plugin.path
。重新启动卡夫卡连接过程去接新的JAR文件。
开云体育官方注册网址Debezium JDBC连接器配置
通常,您注册一个Debezium JDBC连接器通过开云体育官方注册网址提交一个JSON请求指定连接器的配置属性。下面的例子显示了JSON请求注册水槽Debezium JDBC连接器的一个实例,从一个主题叫消耗事件开云体育官方注册网址订单
最常见的配置设置:
{" name ": " jdbc连接器”,(1)“配置”:{“连接器。类”:“io.debez开云体育官方注册网址ium.connector.jdbc.JdbcSinkConnector”,(2)”任务。马克斯”:“1”,(3)”连接。url ": " jdbc: postgresql: / / localhost / db”,(4)”连接。用户名”:“pguser”,(5)”连接。密码”:“pgpassword”,(6)“插入。模式”:“插入”,(7)“删除”。启用”:“真正的”,(8)“primary.key。模式”:“record_key”,(9)”模式。进化”:“基本的”,(10)“开云体育电动老虎机数据库。time_zone UTC“:(11)}}
1 | 分配给连接器的名称与卡夫卡连接服务当你注册它。 |
2 | 的名称JDBC连接器类。 |
3 | 的最大数量为这个连接器创建任务。 |
4 | 连接器使用的JDBC URL连接到水槽写入数据库。开云体育电动老虎机 |
5 | 数据库用户的名称用于身份验证。开云体育电动老虎机 |
6 | 使用的数据库用户密码进行身份验证。开云体育电动老虎机 |
7 | 的insert.mode连接器使用。 |
8 | 允许删除记录在数据库中。开云体育电动老虎机有关更多信息,请参见delete.enabled配置属性。 |
9 | 指定该方法用于解决主键列。有关更多信息,请参见primary.key.mode配置属性。 |
10 | 使连接器发展目标数据库的模式。开云体育电动老虎机有关更多信息,请参见schema.evolution配置属性。 |
11 | 指定时区时使用的写作时间字段类型。 |
配置属性的完整列表,您可以设置Debezium JDBC连接器,明白了开云体育官方注册网址JDBC连接器属性。
你可以发送这个配置帖子
命令来运行卡夫卡连接服务。服务记录配置并启动一个水槽连接器任务(s),执行以下操作:
连接到数据库。开云体育电动老虎机
消耗的事件订阅卡夫卡的话题。
将事件写入配置数据库。开云体育电动老虎机
连接器属性
水槽De开云体育官方注册网址bezium JDBC连接器有几个配置属性,您可以使用它们来实现连接器行为能够满足您的需要。许多属性的默认值。属性信息的组织结构如下:
财产 | 默认的 | 描述 |
---|---|---|
没有默认的 |
JDBC连接URL用于连接到数据库。开云体育电动老虎机 |
|
没有默认的 |
数据库用户帐户的名称,连接器使用开云体育电动老虎机连接到数据库。 |
|
没有默认的 |
连接器使用的密码连接到数据库。开云体育电动老虎机 |
|
|
指定了最小数量的连接池中。 |
|
|
指定的最大并发连接数,池维护。 |
|
|
指定连接器的连接数,尝试获取如果连接池超过它的最大大小。 |
|
|
指定的秒数,一个未使用的连接保持之前就会被丢弃。 |
财产 | 默认的 | 描述 |
---|---|---|
|
插入时指定时区使用JDBC时间值。 |
|
|
指定是否连接器进程 |
|
|
指定策略用于事件插入数据库中。开云体育电动老虎机以下选项可用:
|
|
|
指定如何从事件连接器解决主键列。
|
|
没有默认的 |
主键列的名称或一个以逗号分隔的字段来获取主键。 |
|
|
指定生成的SQL语句是否使用引号分隔表和列的名称。看到引用和大小写敏感性部分为更多的细节。 |
|
|
指定连接器如何发展目标表模式。有关更多信息,请参见模式演化。以下选项可用:
|
|
|
指定一个字符串,决定目标表名是格式化的,基于事件的主题名称。占位符, |
财产 | 默认的 | 描述 |
---|---|---|
|
指定的完全限定类名 |
|
|
指定的完全限定类名
|
常见问题
-
是
ExtractNewRecordState
需要单独的消息转换? -
不,这实际上是一个微分Debezium JDBC连接器从其他实现的因素。开云体育官方注册网址当连接器能够摄取平事件像其竞争对手一样,它也可以摄取Debezium本地事件结构复杂的变化,不需要任何特定类型的转换。开云体育官方注册网址
- 如果一个列的类型是改变,或者重命名或删除列,这是由模式演化?
-
不,Debezi开云体育官方注册网址um JDBC连接器不进行任何更改现有的列。支持的模式演化连接器非常基本的。它只是比较事件结构中的字段到表的列列表,然后添加任何字段,尚未定义为表中的列。如果列的类型或默认值变化,连接器不调整他们的目标数据库。开云体育电动老虎机如果重命名列,老左列是按原样,和连接器添加一列新名称表;然而现有行老列中的数据保持不变。这些类型的模式变化应该手动处理。
- 如果一个列的类型不解决我想要的类型,我怎么能执行映射到不同的数据类型吗?
-
Debe开云体育官方注册网址zium JDBC连接器使用复杂的类型系统来解决一个列的数据类型。细节关于这个类型系统解决一个特定的领域的模式定义JDBC类型,看到和列数据类型映射部分。如果你想申请一个不同的数据类型映射,显式地定义了表手动获取首选列类型。
- 你如何指定表名前缀或后缀不改变卡夫卡主题名称?
-
为了添加一个前缀或后缀到目标表名、调整table.name.format连接器配置属性应用前缀或后缀,你想要的。例如,所有表名前缀
jdbc_
,指定table.name.format
配置属性的值jdbc_ ${主题}
。如果连接器订阅一个主题订单
,结果创建表jdbc_orders
。 - 为什么有些列自动引用,尽管标识符引用未启用?
-
在某些情况下,特定的列或表名可能是显式地引用,即使
quote.identifiers
不启用。这通常是必要的,当列或表名始于或使用一个特定的约定,否则被视为非法的语法。例如,当primary.key.mode被设置为卡夫卡
一开始,一些数开云体育电动老虎机据库只允许列名下划线如果列的名字引用。引用行为是dialect-specific,类型的数据库的不同而不同。开云体育电动老虎机