Apache flink 按数据流数据分类或分组,并分别使用CEP进行处理

Apache flink 按数据流数据分类或分组,并分别使用CEP进行处理,apache-flink,complex-event-processing,data-stream,Apache Flink,Complex Event Processing,Data Stream,假设我有一个数据流 x:1, y:2 , z:3 , x:7 , y:-1, z:0, z:3 , z:2, y:3 ,x: 2 ,y:6 如何将x,y,z放入他们自己的存储桶中,并对其应用我的CEP规则 x:1, x:7,x: 2 y:2, y:-1, y:3 , y:6 z:3, z:0 , z:3, z:2 或者换个说法。如何将流拆分为这些类别(每个x、y、z对应一个流)。我将得到3个子流,它们有自己的CEP处理 这里的挑战是,x、y、z不是预定义的。因此,我无法使用if或switc

假设我有一个数据流

x:1, y:2 , z:3 , x:7 , y:-1, z:0, z:3 , z:2, y:3 ,x: 2 ,y:6
如何将
x,y,z
放入他们自己的存储桶中,并对其应用我的CEP规则

x:1, x:7,x: 2 
y:2, y:-1, y:3 , y:6
z:3, z:0 , z:3, z:2
或者换个说法。如何将流拆分为这些类别(每个x、y、z对应一个流)。我将得到3个子流,它们有自己的CEP处理

这里的挑战是,x、y、z不是预定义的。因此,我无法使用if或switch语句预创建流和赋值

编辑: 该模式类似于“如果x值在过去10分钟内在0-8之间

这是通过在category属性上“键入”流来完成的

如果您有一个
DataStream[(String,Int)]
,则如下所示:

val yourStream: DataStream[(String, Int)] = ???
val yourPattern: Pattern = ???

// key by String attribute
val keyedStream = yourStream.keyBy(_._1) 
// apply pattern on keyed stream 
val patternStream: PatternStream = CEP.pattern(keyedStream, yourPattern)

模式将针对键控属性的每个不同值进行评估。

编辑了我的问题。我将如何使其满足我的要求。我必须观察x值10分钟,然后做出决定。