使用 Checkpoint 进行 Spark 流式传输

Spark streaming with Checkpoint

我是火花流的初学者。所以对checkpoints有一个基本的疑问。我的用例是按天计算唯一用户数。为此,我正在使用按键减少和 window 。我的 window 持续时间为 24 小时,幻灯片持续时间为 5 分钟。我正在将处理后的记录更新为 mongodb。目前我每次都替换现有记录。但我看到内存随着时间的推移慢慢增加,并在 1 和 1/2 小时后终止进程(在 aws 小实例中)。重启后的DB write会清除所有旧数据。所以我知道检查点是解决这个问题的方法。但我的疑问是

  • 我的检查点持续时间应该是多少...?根据文档,它表示幻灯片持续时间的 5-10 倍。但我需要一整天的数据。所以保持24小时是可以的。
  • 理想的检查点应该在哪里..?最初,当我收到流时或 window 操作之前或数据缩减发生之后。

  • 感谢您的帮助。
    谢谢

    在流媒体场景中,持有 24 小时的数据通常太多了。为了解决这个问题,您使用概率方法而不是精确测量来进行流式传输,并执行稍后的批处理计算以获得确切的数字(如果需要)。

    在您的情况下,要获得不同的计数,您可以使用一种名为 HyperLogLog. You can see an example of using Twitter's implementation of HyperLogLog (part of a library called AlgeBird) from spark streaming here

    的算法