【发布时间】:2021-08-10 12:37:52
【问题描述】:
我正在启动一个新的 Flink 应用程序,以允许我的公司执行大量报告。我们有一个现有的遗留系统,其中大部分数据都保存在 SQL Server 数据库中。在开始使用新部署的 Kafka 流中的更多数据之前,我们首先需要使用这些数据库中的数据。
我花了很多时间阅读 Flink 书籍和网页,但我有一些简单的问题和假设希望你能帮助我进步。
首先,我想使用 DataStream API,这样我们既可以使用历史数据,也可以使用实时数据。我不认为我想使用 DataSet API,但我也没有看到使用 SQL/Table api 的意义,因为我更愿意在 Java 类中编写我的函数。我需要维护自己的状态,似乎 DataStream 键控函数是要走的路。
现在我正在尝试针对我们的生产数据库实际编写代码,我需要能够使用 SQL 查询读取“流”数据 - 似乎没有 JDBC 源连接器,所以我认为我必须制作JDBC 自己调用,然后可能使用 env.fromElements() 创建一个 DataSource。显然这是一个“有界”数据集,但我还有什么意思要加载历史数据呢?将来我还想包含一个 Kafka 流,它只有几周的数据,所以我想我有时需要将来自 SQL Server/Snowflake 数据库的数据与来自 Kafka 流的实时流合并。最佳实践是什么,因为我没有看到讨论此问题的示例。
通过从 JDBC 源检索数据,我还看到了一些使用 StreamingTableEnvironment 的示例 - 我是否打算以某种方式使用它来将 JDBC 连接中的数据查询到我的 DataStream 函数等?同样,我想用 Java 而不是 Flink SQL 编写我的函数。如果我只使用 DataStream API,最好使用 StreamingTableEnvironment 来查询 JDBC 数据吗?
【问题讨论】:
-
是否有特定的理由不使用 Debezium 或其他更好的特定 CDC 工具?
-
您似乎在问多个问题,请每个问题问一个重点问题。
-
@OneCricketeer - 这取决于你的用例,Debezium 的实现相当繁重,它在内部使用 Kafka 连接。
-
@SwapnilKhante“重”以什么方式? OP 已经有 Kafka,因此他们可以使用 Kafka Connect。 JDBC 比 CDC 更占用资源,这是我的观点
标签: java jdbc apache-kafka apache-flink flink-streaming