我有一个 WordCount 程序在4-worknodes Flink集群中运行,该集群从Kafka主题中读取数据。
在本主题中,有许多预加载的文本(单词)。主题中的单词满足 Zipf分布。该主题有16个分区。每个分区内部都有大约700 M的数据。
有一个节点比其他节点慢得多。正如您在图片中看到的那样,worker2是较慢的节点。但较慢的节点并不总是worker2。从我的测试中,集群中的worker3或其他节点也可能更慢。
但是,群集中始终存在这样一个缓慢的工作节点。在集群中,每个工作节点有4个任务槽,总共有16个任务槽。
一段时间后,发送的记录到其他工作节点(较慢的节点除外)将不再增加。发送到较慢节点的记录将增加到与其他节点相同的水平,速度会快得多。
有没有人可以解释为什么会出现这种情况?另外,我在设置中做错了什么?
以下是群集的吞吐量(按 Keyed Reduce - > Sink 阶段的字数计算)。
从这张图中我们可以看到较慢节点 - node2的吞吐量远远高于其他节点的吞吐量。这意味着node2从第一阶段收到了更多记录。我认为这是因为主题中单词的 Zipf分布。具有很高频率的字被映射到node2。
当节点在键控缩减 - >上花费更多计算资源时沉没阶段,从卡夫卡读取数据的速度降低。当处理与node1,node3和node4对应的分区中的所有数据时,群集的吞吐量会下降。
答案 0 :(得分:1)
由于您的数据遵循Zipf分布,因此预期会出现此行为。由于分配本身的不平衡,一些工人只收到更多数据。您也会在其他系统中观察到这种行为。