Если мы передадим функцию, которая возвращает Boolean, в выражение where в Flink CEP она будет работать распределенным образом? - PullRequest
0 голосов
/ 19 апреля 2020

Я использовал модуль Flink CEP и задавался вопросом, передам ли я функцию предложению where, который будет возвращать Boolean, будет ли он работать распределенным образом или нет.

Пример-: val pattern= Pattern.start("begin").where(v=>booleanReturningFunction(v))

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

1 Ответ

0 голосов
/ 21 апреля 2020

Ювал уже дал правильный ответ в комментариях, но я бы хотел остановиться на нем:

Да, любую функцию, которую вы предоставляете, можно запускать распределенным способом. Прежде всего, как указал Ювал, весь ваш код распределяется по вычислительному кластеру при отправке задания.

Недостатком является то, что и ваша работа сама распределяется. Если вы проверите API, вы увидите его в интерфейсах:

public Pattern<T, F> where(IterativeCondition<F> condition) { ...

Шаблон ожидает некоторого условия. Если вы посмотрите на его определение, то увидите следующее

public abstract class IterativeCondition<T> implements Function, Serializable { ... }

Таким образом, то, что вы передаете where, должно быть Serializable. Ваш клиент может сериализовать всю вашу работу, включая все определения функций, и отправить ее в JobManager, который распределяет ее по разным TaskManager. Поскольку у каждого компонента инфраструктуры также есть ваша фляга работы, это может десериализовать работу, включая вашу функцию. Десериализация также означает, что она создает копии функции, которая необходима для распределенного выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...