Объединение более 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