这是一个非常广泛的问题,我是Flink的新手,正在研究将其作为当前分析引擎的替代品的可能性。
场景是,从各种设备采集的数据,以JSON编码字符串的形式接收,格式为{“location.attribute”:value,“TimeStamp”:value}
例如,接收位置的单一可追溯性代码,之后在实时流中接收各种过程参数。分析将在过程参数上运行,但是输出需要包括与可追溯性代码的关系。例如{“location.alarm”:value,“location.traceability”:value,“TimeStamp”:value}
Flink使用什么方法来缓存值,在这种情况下是当前的可追溯性代码,同时对稍后收到的其他参数运行分析?
我主要是在寻找要研究的领域,因为到目前为止,我还找不到任何这种情况的例子。也许这不是Flink可以处理的那种过程
发布于 2020-04-11 20:31:53
使用Flink做这类事情的一种自然方法是根据位置对流进行键控,然后在ProcessFunction (或RichFlatMapFunction)中使用键控状态来存储部分结果,直到可以发出输出为止。
通过键控流,您可以保证具有相同密钥的每个事件都将由相同的实例处理。然后,您可以使用keyed state存储每个键的信息,它实际上是一个分片的键/值存储。
Apache Flink training包括一些关于keyed streams和working with keyed state的说明性材料,以及探索如何使用这些机制大致完成所需操作的an exercise or two。
或者,您可以使用Table或SQL API来实现这一点,并将其实现为流与其自身的连接。
https://stackoverflow.com/questions/61154310
复制相似问题