我试图在我的java代码中使用DB数据作为我的Kafka生成器。源数据不断增长(比如说每秒20行)。每次将新记录插入数据库表时,都会从数据库中读取整个数据并将其添加到Kafka主题中。我只希望将新添加的行发送到主题(即,如果表已经存在10行,并且还有4行附加到其中,则只需要将4行发送到主题)。
有没有办法在java中实现这一点,只要我们也可以使用Kafka API ??
答案 0 :(得分:2)
更简单的方法是使用change-data-capture将数据库中的更改提供给Kafka主题。试图自己建造这个就是重新发明一个已经完善的车轮; - )
您的源数据库是什么?对于专有的RDBMS(Oracle,DB2,MS SQL等),您可以使用GoldenGate,Attunity,DBVisit等商业工具。对于开源RDBMS(例如MySQL,PostgreSQL),您应该查看开源Debezium工具。 所有这些CDC工具都直接与Kafka集成。
根据您的使用案例,比例等,您拥有的另一个选项就是使用JDBC Kafka Connect connector从数据库中提取已更改的行。这不像CDC那样灵活或可扩展,但仍然比尝试自己轮询数据库更有用,也更容易。