自定义转换器
数据类型转换
数据库列开云体育官方注册网址类型映射到相应的卡夫卡的De开云体育电动老虎机bezium连接器连接模式类型和转换相应的列值。特定的列类型映射记录为每个连接器和代表一个合理的默认行为的大部分时间。它仍然是有可能的,一个应用程序都需要一个特定的处理一个特定的列类型或特定列由于下游系统需求。例如您可能想要出口时间列值作为一个格式化的字符串,而不是时代以来的毫秒。
为此Debezium提供了一个扩展开云体育官方注册网址点,允许用户将自己的转换器基于他们的业务需求。转换器是用Java编写的,通过启用和配置连接器属性。
连接器启动期间,所有配置转换器实例化并放置在一个注册表。虽然connector-internal模式表示是建立,每一个转换器调用每个表的每一列/字段/收集和它本身可以注册成为负责给定的列或场的转换。
,每当一个新变化是由Debezium处理,调用转换器来执行实际的转换登记列或开云体育官方注册网址字段。
实现转换器
转换器的实现是一个Java类实现接口io.开云体育官方注册网址debezium.spi.converter.CustomConverter
:
公共接口CustomConverter < S、F扩展ConvertedField > {@FunctionalInterface接口转换器{对象转换(对象输入);}公共接口ConverterRegistration <年代>{无效注册(S fieldSchema转换器转换器);}无效配置(属性道具);空白converterFor (F, ConverterRegistration <年代>登记);}
该方法配置()
用来传递转换器配置选项转换器后实例化,所以它可以修改每个特定实例的运行时行为。该方法converterFor ()
调用Debezium和转换器开云体育官方注册网址需要电话吗登记
负责转换。登记提供目标模式定义和实际的转换代码。模式是目前使用卡夫卡连接来表示的SchemaBuilder
API。在将来,一个独立的模式定义API将被添加。元数据的列或字段通过场
参数。它们包含的信息如表或集合名称,列或字段名、类型名等等。
下面的示例实现了一个简单的转换器,它将:
接受一个参数命名
schema.name
注册为每一列的类型本身
国际标准图书编号
与目标
字符串
模式命名为根据schema.name
参数转换代码,将ISBN数据
字符串
公共静态类IsbnConverter实现CustomConverter < SchemaBuilder RelationalColumn >{私人SchemaBuilder isbnSchema;@Override公共空间配置(属性道具){isbnSchema = SchemaBuilder.string () . name (props.getProperty (schema.name "));}@Override公共空converterFor (RelationalColumn列,ConverterRegistration < SchemaBuilder >注册){如果(isbn“.equals (column.typeName())){登记。注册(isbnSchema x - > x.toString ());}}}
来编译代码必须提供依赖项开云体育官方注册网址debezium-api
和connect-api
模块:
<依赖> < groupId > io.debez开云体育官方注册网址ium < / groupId > < artifactId > debezium-api < / artifactId > <版本> $ {version.debezium} < /版本> < /依赖> <依赖> < groupId >表示。卡夫卡< / groupId > < artifactId > connect-api < / artifactId > <版本> ${版本。卡夫卡}< /版本> < /依赖>
在哪里$ {version开云体育官方注册网址.debezium}
和$ {version.kafka}
分别是Debezium和Apache卡夫开云体育官方注册网址卡的版本。
配置和使用转换器
转换器后开发必须部署在一个JAR文件并排Debezium连接器JAR。开云体育官方注册网址使转换器对于一个给定的连接器实例有必要提供连接器选项如下:
转换器= isbn isbn.type = io.debe开云体育官方注册网址zium.test.IsbnConverter isbn.schema.name = io.debezium.postgresql.type.Isbn
的选项转换器
是强制性的,列举了使用逗号分隔符号名称转换器实例。符号名称作为前缀用于进一步配置选项。
isbn.type
(一般<前缀> .type
)是强制性的,是实现转炉的类的名称。
isbn.schema.name
是一个转换器参数传递到转换器的吗配置
方法schema.name
。