【问题标题】:How to refresh meta data dataframe in streaming app in every 5 min?如何每 5 分钟刷新一次流式应用程序中的元数据数据帧?
【发布时间】:2020-04-26 10:12:12
【问题描述】:

我正在使用 spark-sql 2.4.x 版本,datastax-spark-cassandra-connector 用于 Cassandra-3.x 版本。和卡夫卡一起。

我有一个来自 kafka 主题的财务数据的场景,比如 financeDf 我需要重新映射 metaDataDf = //从 cassandra 表中加载的一些字段以查看。 但是这个 cassandra 表(metaDataDf)可以每小时更新一次。

在 spark-sql 结构化流应用程序中,我应该如何每隔一小时从 cassandra 表中获取最新数据?

我不想为我从主题(即 financeDf)收到的每条记录加载此数据 metaDataDf。

这应该如何完成/处理?请任何帮助..

【问题讨论】:

  • 你考虑过流式数据集 (kafka) 和批处理数据集 (cassandra) 的 Dataset.join 吗?

标签: apache-spark cassandra apache-spark-sql spark-structured-streaming


【解决方案1】:

你有更多的选择来做这样的事情,基本上当你在谷歌上搜索时,试着专注于spark enrichment with static data .关于堆栈溢出已经有一些答案了。

您的主要问题是数据刷新。这取决于您的需求以及是否可以牺牲一些精度,分别是否需要在更改 Cassandra 后直接重新映射。一些可能的解决方案:

  1. 在 Kafka 中引入一些特殊事件,该事件将由外部系统创建并通知您您的 Cassandra 已更改(完全准确并立即更新)
  2. 引入常量输入 dstream,或者在结构化流中可能存在类似的机制。基本上,它会创建单独的输出操作,在每个流式传输间隔读取 Cassandra 并在缓存不同时更新缓存(当然它不会在更改后立即更新,而是在最近的流式传输间隔更新)。
  3. 我也看到了带有窗口​​功能的解决方案,但它只是在一段时间后才更新。

当然,还有其他的可能,一切看你的喜好。

【讨论】:

  • 选项 1 取决于外部系统,或者我们可以将其称为 Cassandra 的编写器。我不确定它是否在您手中,但基本上您可以在 Kafka 中引入新主题,例如 XYZStaticDataUpdate。正在更新此 Cassandra 的外部系统可以在任何更改 Cassandra 时将事件发布到 Kafka,您将立即读取它并更新缓存。当然,我不确定 Cassandra 的作者是否在您手中,您可以将触发事件添加到 Kafka。
猜你喜欢
  • 1970-01-01
  • 2018-05-31
  • 2022-12-18
  • 2011-09-28
  • 1970-01-01
  • 2013-11-17
  • 2013-03-17
  • 1970-01-01
  • 2017-05-16
相关资源
最近更新 更多