我有一个应用程序从流中接收大部分输入,但它的一些数据来自 RDBMS 和一系列静态文件。
流将不断发出事件,因此 flink 作业永远不会结束,但是如何定期刷新 RDBMS 数据和静态文件以捕获对这些源的任何更新?
我目前正在使用JDBCInputFormat
从数据库中读取数据。
下面是我正在尝试做的粗略示意图:
我有一个应用程序从流中接收大部分输入,但它的一些数据来自 RDBMS 和一系列静态文件。
流将不断发出事件,因此 flink 作业永远不会结束,但是如何定期刷新 RDBMS 数据和静态文件以捕获对这些源的任何更新?
我目前正在使用JDBCInputFormat
从数据库中读取数据。
下面是我正在尝试做的粗略示意图:
对于您的每个源、文件和 RDBMS,您可以定期在 HDFS 或存储中创建快照(例如每 6 小时)并计算快照之间的差异。结果将推送到 Kafka。当您无法修改数据库和文件结构以及额外信息(例如在 RDBMS 中 - 名为 last_update 的列)时,此解决方案有效。
另一种解决方案是添加一个名为 last_update 的列,用于过滤在查询之间发生变化的数据并将数据推送到 Kafka。
对于可能更改的两个源(RDBMS 和文件)中的每一个,创建一个 Flink 源,该源使用广播流向处理来自 Kafka 的数据的 Flink 操作员发送更新。广播流将每个对象发送到接收操作员的每个任务/实例。