是否可以使用Kafka Connect在Kafka中“追加”消息?

时间:2018-08-01 19:44:16

标签: jdbc apache-kafka upsert apache-kafka-connect confluent

我正在使用Confluent 3.3.0。我正在使用jdbc-source-connector将消息从Oracle表插入到Kafka中。很好。
我想检查“ upsert”是否可行。

我的意思是,如果我有一个学生表,则有3列id(数字),name(varchar2)和last_modified(时间戳)。每当我插入新行时,它将被推送到Kafka(使用时间戳+自动增量字段)。但是,当我更新该行时,Kafka中的相应消息应被更新。

我表中的id应该成为它们对应的Kafka消息的key。我的主键(id)将保持不变作为参考。
每次更新行时,“时间戳记”字段都会更新。

这可能吗?或删除Kafka中的现有记录,然后插入新记录。

1 个答案:

答案 0 :(得分:0)

  

但是当我更新该行时,Kafka中的相应消息应该更新

这是不可能的,因为从设计上来说,Kafka是仅追加且不可变的。

最好的方法是通过某个last_modified列查询所有行,或者挂接一个CDC解决方案,例如Oracle GoldenGate或alpha Debezium solution,它将捕获数据库上的单个UPDATE事件,并且在Kafka主题上添加新的唱片。

如果您想对Kafka中的数据库记录进行重复数据删除(在一个时间范围内以最大last_modified查找消息),则可以使用Kafka Streams或KSQL来执行这种类型的后处理过滤

如果您正在使用压缩的Kafka主题,并将数据库密钥作为Kafka消息密钥插入,则在压缩之后,最新的附加消息将继续存在,并且具有相同密钥的上一条消息将被删除,而不是更新< / p>