我们有一个用例,我们正在使用Kafka连接到Source和Sink数据。它就像一个典型的ETL。
我们希望了解Kafka connect是否可以识别先前流之间的增量变化。即我们只想将更改的数据发送到客户端而不是整个表或视图。此外,我们不希望执行显式代码来通过源和目标数据库上的查询来识别更改。
对此有什么偏好的方法吗?
答案 0 :(得分:1)
您是否看过CDC(变更数据捕获)方法。有几个connectors在数据库和流事件中读取提交日志或类似内容。使用这些事件,您将获得表中的每个更改。
示例
Oracle Golden Gate - http://www.oracle.com/technetwork/middleware/goldengate/oracle-goldengate-exchange-3805527.html
Postgres - https://github.com/debezium
MySQL - https://github.com/debezium
答案 1 :(得分:1)
正如Gasparms所说,使用CDC工具从数据库中提取所有更改事件。然后,您可以根据ETL的要求使用Kafka Streams或KSQL进行过滤,加入和聚合。
您希望从中获取数据的源系统是什么?对于Oracle(和其他几个来源),从GoldenGate 12.3.1开始,它们实际上将Kafka Connect处理程序捆绑为download本身的一部分。您还有其他选项,例如DBVisit。
对于开源数据库,Debezium肯定符合要求,并且有一个很好的tutorial here。