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

Flink中的缓存位置

那铭
2023-03-14

我有一个数据流,其中包含一个键,我需要将其与与该键关联的数据进行混合和匹配。每个键都属于一个分区,每个分区都可以从数据库加载。

数据非常大,在一个任务管理器中,几十万个分区中只有几百个可以容纳。

我目前的方法是基于键使用partitionCustom。分区并将分区数据缓存在richmap函数中,以混合和匹配分区数据,而无需多次重新加载分区数据。

当同一分区上的消息速率过高时,我遇到了热点/性能瓶颈。

在这种情况下,我在Flink中有哪些工具可以提高吞吐量?

有没有办法根据机器上的设置时间和最大流转时长来定制调度和优化作业安排?

共有1个答案

陈夜洛
2023-03-14

这听起来像(a)基于DB的数据也被分区了,(b)您的密钥有偏差,其中一个分区得到的密钥比其他分区多得多。

假设以上是正确的,并且您已经对您的“混合匹配”代码进行了代码分析,以使其具有合理的效率,那么您就剩下手动优化了。例如,如果您知道分区X中的键更常见,您可以将所有这些键放在一个分区中,然后将剩余的键分布在其他分区中。

另一种方法是添加一个“batcher”操作符,它将同一分区的多达N个键放入一个组中(通常这也需要一个超时来刷新,这样数据就不会被卡住)。如果可以批处理足够多的密钥,那么根据需要为与每批密钥相关联的分区加载DB数据可能不会太糟糕。

 类似资料:
  • 我正在尝试使用android Studio3.1.1开发一个简单的android应用程序。在构建时,我从Gradle得到一个同步失败的错误。底部生成面板显示此错误消息。 无法为“http://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.2.0/kotlin-stdlib-jre8-1.2.0.pom”添加头。从服务器接

  • 我想创建一个网站,即使当它的服务器离线时也可以工作——我发现这就是服务工人的目的。 当我重新加载带有service worker且没有连接的页面时,它工作正常。但是,轮班重新加载(例如,绕过缓存)会解除服务工作人员的防护,并出现“无法连接到服务器”错误。 我的问题是-我是否可以以某种方式防止轮班重新加载(shift f5、ctrl f5等)破坏服务人员,或者至少在不恢复连接的情况下使其恢复?

  • 问题内容: 对于我的10,000点,我决定在这个很酷的网站上做出一些贡献:一种将位图缓存在本机内存中的机制。 背景 Android设备为每个应用程序分配的内存非常有限-堆的范围从16MB到128MB,具体取决于各种参数。 如果超过此限制,则会得到OOM,并且在使用位图时可能会发生多次。 很多时候,应用可能需要克服这些限制,对巨大的位图执行繁重的操作,或者只是将其存储以备后用,而您需要 我想出的是一

  • 问题内容: 我将Ivy用作我的持续集成构建系统的一部分,但是我需要覆盖Ivy的本地缓存区域的默认位置。 问题答案: 尽管上面来自skaffman的答案是正确的,但我发现它比我预期的要多得多的工作! 当我将ivysettings.xml文件添加到项目时,然后我需要重新定义几乎所有内容,因为在此之前默认值一直可以正常工作。 因此,我发现了如何在NAnt脚本中将新的缓存目录添加到嵌入式命令行中… (我的

  • 我在Eclipse包资源管理器中看到以下信息: 是否可以更改此位置?

  • 问题内容: 我是所有内存管理主题的新手,所以有很多我不了解的事情。 我正在尝试将图像缓存在我的应用程序中,但是我在内存消耗方面遇到了麻烦: 所有的Bitmap Chaching代码都可以从此处复制粘贴:http : //developer.android.com/training/displaying- bitmaps/index.html 我调试了代码,并在Eclipse的DDMS视图中检查了堆