如果我们将一个返回布尔值的函数传递给Flink CEP的where子句,它将以分布式方式工作吗?

时间:2020-04-19 07:50:05

标签: apache-flink flink-streaming flink-cep

我正在使用Flink CEP模块,想知道是否将一个函数传递给where子句,该子句将返回Boolean,无论它是否可以以分布式方式工作。

示例-: val pattern= Pattern.start("begin").where(v=>booleanReturningFunction(v))

以简单条件提交给CEP的flink作业时,以上代码将以分布式方式工作。

1 个答案:

答案 0 :(得分:0)

Yuval已经在评论中给出了正确答案,但我想在此进行扩展:

是的,您提供的任何功能都可以以分布式方式运行。首先,正如Yuval指出的那样,在提交作业后,所有代码都将分布在计算集群上。

所缺少的是您的工作本身也得到了分配。如果您检查API,则会在界面中看到它:

@Repository
public class Table1Repository {

    @Autowired
    private MongoTemplate mongoTemplate;

}

模式需要某些条件。如果查看其定义,可以看到以下内容

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

因此,您传递给public abstract class IterativeCondition<T> implements Function, Serializable { ... } 的东西必须是where。您的客户端可以序列化包括所有函数定义在内的整个作业,并将其发送到JobManager,后者将其分发到不同的TaskManager。因为基础结构的每个部分都有您的工作罐,所以它可以反序列化包括您的功能在内的工作。反序列化还意味着它会创建函数的副本,这对于分布式执行是必需的。