开云体育官方注册网址Debezium事件反序列化
该功能目前处于孵化状态,即准确的语义,配置选项等可能会根据我们收到的反馈在未来的版本中改变。如果您在使用这些SerDes时遇到任何问题,请告诉我们。 |
开云体育官方注册网址Debezium以复杂消息结构的形式生成数据更改事件。这个消息稍后会被配置好的Kafka Connect转换器序列化,消费者负责将其反序列化为逻辑消息。为了这个目的,卡夫卡使用了所谓的并行转换器.
开云体育官方注册网址Debezium提供SerDes (io.开云体育官方注册网址debezium.serde.DebeziumSerdes
)来简化消费者的反序列化,无论是Kafka流管道还是普通Kafka消费者。
JSON SerDe
JSON SerDe反序列化JSON编码的更改事件,并将其转换为Java类。在内部这是通过使用杰克逊Databind.
使用者使用。创建serde实例
final Serde Serde = 开云体育官方注册网址DebeziumSerdes.payloadJson(MyType.class);
然后,使用者将接收逻辑Java类型MyType
其字段是由JSON消息初始化的。这适用于键和值。也可以使用普通的Java类型,如整数
,例如当键由单个键组成时INT
字段。
当Kafka Connect使用JSON转换器时,它通常提供两种操作模式——带模式或不带模式。如果使用模式,则消息如下所示:
{"schema":{…}, "payload": {"op": "u", "source":{…}, " ts_ms " : "...", " 前”:{“field1”:“oldvalue1”、“field2”:“oldvalue2”},“后”:{“field1”:“newvalue1”、“field2”:“newvalue2”}}}
然而如果没有模式,结构看起来更像这样:
{"op": "u", "source":{…}, " ts_ms " : "...", " 前”:{“field1”:“oldvalue1”、“field2”:“oldvalue2”},“后”:{“field1”:“newvalue1”、“field2”:“newvalue2}}
类驱动反序列化行为from.field
配置选项,并遵循以下规则:
如果消息包含模式,则使用
有效载荷
只有如果键是反序列化的,则将键字段映射到目标类中
如果该值是反序列化的,并且包含Debezium事件信封,那么:开云体育官方注册网址
如果
from.field
未设置时,则将完整的信封反序列化为目标类型否则,将反序列化并仅将配置为目标类型的字段的内容映射为目标类型,从而有效地平铺消息
如果该值是反序列化的,并且包含一个扁平的消息(例如,当使用SMT for时)事件压扁)然后将平铺的记录映射到目标逻辑类型