Flink 计划中的 Hash、Forward 等术语是什么意思?

Har*_*lar 4 apache-flink flink-streaming

这是我部署作业时出现在仪表板上的 Flink 计划的图像。如您所见,运算符之间的连接被标记为FORWARD/HASH等。它们指的是什么?什么时候叫a HASH,什么时候叫a FORWARD

在此处输入图片说明

Jia*_*iao 6

首先,正如我们所知,一个 Flink 流式作业会根据其作业图(或 DAG)被拆分为多个任务。FORWARD/HASH 是上游任务和下游任务之间的分区器,用于从输入中分区数据。

什么是前进?什么时候发生?

这意味着分区器只会将元素转发到本地运行的下游任务。如果您不直接指定任何分区程序或使用带有分区程序的功能(如 reblance/keyBy),则转发是默认分区程序。

什么是哈希?Hash 何时发生?

这是一个基于键组索引对记录进行分区的分区器。它发生在您调用 keyBy 时。


Arj*_* SK 5

请参考下面的工作图(使用 Flink 进行欺诈检测)。

工作图

所述FORWARD连接装置使得由源操作者的并行实例中的一个所消耗的所有数据被传输到随后的操作者的正好一个实例。它还表示两个连接的算子的并行度相同。

向前

DynamicKeyFunction 和 DynamicAlertFunction 之间的HASH连接意味着为每条消息计算一个哈希码,并且消息在下一个运算符的可用并行实例中均匀分布。这样的连接需要使用 keyBy从 Flink 显式“请求” 。

哈希

REBALANCE分布或者通过显式调用重新平衡()或引起由平行性的变化( - > 1从图2中的工作曲线图的情况下,12)。调用 rebalance() 会导致数据以循环方式重新分区,并有助于缓解某些情况下的数据倾斜。

再平衡

图 2 中的欺诈检测作业图包含一个额外的数据源:规则源。它也从 Kafka 消费。规则“混入”通过广播通道的主要处理数据流。与在操作符之间传输数据的其他方法(例如转发、散列或重新平衡使每条消息仅可在接收操作符的一个并行实例中进行处理)不同,广播使每条消息在所有并行实例的输入处可用广播流所连接的运营商。这使得广播适用于需要影响所有消息处理的广泛任务,无论它们的键或源分区如何。 播送

参考文件