如何使用Spark结构化流构建Lambda体系结构?

时间:2019-11-25 17:09:35

标签: apache-spark spark-structured-streaming

我们正在构建具有Spark结构化流的lambda架构。我们计划将批处理作业的运行时间推迟约8个小时,而每30秒左右运行一次流式传输。

困扰我们的一个方面是,我们需要定期对某些实体的流处理部分进行重新处理

  1. 想象一下,批次已处理事件到t1
  2. 流媒体在t2(t2> t1)
  3. 我们正在从流媒体管道的eventhub中读取内容

对于大多数实体

  1. 我们要运行t2的下一个微型批处理
  2. 我们想从t1重新处理某些较小的子集

我的想法是在上次处理事件时获取与微批处理相关联的batchId /时间戳。我想说的是event-batch> batchId或event-receivedtimestamp> Lastfullyprocessedtimestamp以跳过除我要重新处理的事件以外的大多数事件。

但是我还没有找到找到最后一个进程或batchId时间戳的方法。

其他人是否遇到过类似情况?他们如何去做呢?

1 个答案:

答案 0 :(得分:0)

  

但是我还没有找到找到最后一个进程或batchId时间戳的方法。

这应该是StreamingQueryProgress的一部分,而timestamp看起来像您想要的。

  

ISO8601格式的触发器的开始时间,即UTC时间戳。

最后StreamingQueryProgresses和最近的{{1}}可通过StreamingQuery.lastProgressStreamingQuery.recentProgress使用。