Flink Streaming 工作负载均衡问题
Issue about workload balance in Flink streaming
我在一个 4 工作节点的 Flink 集群中有一个 WordCount 程序 运行,它从 Kafka 主题读取数据。
本题中,预载了很多课文(词)。题目中的词满足Zipf分布。该主题有 16 个分区。每个分区里面有大约700M的数据。
有一个节点比其他节点慢得多。如图所示,worker2 是较慢的节点。但是较慢的节点并不总是worker2。根据我的测试,集群中的 worker3 或其他节点也可能更慢。
但是,集群中总是存在这么慢的worker节点。集群中每个worker节点有4个task slot,一共16个task slot。
一段时间后,发送到其他工作节点(较慢的节点除外)的记录将不再增加。发送到较慢的节点的记录将增加到其他节点的同一级别,速度更快。
有没有人可以解释为什么会出现这种情况?另外,我在我的设置中做错了什么?
这是集群的吞吐量(在 Keyed Reduce -> Sink 阶段按字数计算)。
从这张图中我们可以看出较慢的节点 - node2 的吞吐量比其他节点高得多。这意味着 node2 从第一阶段收到了更多的记录。我认为这是因为主题中单词的 Zipf 分布。出现频率很高的词被映射到node2.
当节点在 Keyed Reduce -> Sink 阶段花费更多计算资源时,从 Kafka 读取数据的速度会降低。当node1、node3、node4对应分区的数据全部处理完后,集群的吞吐量下降。
由于您的数据服从 Zipf 分布,因此这种行为是意料之中的。由于分布本身的不平衡,一些工作人员只接收到更多数据。您也会在其他系统中观察到这种行为。
我在一个 4 工作节点的 Flink 集群中有一个 WordCount 程序 运行,它从 Kafka 主题读取数据。
本题中,预载了很多课文(词)。题目中的词满足Zipf分布。该主题有 16 个分区。每个分区里面有大约700M的数据。
有一个节点比其他节点慢得多。如图所示,worker2 是较慢的节点。但是较慢的节点并不总是worker2。根据我的测试,集群中的 worker3 或其他节点也可能更慢。
但是,集群中总是存在这么慢的worker节点。集群中每个worker节点有4个task slot,一共16个task slot。
一段时间后,发送到其他工作节点(较慢的节点除外)的记录将不再增加。发送到较慢的节点的记录将增加到其他节点的同一级别,速度更快。
有没有人可以解释为什么会出现这种情况?另外,我在我的设置中做错了什么?
这是集群的吞吐量(在 Keyed Reduce -> Sink 阶段按字数计算)。
从这张图中我们可以看出较慢的节点 - node2 的吞吐量比其他节点高得多。这意味着 node2 从第一阶段收到了更多的记录。我认为这是因为主题中单词的 Zipf 分布。出现频率很高的词被映射到node2.
当节点在 Keyed Reduce -> Sink 阶段花费更多计算资源时,从 Kafka 读取数据的速度会降低。当node1、node3、node4对应分区的数据全部处理完后,集群的吞吐量下降。
由于您的数据服从 Zipf 分布,因此这种行为是意料之中的。由于分布本身的不平衡,一些工作人员只接收到更多数据。您也会在其他系统中观察到这种行为。