本文已参与「新人创作礼」活动,一起开启掘金创作之路。
2.7 Schema Evolution
使用Avro转换器时,JDBC连接器支持架构演变。当数据库表架构发生更改时,JDBC连接器可以检测到更改,创建新的Connect架构,并尝试在Schema Registry中注册新的Avro架构。是否可以成功注册架构取决于架构注册表的兼容性级别,默认情况下该兼容性级别是向后的。
例如,如果您从表中删除一列,则更改是向后兼容的,并且相应的Avro架构可以在Schema Registry中成功注册。如果您修改数据库表架构以更改列类型或添加列,则将Avro架构注册到架构注册表时,由于更改不向后兼容,它将被拒绝。
您可以更改架构注册表的兼容性级别,以允许不兼容的架构或其他兼容性级别。有两种方法可以做到这一点:
- 使用设置连接器使用的主题的兼容级别 。受试者有格式,并 在被确定的配置和表名。
PUT /config/(string: subject)``topic-key``topic-value``topic``topic.prefix - 通过
avro.compatibility.level在架构注册表中进行设置,将架构注册表配置为使用其他架构兼容性级别 。请注意,这是一个全局设置,适用于架构注册表中的所有架构。
但是,由于JDBC API的限制,某些兼容的架构更改可能被视为不兼容的更改。例如,添加具有默认值的列是向后兼容的更改。但是,由于JDBC API的局限性,很难将其映射到Kafka Connect模式中正确类型的默认值,因此当前省略了默认值。其含义是,即使数据库表架构的某些更改是向后兼容的,在Schema Registry中注册的架构也不是向后兼容的,因为它不包含默认值。
如果将JDBC连接器与HDFS连接器一起使用,则对模式兼容性也有一些限制。启用Hive集成后,需要向后,向前和完整的架构兼容性,以确保Hive架构能够查询某个主题下的全部数据。由于某些兼容的架构更改将被视为不兼容的架构更改,因此这些更改将不起作用,因为生成的Hive架构将无法查询整个数据中的某个主题。
2.8 Configuration Properties
2.8.1 配置类
要使用此连接器,请在connector.class配置属性中指定连接器类的名称。
connector.class=io.confluent.connect.jdbc.JdbcSourceConnector
连接器特定的配置属性如下所述。
2.8.2 数据库连接安全
在连接器配置中,您会注意到没有安全参数。这是因为SSL不属于JDBC标准,而是取决于所使用的JDBC驱动程序。通常,您需要通过connection.url参数配置SSL 。例如,对于MySQL,它看起来像:
connection.url="jdbc:mysql://127.0.0.1:3306/sample?verifyServerCertificate=false&useSSL=true&requireSSL=true"
请查阅有关支持和配置的特定JDBC驱动程序文档。
2.8.3 数据库
connection.url
JDBC连接URL。
- 类型:字符串
- 重要性:高
- 家属:
table.whitelist,table.blacklist
connection.user
JDBC连接用户。
- 类型:字符串
- 默认值:空
- 重要性:高
connection.password
JDBC连接密码。
- 类型:密码
- 默认值:空
- 重要性:高
connection.attempts
检索有效JDBC连接的最大尝试次数。
- 类型:int
- 默认值:3
- 重要性:低
connection.backoff.ms
两次连接尝试之间的退避时间(以毫秒为单位)。
- 类型:长
- 默认值:10000
- 重要性:低
catalog.pattern
目录模式以从数据库中获取表元数据。
- 类型:字符串
- 默认值:空
- “”检索那些没有目录的人
- null(默认值)指示不使用架构名称来缩小搜索范围,并且所有表元数据均已获取,无论目录如何。
- 重要性:中等
table.whitelist
要包括在复制中的表的列表。如果指定,则table.blacklist可能未设置。使用逗号分隔的列表来指定多个表(例如)。table.whitelist: "User, Address, Email"
- 类型:清单
- 默认值:“”
- 重要性:中等
table.blacklist
列表中要排除的表。如果指定,则table.whitelist可能未设置。使用逗号分隔的列表来指定多个表(例如)。table.blacklist: "User, Address, Email"
- 类型:清单
- 默认值:“”
- 重要性:中等
schema.pattern
从数据库中获取表元数据的模式模式。
-
类型:字符串
-
默认值:空
""检索那些没有模式的。- null(默认值)指示不使用架构名称来缩小搜索范围,并且所有表元数据均被获取,而与架构无关。
-
重要性:高
重要
如果将其保留为默认的null设置,则连接器可能会超时并失败,原因是接收到大量的表元数据。确保为大型数据库设置此参数。
numeric.precision.mapping
是否尝试通过精度将NUMERIC值映射到整数类型。现在不推荐使用此选项。将来的版本可能会完全删除它。请numeric.mapping改用。
- 类型:布尔值
- 默认值:false
- 重要性:低
numeric.mapping
通过精度映射NUMERIC值,还可以选择缩放为整数或十进制类型。
- 类型:字符串
- 默认值:空
- 有效值:[none,precision_only,best_fit]
- 使用
none如果所有的数字列被连接的DECIMAL逻辑类型来表示。 - 使用
best_fit如果数值列应基于列的精度和规模转换为连接的INT8,INT16,INT32,INT64或FLOAT64。 - 使用
precision_only映射仅基于列的精度假设列的比例为0数字列。 - 该
none选项是默认选项,但由于Connect的DECIMAL类型映射到其二进制表示形式,因此可能会导致Avro的序列化问题,并且best_fit由于它映射到最合适的原始类型而经常会被首选。
- 使用
- 重要性:低
dialect.name
该连接器应使用的数据库方言的名称。默认情况下为空,并且连接器根据JDBC连接URL自动确定方言。如果要覆盖该行为并使用特定的方言,请使用此选项。可以使用JDBC连接器插件中所有正确包装的方言。
- 类型:字符串
- 默认值:“”
- 有效值:[ ]
, Db2DatabaseDialect, MySqlDatabaseDialect, SybaseDatabaseDialect, GenericDatabaseDialect, OracleDatabaseDialect,SqlServerDatabaseDialect, PostgreSqlDatabaseDialect, SqliteDatabaseDialect, DerbyDatabaseDialect, SapHanaDatabaseDialect, MockDatabaseDialect, VerticaDatabaseDialect - 重要性:低