Hi Alieh,
Flink uses hash partitioning to assign grouping keys to parallel tasks by default.
You can implement a custom partitioner or use range partitioning (which has some overhead) to control the skew.
There is no automatic load balancing happening.
Best, Fabian