我正在使用Confluent 3.3.0。我正在使用jdbc-source-connector
将消息从Oracle表插入到Kafka中。很好。
我想检查“ upsert”是否可行。
我的意思是,如果我有一个学生表,则有3列id
(数字),name
(varchar2)和last_modified
(时间戳)。每当我插入新行时,它将被推送到Kafka(使用时间戳+自动增量字段)。但是,当我更新该行时,Kafka中的相应消息应被更新。
我表中的id
应该成为它们对应的Kafka消息的key
。我的主键(id)将保持不变作为参考。
每次更新行时,“时间戳记”字段都会更新。
这可能吗?或删除Kafka中的现有记录,然后插入新记录。
答案 0 :(得分:0)
但是当我更新该行时,Kafka中的相应消息应该更新
这是不可能的,因为从设计上来说,Kafka是仅追加且不可变的。
最好的方法是通过某个last_modified
列查询所有行,或者挂接一个CDC解决方案,例如Oracle GoldenGate或alpha Debezium solution,它将捕获数据库上的单个UPDATE事件,并且在Kafka主题上添加新的唱片。
如果您想对Kafka中的数据库记录进行重复数据删除(在一个时间范围内以最大last_modified
查找消息),则可以使用Kafka Streams或KSQL来执行这种类型的后处理过滤
如果您正在使用压缩的Kafka主题,并将数据库密钥作为Kafka消息密钥插入,则在压缩之后,最新的附加消息将继续存在,并且具有相同密钥的上一条消息将被删除,而不是更新< / p>