Amazon ec2 org.apache.flink.runtime.io.network.netty.exception.RemoteTransportException:与任务管理器的连接中断

Amazon ec2 org.apache.flink.runtime.io.network.netty.exception.RemoteTransportException:与任务管理器的连接中断,amazon-ec2,apache-flink,Amazon Ec2,Apache Flink,我正在从事一个项目,该项目使用flink(版本-1.4.2)将大量数据摄取到我的图形数据库(Janusgraph)。数据摄取分为两个阶段,一个是顶点数据摄取,另一个是图形数据库的边数据摄取顶点数据摄取运行时没有任何问题,但在边缘摄取期间我收到一个错误,提示与任务管理器taskmanagerName的连接丢失。flink-taskmanager-b6f46f6c8-fgtlw的详细错误回溯如下: 2019-08-01 18:13:26,025 ERROR org.apache.flink.runt

我正在从事一个项目,该项目使用flink版本-1.4.2)将大量数据摄取到我的图形数据库(Janusgraph)。数据摄取分为两个阶段,一个是顶点数据摄取,另一个是图形数据库的边数据摄取顶点数据摄取运行时没有任何问题,但在边缘摄取期间我收到一个错误,提示与任务管理器taskmanagerName的连接丢失。flink-taskmanager-b6f46f6c8-fgtlw的详细错误回溯如下:

2019-08-01 18:13:26,025 ERROR org.apache.flink.runtime.operators.BatchTask 
  - Error in task code:  CHAIN Join(Remap EDGES id: TO) -> Map (Key Extractor) -> Combine (Deduplicate edges including bi-directional edges) (62/80)
org.apache.flink.runtime.io.network.netty.exception.RemoteTransportException: Lost connection to task manager 'flink-taskmanager-b6f46f6c8-gcxnm/10.xx.xx.xx:6121'. 
This indicates that the remote task manager was lost.
at org.apache.flink.runtime.io.network.netty.PartitionRequestClientHandler.exceptionCaught(PartitionRequestClientHandler.java:146)
at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:275)
at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireExceptionCaught(AbstractChannelHandlerContext.java:253)
at org.apache.flink.shaded.netty4.io.netty.channel.ChannelInboundHandlerAdapter.exceptionCaught(ChannelInboundHandlerAdapter.java:131)
at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:275)
at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireExceptionCaught(AbstractChannelHandlerContext.java:253)
at org.apache.flink.shaded.netty4.io.netty.channel.ChannelInboundHandlerAdapter.exceptionCaught(ChannelInboundHandlerAdapter.java:131)
at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:275)
at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireExceptionCaught(AbstractChannelHandlerContext.java:253)
at org.apache.flink.shaded.netty4.io.netty.channel.ChannelHandlerAdapter.exceptionCaught(ChannelHandlerAdapter.java:79)
at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:275)
at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireExceptionCaught(AbstractChannelHandlerContext.java:253)
at org.apache.flink.shaded.netty4.io.netty.channel.DefaultChannelPipeline.fireExceptionCaught(DefaultChannelPipeline.java:835)
at org.apache.flink.shaded.netty4.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.handleReadException(AbstractNioByteChannel.java:87)
at org.apache.flink.shaded.netty4.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:162)
at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)
at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
at org.apache.flink.shaded.netty4.io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
at java.lang.Thread.run(Thread.java:748)

Caused by: java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:192)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
at org.apache.flink.shaded.netty4.io.netty.buffer.PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.java:311)
at org.apache.flink.shaded.netty4.io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:881)
at org.apache.flink.shaded.netty4.io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:241)
at org.apache.flink.shaded.netty4.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:119)
... 6 more
为了便于理解,让我们说:

flink-taskmanager-b6f46f6c8-gcxnm
作为TM1和

flink-taskmanager-b6f46f6c8-fgtlw
作为TM2

调试时,我发现TM1从TM2请求
ResultPartition(RPP)
,TM2开始向TM1发送ResultPartition
。但是在检查来自TM1的日志时,我们发现等待了很长时间才从TM2获取RP但是过了一段时间后,它开始取消注册接受的任务。我们认为,netty远程传输异常后取消注册任务导致TM2为特定作业发送
丢失的Taskmanager
错误。 两个任务管理器都运行在单独的ec2实例(m4.2xlarge)
。我已经验证了这两个实例的cpu和内存利用率,并且能够看到限制内的所有指标

你能告诉我为什么taskmanager的行为如此怪异,以及解决这个问题的方法吗


提前感谢

您能否检查TM1TM2的GC日志,查看是否存在可能导致热拍超时的完整GC。

将缓冲区刷新到Netty 在上图中,基于信用的流控制机制实际上位于“Netty服务器”(和“Netty客户端”)组件中,RecordWriter写入的缓冲区总是以空状态添加到结果子分区中,然后逐渐填充(序列化)记录。但奈蒂什么时候能真正得到缓冲呢?显然,只要字节可用,它就不能占用字节,因为这不仅会由于跨线程通信和同步而增加大量成本,而且会使整个缓冲区过时

在Flink中,有三种情况可以让Netty服务器使用缓冲区:

将记录写入缓冲区时,缓冲区已满,或 缓冲区超时命中,或 发送一个特殊事件,如检查点屏障

缓冲区满后刷新 RecordWriter使用当前记录的本地序列化缓冲区,并将逐渐将这些字节写入位于相应结果子分区队列的一个或多个网络缓冲区。尽管RecordWriter可以处理多个子分区,但每个子分区只有一个RecordWriter向其写入数据。另一方面,Netty服务器正在从多个结果子分区读取数据,并如上所述将适当的子分区多路复用到单个信道中。这是一个经典的生产者-消费者模式,中间的网络缓冲区和下一个图片所示。在(1)序列化和(2)将数据写入缓冲区后,RecordWriter会相应地更新缓冲区的写入器索引。一旦缓冲区完全填满,记录编写器将(3)从其本地缓冲池中为当前记录的任何剩余字节(或下一个)获取一个新的缓冲区,并将新的缓冲区添加到子分区队列中。这将(4)通知Netty服务器数据可用,如果它不知道yet4。每当Netty有能力处理此通知时,它将(5)获取缓冲区并沿适当的TCP通道发送

如果队列中有更多已完成的缓冲区,我们可以假设它已经收到通知

缓冲区超时后刷新 为了支持低延迟用例,我们不能仅仅依靠缓冲区已满来向下游发送数据。在某些情况下,某个通信通道没有太多的记录通过,并且不必要地增加了实际拥有的少数记录的延迟。因此,一个周期性的过程将刷新堆栈中所有可用的数据:输出刷新器。周期间隔可通过StreamExecutionEnvironment#setBufferTimeout进行配置,并作为最新5(低吞吐量信道)的上限。下图显示了它如何与其他组件交互:RecordWriter像以前一样序列化并写入网络缓冲区,但同时,如果Netty还没有意识到,输出刷新器可能(3,4)通知Netty服务器数据可用(类似于上面的“缓冲区已满”场景)。当Netty处理此通知(5)时,它将使用缓冲区中的可用数据并更新缓冲区的读卡器索引。缓冲区保留在队列中-Netty服务器端对此缓冲区的任何进一步操作都将在下次继续从读卡器索引中读取

参考资料:

下面的链接可能会帮助你