分区前的 Flink 过滤器

Flink filter before partition

Apache Flink 使用类似于 Apache Spark 的 DAG 风格惰性处理模型(如果我错了请纠正我)。也就是说,如果我使用以下代码

DataStream<Element> data = ...;
DataStream<Element> res = data.filter(...).keyBy(...).timeWindow(...).apply(...);

.keyBy()DataStream 转换为 KeyedStream 并分发给 Flink worker 节点。

我的问题是,flink 将如何处理这里的 filter?过滤器是否会在 partitioning/distributing 流之前应用于传入的 DataStream,并且 DataStream 将仅由通过过滤条件的 Element 创建?

根据我的理解,filterkeyBy 之前应用。正如您所说,它是一个 DAG(D == 定向)。您是否看到任何指标告诉您情况并非如此?

Will filter be applied to incoming DataStream before partitioning/distributing the stream and DataStream will only be created of Element's that pass the filter criteria?

是的,没错。我可能会说的唯一不同的是澄清原始流 data 通常已经从源分发(并行)。过滤将在多个任务中并行应用,之后 keyBy 将 reparition/redistribute 工人之间的流。

您可以使用 Flink 的网络 UI 检查作业生成的执行图的可视化。