Flink State 能否替代外部数据库

Can Flink State replace an external database

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

本例数据量不要太多,而且要可靠性,当然更好在使用前及时更新

传统上,我们可以使用外部数据库来保存这种数据。 但是学了state之后,发现好像很好用,有很好的backends机制,可以查询。

所以我提出问题是为了更多地听取您的论点和证据。

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

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

例如,我编写了一个程序来接收具有唯一 ID 和值字段 (int) 的消息。然后我有一个状态函数,它以接收到的消息的 ID 为键,我收到的每条消息都将被添加到一个状态值对象中,更新该 ID 的总数。如果需要,您可以创建一个有状态列表对象来保存您收到的所有消息。另一种方法是使用专为快速 read/writes 设计的 "new age" 数据库,例如 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),但不知道是否存在复制状态。因此,如果状态全部存储在一个发生故障的节点上,如果它永远消失或在另一个节点上备份。这是需要更多研究的事情,因为这应该是您选择的一个重大决定。

希望至少能为您提供一些信息,让您大致了解要问的问题。