flink如何跨州划分数据

bvn4nwqk  于 2021-06-24  发布在  Flink
关注(0)|答案(2)|浏览(317)

我读过一本书
flink为每个keyvalue维护一个state示例,并使用相同的键将所有记录分区到
维护此键状态的运算符任务。
我的问题是:
假设我有4个任务,每个任务有2个插槽。有一个密钥属于95%的数据。
这是否意味着95%的数据被路由到同一台机器上?

8yoxcaq7

8yoxcaq71#

是的,确实是这个意思。如果您有一个热键,那么按键分区就不能很好地扩展。
在某些情况下,有一些方法可以绕过这个限制。例如,如果您正在计算分析(例如,您希望计算每页每分钟的页面浏览量,并且一个页面获得95%的页面浏览量),您可以进行预聚合--将热键的工作拆分为多个并行示例,然后对部分结果进行最后的非并行缩减(这只是标准的map/reduce逻辑。)

ki0zmccv

ki0zmccv2#

这就是所谓的“数据倾斜”,它是各地可伸缩应用程序的祸根。
也有可能整个(100%)负载都会转移到同一台机器上。不能保证数据按键尽可能均匀地分布,只能保证每个键在一台机器上进行处理。从技术上讲,每个键都Map到一个键组(键组的数量是拓扑的最大并行度),每个键组都由操作符的特定示例处理。
处理这种情况的一种方法是向键添加第二个字段,从而产生更多可能的键,并可能减少跨键的数据倾斜。然后,仅使用一个原始密钥在后续运算符中聚合结果。

相关问题