Google cloud dataflow 有状态DoFn的状态是否可以随TTL过期?还是无限增长可以?
我在ApacheBeam(在Dataflow中运行)中遇到了这样一种情况,我基于创建了一个简单的有状态DoFn。上游窗口是全局的,改变它会影响下游聚合 目前,我并没有做任何事情来缩小这个州,它似乎只是变得无限大。这是真的吗?无界状态增长是一个问题吗 我只想将TTL附加到状态,但看不到此功能 我正在考虑在数据上存储自己的时间戳,并使用计时器定期清理表。这样做明智吗Google cloud dataflow 有状态DoFn的状态是否可以随TTL过期?还是无限增长可以?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我在ApacheBeam(在Dataflow中运行)中遇到了这样一种情况,我基于创建了一个简单的有状态DoFn。上游窗口是全局的,改变它会影响下游聚合 目前,我并没有做任何事情来缩小这个州,它似乎只是变得无限大。这是真的吗?无界状态增长是一个问题吗 我只想将TTL附加到状态,但看不到此功能 我正在考虑在数据上存储自己的时间戳,并使用计时器定期清理表。这样做明智吗 存储的数据是某些事件数据上的缓存键。缓存键告诉我,我需要查找此事件的过去事件数据以生成当前事件。有状态的DoFn在这方面工作得很好,但
存储的数据是某些事件数据上的缓存键。缓存键告诉我,我需要查找此事件的过去事件数据以生成当前事件。有状态的DoFn在这方面工作得很好,但正如我所说的,我担心它会变得无限。我不确定这在数据流中是否有任何后果。当窗口过期时,状态会自动被垃圾收集。因为您使用的是全局窗口,所以它永远不会过期。所以你需要自己用定时器来管理 我不知道你的代码的细节,但你的想法听起来是对的:
- 将时间戳与您的状态一起存储,这样您就知道它有多旧了
- 设置定期重复的事件时间计时器:
- 清理桌子上比TTL旧的东西
方法可以重置相同的计时器@OnTimer
您也可以直接为元素的TTL设置计时器,但这将导致触发更多计时器。因此,只有在音量低的情况下才是好的。(但如果卷较低,您可能不必太担心无限增长)当窗口过期时,状态会自动被垃圾收集。因为您使用的是全局窗口,所以它永远不会过期。所以你需要自己用定时器来管理 我不知道你的代码的细节,但你的想法听起来是对的:
- 将时间戳与您的状态一起存储,这样您就知道它有多旧了
- 设置定期重复的事件时间计时器:
- 清理桌子上比TTL旧的东西
方法可以重置相同的计时器@OnTimer