

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 数据偏斜
<a name="troubleshooting-data-skew"></a>

Flink 应用程序以分布式方式在集群上执行。为了扩展到多个节点，Flink 使用了密钥流的概念，这本质上意味着流的事件根据特定的密钥（例如客户 ID）进行分区，然后 Flink 可以在不同节点上处理不同的分区。然后，会根据这些分区对许多 Flink 运算符进行评估，例如 [Keyed Windows](https://nightlies.apache.org/flink/flink-docs-stable/docs/dev/datastream/operators/windows/)、[Process Functions](https://nightlies.apache.org/flink/flink-docs-stable/docs/dev/datastream/operators/process_function/) 和 [Async I/O](https://nightlies.apache.org/flink/flink-docs-stable/docs/dev/datastream/operators/asyncio/)。

选择分区键通常取决于业务逻辑。同时，D [ynamoDB ](https://aws.amazon.com/dynamodb/)和 Spark 等许多最佳实践同样适用于 Flink，包括：
+ 确保分区键的高基数
+ 避免分区之间的事件量出现偏差

 您可以通过比较 Flink 控制面板中子任务（即同一运算符 received/sent 的实例）的记录来识别分区中的偏差。此外，还可将 Managed Service for Apache Flink 监控配置为公开子任务级别`numRecordsIn/Out`和`numRecordsInPerSecond/OutPerSecond`子任务级别的指标。