Flink State可以替换外部数据库

时间:2018-01-17 10:56:07

标签: apache-flink flink-streaming flink-sql

我有一个接收事件流的Flink项目,并执行一些逻辑来添加此事件的标志,然后它会保存flageventID 一段时间被重用或被其他系统查询。

在这种情况下,数据量不是太多,并且需要良好的可靠性,当然,最好及时更新< / strong>在使用之前。

传统上,我们可以使用外部数据库来保存这种数据。 但是在我学习了状态后,我发现它似乎非常有用,并且具有良好的后端机制,并且可以查询。

所以我要问的是要多听你的论据和证据。

1 个答案:

答案 0 :(得分:2)

我正在将我的最后两条评论移到这里作为答案,因为我意识到我基本上是这样做的。

好的,那可能是Uber的主题演讲。但最重要的是,有些公司正在使用极大的状态来保存您需要有效执行计算的数据。

例如,我创建了一个程序,该程序接收具有唯一ID和值字段(int)的消息。然后,我有一个有状态函数,该函数由收到的消息的ID键入,我收到的每个消息都将被添加到有状态值对象,更新该ID的总数。如果需要,您可以创建一个有状态列表对象来保存您收到的所有消息。另一种方法是使用&#34;新时代&#34;专为快速读/写而设计的数据库,如Cassandra,用于存储。但是由于I / O(长话短说,Flink和Cassandra可以快速处理大量数据,网络带宽不能),这种方法有其自身的局限性。

因此,将所有数据保存在flink状态可以很好地完成并使用,并且有很多好处。

我必须要注意的一点是,我不知道Flink的州是否有像Cassandra或Kafka那样的故障。然而,他们跨节点复制数据,这样如果一个人关闭,那么其他人可以处理所有事情,并在重新启动时重新填充另一个节点。 Flink的状态可以存储在远程后端,如s3存储桶或hdfs (参见:https://ci.apache.org/projects/flink/flink-docs-release-1.4/ops/state/state_backends.html),但我不知道是否有复制状态。因此,如果状态存储在一个停止的节点上,如果它已经消失或者在另一个节点上备份。这是需要更多考虑的事情,因为这应该是您选择的重大决定。

希望至少能给你一些信息并简要介绍一下要问的问题。