当前位置: 首页 > 知识库问答 >
问题:

flink是否可以使用固定数字键来均匀地键控一个数据stream,以避免数据倾斜?

羊时铭
2023-03-14

我把keyby parallism设置为30,我如何找到30个唯一的键来使datastream键控均匀?flink支持这个吗?因为我不想要太多的键,我会在influxdb中把键作为一个标记,所以我不想要太多的键,避免在influxdb中使用oom。但是我如何使用最小键来均匀地按一个datastream键呢?

我想使用flink来跟踪MySQL中表的每一次更改(如UPDATE/INSERT),并计算每个表每秒的更改次数,但是有些表的更改太多,会导致keyby数据倾斜,所以我想使用固定数字键来平衡keyby流的负载。

共有1个答案

楚举
2023-03-14

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

 类似资料:
  • 我写的应用程序使用火花数据集API在数据库笔记本。 我有两个表。一个是15亿行,第二个250万。两个表都包含电信数据,连接使用国家代码和数字的前5位数字完成。输出有550亿行。问题是我有倾斜的数据(长时间运行的任务)。无论我如何重新分区数据集,我都会因为散列键的不均匀分布而得到长时间运行的任务。 我尝试使用广播连接,尝试在内存中持久化大表分区等。。。。。 我有什么选择?

  • 我使用键控进程函数来使用RocksDB状态后端。我想为同一把钥匙持有两种不同的状态; 状态1类型:ValueState[字符串] 状态2类型:MapState[String, Long] 在这种情况下,我必须在同一个键控进程函数中创建两个状态描述符。这在flink中可能吗?

  • 我可以使用这个问题中的技巧来强制初始分区和最终分区之间的关系,但是Spark不知道每个原始分区的所有内容都将转移到一个特定的新分区。因此,它不能优化掉洗牌,而且它的运行速度比慢得多。

  • 使用Spark Dataset/DataFrame联接时,我面临长时间运行且OOM作业失败的问题。 以下是输入: ~10个不同大小的数据集,大部分是巨大的( 经过一番分析,我发现作业失败和缓慢的原因是歪斜键:当左侧有数百万条记录时,用连接键。 我用了一些蛮力的方法来解决这个问题,这里我想和大家分享一下。 如果您有更好的或任何内置的解决方案(针对常规Apache Spark),请与他人分享。

  • 问题内容: 我有一个Python程序,该程序通过 PySerial 模块从串行端口读取数据。我需要牢记的两个条件是:我不知道会有多少数据到达,并且我也不知道何时需要数据。 基于此,我提出了以下代码段: 因此,此代码将永远循环以从串行端口获取数据。我们最多可以存储500个字符,然后通过设置一个标志来警告主循环。如果没有数据,我们将回到睡眠状态并等待。 该代码正在运行,但是我不喜欢5s超时。我需要它是

  • 我们有一个带有操作的管道,分成两个工作负载-在第一组中,是CPU密集型的工作负载,它们被放入同一个插槽共享组,比方说。和,因为它使用大容量上载并在内存中保存大量数据。它被发送到插槽共享组。 此外,工作负载和工作负载的并行度级别不同,因为第一个工作负载受源并行度的限制。例如,我们的并行度为50,同时并行度等于78。我们有8个TMs,每个有16个内核(因此也有插槽)。 在这种情况下,理想的插槽分配策略