Объединение более 2-х потоков во Flink и применение CEP к более чем 2-м потокам без объединения

Вопрос № 1: Я работаю над ситуационным сценарием, в котором нам нужно объединить данные от нескольких датчиков (например, 8 датчиков) и объединить их в виде дерева. Например, объединение [s1,s2,s3 s4] для формирования потока A, а затем [s5,s6,s7 и s8] для формирования потока B, а затем выполнение CEP для потоков A и B. Как я могу этого добиться?

Вопрос № 2: Можно ли выполнить CEP на нескольких потоках, значит, более чем на один поток? В API Flink 1.3.2 четко указано, что шаблон будет применен к одному потоку.

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

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

Если шаблон не может быть применен к более чем одному потоку, то как Flink CEP будет работать с классическим примером CEP, который включает поток дыма и поток температуры для создания оповещения при пожаре.

  • единственное решение - объединение как дыма, так и временного потока на основе некоторого ключа, такого как временная метка?

  • Тогда как можно использовать Flink для широкого применения IOT, в котором задействованы несколько датчиков?

1 ответ

Решение

Это зависит от того, как вы читаете данные с датчиков. Если данные поступают по разным темам Кафки, вы можете создать 2 задания.

Задание 1 - читает из тем датчиков s1,s2,s3,s4 и создает поток A, а затем другой kafkaconsumer читает из s5,s6,s7,s8 и создает поток B. Затем вы помещаете данные из этих 2 потоков в 2 промежуточные темы -> stream A, stream B

Задание 2 - Теперь задание 2 считывает из тем кафки stream A и stream B вместе и создает один поток данных.

Имейте в виду, что когда вы делаете это, вы должны полагаться на время события данных вашего датчика, а не на время приема или время обработки, для получения точных результатов.

После объединения двух потоков запустить CEP не сложно, как вы можете видеть из предыдущего вопроса - Обработка нескольких потоков в Flink CEP

Другие вопросы по тегам