我是 Apache flink 的新手,并构建一个简单的应用程序,我正在从 kinesis 流中读取事件,比如
TestEvent{
String id,
DateTime created_at,
Long amount
}
对由id
键控的上述流上的字段amount
执行聚合(总和(。转换等效于 SQLselect sum(amount) from testevents group by id
其中testevents
是到目前为止收到的所有事件。 聚合结果以 flink 状态存储,我希望结果通过 API 公开。有什么办法吗?
PS:我们可以将 flink 状态存储在 dynamoDB 中并在那里创建一个 API 吗?或者任何其他方法可以持久化并将状态暴露给外界?
我建议暂时忽略状态,而是将接收器视为流应用程序输出结果的主要方式。
如果您已经在使用 Kinesis进行输入,您也可以使用 Kinesis 从 Flink 输出结果。然后,您可以使用 AWS 提供的适用于 DynamoDB 的 Kinesis 适配器,如相关堆栈溢出帖子中所述。
回到你最初的问题:你可以查询 Flinks 状态,并将 REST API 与你的流应用程序一起发布,但这是实现目标不需要的一大堆工作。您还可以通过状态 API 访问检查点/保存点状态,但同样,这是相当多的手动工作,可以通过执行上面概述的常规路线来节省。
这是 Flink 的文档,它提供了一些用例queryable_state
您还可以使用 API 脱机读取状态处理器 API