(转载)java - Flink IOException:网络缓冲区数量不足

我正在使用Flink v1.4.0。我正在使用DataSet API(尽管这不重要)。我正在12核VM上进行一些重型转换。我正在为一个Flink job使用2个内核,其中我将一些数据存储到Flink Queryable State中,并使用剩余的10个内核运行另一个Flink作业。当我以10个内核运行第二个作业时,似乎出现以下错误:java.io.IOException: Insufficient number of network buffers: required 10, but only 9 available. The total number of network buffers is currently set to 4096 of 32768 bytes each. You can increase this number by setting the configuration keys 'taskmanager.network.memory.fraction', 'taskmanager.network.memory.min', and 'taskmanager.network.memory.max'. at org.apache.flink.runtime.io.network.buffer.NetworkBufferPool.createBufferPool(NetworkBufferPool.java:257) at org.apache.flink.runtime.io.network.NetworkEnvironment.registerTask(NetworkEnvironment.java:199) at org.apache.flink.runtime.taskmanager.Task.run(Task.java:618) at java.lang.Thread.run(Thread.java:745)

 如果我使用8核来运行它,它就可以通过。是什么原因造成的,为什么我不能使用其他2个-> 8 + 2 = 10个内核?最佳答案引用Apache Flink常见问题解答:  如果您以很高的并行度运行Flink,则可能需要增加网络缓冲区的数量。    默认情况下,Flink占用JVM堆大小的10%作为网络缓冲区,最小为64MB,最大为1GB。您可以通过taskmanager.network.memory.fraction,taskmanager.network.memory.min和taskmanager.network.memory.max调整所有这些值。    有关详细信息,请参阅《配置参考》。有一个dedicated section in the docs for how to configure the network buffers。总之,可以通过设置./conf/flink-conf.yaml参数来配置taskmanager.network.numberOfBuffers文件中的网络缓冲区数。该参数应设置为#slots-per-TM^2 * #TMs * 4,其中#slots per TM是每个TaskManager的插槽数,而#TMs是任务管理器的总数。例如,要支持一个由20个8插槽计算机组成的集群,则应使用大约5000个网络缓冲区以实现最佳吞吐量。默认情况下,每个网络缓冲区的大小为32 KiBytes。在上面的示例中,系统将因此为网络缓冲区分配大约300 MiBytes。请参考文档以获取详细信息。

原地址:https://www.coder.work/article/3585277

你可能感兴趣的:((转载)java - Flink IOException:网络缓冲区数量不足)