`delete.enabled = true`不通过JDBC接收器连接器删除MySQL中的记录

时间:2020-04-15 09:53:32

标签: apache-kafka apache-kafka-connect

我的接收器配置文件包含以下配置-

...
"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=compactdelete.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中的插入语句中尝试了其他方法,但是没有发生删除操作。

1 个答案:

答案 0 :(得分:1)

为了生成正确的墓碑消息,您需要提供具有null值的键控消息。在该示例中,您不会显示空值。


此外,我想您需要增加delete.retention.ms

为日志保留删除逻辑删除标记的时间 紧凑的主题。 此设置还限制了 如果消费者从偏移量0开始,则必须完成读取以确保 他们获得了最后阶段的有效快照(否则删除 墓碑可能会在完成扫描之前被收集)