如何在使用 Spark 的有状态操作 updateStateByKey 时保持实时性



首先是虚构的用例。假设我有一串元组(user_id, time_stamp, login_ip)。我想在5秒粒度维护每个用户的最后登录IP。

使用Spark流,我可以使用updateStateByKey方法来更新这个地图。问题是,随着数据流的不断涌入,每个时间间隔的RDD越来越大,因为user_ids越来越多。经过一段时间后,地图会变得太大,维护它需要更长的时间,从而无法实现结果的实时交付。

请注意,这只是我提出的一个简单的例子来说明这个问题。真正的问题可能更复杂,真正需要实时交付。

关于如何解决这个问题,有什么想法(在Spark以及其他解决方案中都会很好)吗?

您没有完全更新Map。你给出的函数只是更新与一个键相关的状态,其余的由Spark完成。特别是,它为您维护了一个类似映射的键态对RDD——实际上是一系列键态对,一个DStream。因此,状态的存储和更新是分布式的,就像其他所有东西一样。如果更新不够快,您可以通过添加更多的worker来进行扩展。

相关内容

  • 没有找到相关文章

最新更新