我有一个flink项目,它接收一个事件流,并执行一些逻辑来添加这个事件的标志,然后它保存 flag
以及 eventID
有一段时间可以重复使用或被其他系统查询。
在这种情况下,数据量并不是太多,而且需要很好的可靠性,当然最好在使用前及时更新。
传统上,我们可以使用外部数据库来保存此类数据。但在我了解了状态之后,我看到它似乎非常有用,并且有一个很好的后端机制,并且可以查询。
所以我问这个问题是为了多听听你们的论点和证据。
我有一个flink项目,它接收一个事件流,并执行一些逻辑来添加这个事件的标志,然后它保存 flag
以及 eventID
有一段时间可以重复使用或被其他系统查询。
在这种情况下,数据量并不是太多,而且需要很好的可靠性,当然最好在使用前及时更新。
传统上,我们可以使用外部数据库来保存此类数据。但在我了解了状态之后,我看到它似乎非常有用,并且有一个很好的后端机制,并且可以查询。
所以我问这个问题是为了多听听你们的论点和证据。
1条答案
按热度按时间kknvjkwl1#
我把我的最后两条评论移到这里作为答案,因为我意识到我实际上是在这么做。
好吧,那可能是优步的主题演讲。但归根结底,有些公司正在使用非常大的状态来保存您需要有效执行计算的数据。
例如,我制作了一个程序,它接收具有唯一id和值字段(int)的消息。然后,我有一个有状态函数,它由接收到的消息的id设置键,我为该id接收的每条消息都将添加到一个有状态值对象中,更新该id的总数。如果需要,可以创建一个有状态列表对象来保存收到的所有消息。另一种方法是使用一个“新时代”数据库来存储数据,这个数据库是为快速读写而设计的,比如cassandra。但由于i/o(长话短说,flink和cassandra可以快速处理大量数据,而网络带宽不能),这种方法有其自身的局限性。
因此,将所有这些数据保存在flink中是可以很好地完成和使用的,并且有很多好处。
有一件事我必须要提醒的是,我不知道Flink的国家是否有类似Cassandra或Kafka的故障保险。然而,它们跨节点复制数据,这样,如果一个节点发生故障,那么其他节点可以处理所有事情,并在另一个节点重新启动时重新填充该节点。flink的状态可以存储在远程后端,如s3 bucket或hdfs(请参阅:https://ci.apache.org/projects/flink/flink-docs-release-1.4/ops/state/state_backends.html),但我不知道是否有复制的状态。因此,如果状态全部存储在一个节点上,而该节点发生故障,或者该状态永久消失,或者在另一个节点上备份。这是一个需要更多研究的问题,因为这应该是你选择的一个重大决定。
希望至少能给你提供一些信息和一些简单的问题。