在 Flink 中加入 2 个以上的流并将 CEP 应用于 2 个以上的流而不加入它们

Joining more than 2 streams in Flink & applying CEP to more than 2 streams without joining them

问题 #1:我正在研究一个案例场景,我们需要融合来自多个传感器的数据 [例如 8 个传感器] 并将它们以树形形式连接起来。例如,加入[s1,s2,s3 s4]形成流A,然后加入[s5,s6,s7和s8]形成流B,然后对流A和B进行CEP。我该如何实现?

问题 #2:是否可以对多个流执行 CEP,意味着不止一个流?。 flink 1.3.2 API 中明确提到模式将应用于一个流

DataStream<Event> input = ...
Pattern<Event, ?> pattern = ...

PatternStream<Event> patternStream = CEP.pattern(input, pattern);

如果模式不能应用于多个流,那么 Flink CEP 将如何与 CEP 的经典示例一起工作,其中涉及 smoke streamtemperature streamfire 时创建警报。

这取决于您如何从传感器读取数据,如果数据到达不同的 kafka 主题,您可以创建 2 个 flink 作业。

作业 1 - 从传感器主题 s1、s2、s3、s4 读取并创建流 A,然后另一个 kafkaconsumer 从 s5、s6、s7、s8 读取并创建流 B。然后从这 2 个中推送数据关于 2 个中间主题的流 -> streamA, streamB

作业 2 - 现在作业 2 从 kafka 主题 streamA 和 streamB 一起读取并创建单个数据流。

Keep in mind that when you do this, you should rely on event time of your sensor data and not on ingestion time or processing time, for getting accurate results.

加入 2 个流后,运行 CEP 并不难,正如您从上一个问题中看到的那样 -