我的接收器配置文件包含以下配置-
...
"connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
"tasks.max": "1",
"topics": "DELETESRC",
"insert.mode": "upsert",
"batch.size": "50000",
"table.name.format": "DELETESRC",
"pk.mode": "record_key",
"pk.fields": "ID,C_NO",
"delete.enabled": "true",
"auto.create": "true",
"auto.evolve": "true",
"max.retries": "10",
"retry.backoff.ms": "3000",
"mode": "bulk",
"key.converter": "org.apache.kafka.connect.storage.StringConverter",
"value.converter": "io.confluent.connect.avro.AvroConverter",
"value.converter.schemas.enable": "true",
"value.converter.schema.registry.url": "http://localhost:8081",
"transforms": "ValueToKey",
"transforms.ValueToKey.type":"org.apache.kafka.connect.transforms.ValueToKey",
"transforms.ValueToKey.fields": "ID,C_NO"
...
我可以通过键使用upsert,但不能在JDBC接收器中使用删除模式。
我将主题DELETESRC
配置为cleanup.policy=compact
,delete.retention.ms=0
。
我创建了带有4列(ID,CMP,SEG,C_NO
)的KSQL流,并使用KSQL中的insert into语句来推送数据。
INSERT INTO DELETESRC VALUES ('null','11','D','1','3')
INSERT INTO DELETESRC VALUES ('null','11','C','1','4')
INSERT INTO DELETESRC VALUES ('null','12','F','1','3')
但是当我执行INSERT INTO DELETESRC VALUES ('null','11','null','null','3')
时,接收器会将表更新为11,null,null,3
。
我已经研究了堆栈溢出中的其他答案,但是这些解决方案不起作用。
在创建逻辑删除记录时我有任何错误吗?
我在KSQL中的插入语句中尝试了其他方法,但是没有发生删除操作。
答案 0 :(得分:1)
为了生成正确的墓碑消息,您需要提供具有null
值的键控消息。在该示例中,您不会显示空值。
此外,我想您需要增加delete.retention.ms
:
为日志保留删除逻辑删除标记的时间 紧凑的主题。 此设置还限制了 如果消费者从偏移量0开始,则必须完成读取以确保 他们获得了最后阶段的有效快照(否则删除 墓碑可能会在完成扫描之前被收集)。