来自数据库的流处理更改

时间:2019-07-01 12:25:35

标签: spark-streaming apache-flink flink-streaming

我们需要定期将数据库中的某些表(可能是Elasticsearch)集成到我们的流应用程序中(Flink)。所有表的此时间段都是固定的,大约在10秒到2分钟之间。目前,我们不需要集成很多表,它们的大小很小,但是我们希望有一种可扩展的方法,这意味着如果我们有更多的表或表随着时间的推移变得更大,则应该进行更改容易适应。

就目前而言,我想到了两种方法。

  1. 有一个中间系统,该系统定期侦听表中的更改,然后将这些更改推送到Kafka主题中。在应用程序端,以数据流的形式收听此主题,然后在有新元素(即新提示)的情况下,将其广播到执行者并更新其状态。 (这里的状态是键/值映射)

    • 优点::只有一个对数据库的调用。如果频率很高且桌子很大,可能会有所不同。
    • 缺点:如果广播的大小很大,广播操作可能会很昂贵,如果我没有记错的话,广播元素也可能在不同的时间到达执行者,这意味着元素在一段时间内可能会有所不同在不同的执行者中。
  2. 直接在应用程序侧,以给定的频率查询表(可能在触发器中)。删除并重新插入状态中的所有元素。

    • 优点::无需花时间开发中间系统。也不需要广播。
    • 缺点::如果我想的没错,每位执行者都会接到一个电话。如果表变大,这可能会很昂贵。另外,我对如何使用Flink检测数据库中的更改也没有明确的认识。我们可以完整地获取每个表(并且只有在检测到更改之后),但是我们需要为每个执行程序更新状态,此操作非常耗时。

这是我正在考虑的两种策略。如果您已经解决了类似的问题,我希望获得您的经验,或者,如果您可以提出建议,并分享您对该问题的看法,我将很高兴。

0 个答案:

没有答案