|
以 Spark Stream 通过DirectStream 方式读取Kafka数据为例。 由于 Kafka的 每一个Partition对应Spark的一关 Topic的各Partition之间数据是否平衡,直接决定Spark处理该数据时是否会产生数据倾斜。如 KafKa设计解析(一) - Kafka背景及架构介绍》一文所述,Kafka某一Topic内消息在不同Partition之间的分布,主要有Producer端所使用的Partition实现类决定。如果使用随机Partitioner,则每条消息会随机发送到一个Partition中, 从而概率上来讲,各Partition间的数据会达到平衡。此时源Stage(直接读取Kafka 数据的 Stage)不会产生数据倾斜。
但很多时候,业务场景可能会要求将具备同一特征的数据顺序消费,次是就需要将具有相同特征的数据放于同一个Partition中。一个典型的场景是,需要将同一个用户相关的PV信息置于同一个Partition中。次是如果产生了数据倾斜,则需要通过其它方式处理。
|
|