处理来自Jdbc Sink连接器中Ksqldb流的逻辑删除记录

时间:2020-07-13 09:21:35

标签: apache-kafka apache-kafka-connect confluent-platform

由于ksqldb中的Kstream支持原始数据类型(StringBigInt),有没有办法处理来自Kstream的逻辑删除记录?

ValueToKey SMT中,可以转换为PK的值必须是MySQL表/白名单列的一部分,并且不能被列入黑名单。有没有一种方法可以从一个字段中获取值并将其映射到不同的键名?

直到在Confluent中不释放KEY支持之前,对于墓碑记录都是有帮助的。

示例- 在KSQL流中,

KEY - {PK1=ABC, PK2=1} (STRING format)
VALUE - {PK1=null, PK2=null, COL3=null, COL4=null} (AVRO format)

由于KEY格式为STRING,因此接收器连接器密钥格式必须为STRING,而不是JSON / AVRO。在这种情况下,有什么方法可以处理墓碑记录?

我为PK字段创建了两个后缀为_KEY的列,以便可以将这些_KEY列的值映射到实际PK列,并将_KEY后缀列列入黑名单。

KEY - {PK1=ABC, PK2=1} (STRING format)
VALUE - {PK1_KEY=ABC, PK2_KEY=1, PK1=null, PK2=null, COL3=null, COL4=null} (AVRO format)

在接收器连接器中,我使用了ValueToKey SMT,以便接收器连接器将根据_KEY后缀列中的值从MySQL删除记录,并采用原始列名,例如-

delete from TEST where PK1='ABC' and PK2=1;
"delete.enabled": "true",
"pk.mode": "record_key",
"pk.fields": "PK1,PK2",
"transforms": "ValueToKey,ReplaceField",
"transforms.ValueToKey.type":"org.apache.kafka.connect.transforms.ValueToKey",
"transforms.ValueToKey.fields": "PK1_KEY,PK2_KEY",
"transforms.ReplaceField.type": "org.apache.kafka.connect.transforms.ReplaceField$Value",
"transforms.ReplaceField.whitelist": "PK1,PK2,COL3,COL4"

有没有办法做到这一点?当我尝试使用上述接收器配置时,接收器连接器出现错误。

0 个答案:

没有答案