flink 是不是可以均匀地使用固定数字 key to keyBy 一个数据流来避免数据倾斜?

Posted

技术标签:

【中文标题】flink 是不是可以均匀地使用固定数字 key to keyBy 一个数据流来避免数据倾斜?【英文标题】:Can flink use fixed number key to keyBy a datastream evenly to avoid data skew?flink 是否可以均匀地使用固定数字 key to keyBy 一个数据流来避免数据倾斜? 【发布时间】:2019-12-13 14:22:10 【问题描述】:

我设置keyby parallism 30,如何找到30个唯一的key让数据流keyByed均匀?flink支持吗?因为我不想要太多的密钥,我会将密钥作为 influxdb 中的标签,所以我不想太多密钥,避免 influxdb 中的 oom。但是我怎样才能均匀地使用最小密钥来 keyby 数据流?

我想使用 flink 来跟踪 mysql 中表上的每个更改(例如更新/插入)。我将计算每个表每秒的更改次数。但是有些表的更改太多导致 keyby 数据倾斜,所以我想使用固定数字键来负载平衡keyby流。

【问题讨论】:

【参考方案1】:

从技术上讲它可以,但从你的问题我了解到你并不真的需要使用keyBy(),你只是想这样做来重新平衡流。在这种情况下,您可以轻松地在DataStream 上使用rebalance(),这将导致使用循环算法对流进行分区,这确实会导致负载均匀分布。

【讨论】:

因为我想统计每秒表的变化并将总和汇入influxdb,所以我在flink中keyBy()的键是(db_name+table_name+update/insert),但是有些表太多了更改,因此当我执行 keyBy() 时会导致数据倾斜。我尝试在 keyBy() 之前重新平衡,但它不起作用。楼主,能给点建议吗? 或者先生你能教我如何 keyBy() 一个具有 30 个唯一字符串的数据流,当并行度为 30 时?如果我有唯一键,我可以使用 key(db_name+table_name+ update/insert+unique_key),我认为数据倾斜问题将被克服

以上是关于flink 是不是可以均匀地使用固定数字 key to keyBy 一个数据流来避免数据倾斜?的主要内容,如果未能解决你的问题,请参考以下文章

Flink 滚动窗口滑动窗口详解

数据结构与算法之散列

AppKit 中的固定间距数字

FlinkFlink kafka producer 分区策略 (flink写入数据不均匀 与 数据写入 分区无数据 )

GridLayout(不是GridView)如何均匀地拉伸所有孩子

三次b样条曲线的基函数是固定的吗