Apache Flink relating/caching 数据选项

Apache Flink relating/caching data options

这是一个非常宽泛的问题,我是 Flink 的新手,正在研究使用它来替代当前分析引擎的可能性。

场景是,从各种设备采集数据,接收到的数据是JSON编码的字符串,格式为{“location.attribute”:value, “TimeStamp”:value}

例如,接收到一个位置的单一可追溯性代码,之后在实时流中接收到各种过程参数。分析将对过程参数进行 运行,但输出需要包括与可追溯性代码的关系。例如 {“location.alarm”:value, “location.traceability”:value, “TimeStamp”:value}

Flink 使用什么方法来缓存值,在本例中是当前的可追溯性代码,同时 运行 分析稍后收到的其他参数?

我主要是在寻找研究领域,到目前为止我还没有找到任何这种情况的例子。可能不是Flink能处理的那种流程

用 Flink 做这种事情的自然方法是按位置对流进行键控,然后在 ProcessFunction(或 RichFlatMapFunction)中使用键控状态来存储部分结果,直到准备好发出输出。

使用键控流,可以保证每个具有相同键的事件都将由同一实例处理。然后,您可以使用 keyed state,它实际上是一个分片 key/value 存储,来存储每个键的信息。

Apache Flink training includes some explanatory material on keyed streams and working with keyed state, as well as an exercise or two探索如何使用这些机制大致完成您需要的工作。

或者,您可以使用 Table 或 SQL API 执行此操作,并将其实现为流与自身的连接。