【Flink】Flink netty 通讯 PartitionRequestClient NettyPartitionRequestClient
1.概述
转载:http://www.voidcn.com/article/p-tbmjvzhq-bkg.html
这篇文章不是很完善,这点我也不是很懂,以后补充
分区请求客户端(PartitionRequestClient)用于发起远程PartitionRequest请求,它也是RemoteChannel跟Netty通信层之间进行衔接的对象。
对单一的TaskManager而言只存在一个NettyClient实例。但处于同一TaskManager中不同的任务实例可能会跟不同的远程TaskManager上的任务之间交换数据,不同的TaskManager实例会有不同的ConnectionID(用于标识不同的IP地址)。因此,Flink采用PartitionRequestClient来对应ConnectionID,并提供了分区请求客户端工厂(PartitionRequestClientFactory)来创建PartitionRequestClient并保存ConnectionID与之的对应关系。
接下来,我们重点分析一下其请求ResultPartition的requestSubpartition方法:
/*** Requests a remote intermediate result partition queue.** <p>The request goes to the remote producer, for which this partition* request client instance has been created.** 请求一个远程中间结果分区队列。** 请求被发送到远程生产者,这个分区请求客户端实例已经被创建。*/@Overridepublic void requestSubpartition(final ResultPartitionID partitionId,final int subpartitionIndex,final RemoteInputChannel inputChannel,int delayMs) throws IOException {checkNotClosed();LOG.debug("Requesting subpartition {} of partition {} with {} ms delay.",subpartitionIndex, partitionId, delayMs);//将当前请求数据的RemoteInputChannel的实例注入到NettyClient的ChannelHandler管道的//PartitionRequestClientHandler实例中clientHandler.addInputChannel(inputChannel);//构建PartitionRequest请求对象final PartitionRequest request = new PartitionRequest(partitionId, subpartitionIndex, inputChannel.getInputChannelId(), inputChannel.getInitialCredit());//构建一个ChannelFutureListener的实例,当I/O操作执行失败后,会触发相关的错误处理逻辑final ChannelFutureListener listener = new ChannelFutureListener() {@Overridepublic void operationComplete(ChannelFuture future) throws Exception {if (!future.isSuccess()) {clientHandler.removeInputChannel(inputChannel);SocketAddress remoteAddr = future.channel().remoteAddress();inputChannel.onError(new LocalTransportException(String.format("Sending the partition request to '%s' failed.", remoteAddr),future.channel().localAddress(), future.cause()));}}};//立即发送该请求,并注册listenerif (delayMs == 0) {ChannelFuture f = tcpChannel.writeAndFlush(request);f.addListener(listener);} else {//如果请求需要延迟一定的时间,则延迟发送请求final ChannelFuture[] f = new ChannelFuture[1];tcpChannel.eventLoop().schedule(new Runnable() {@Overridepublic void run() {f[0] = tcpChannel.writeAndFlush(request);f[0].addListener(listener);}}, delayMs, TimeUnit.MILLISECONDS);}}
【Flink】Flink netty 通讯 PartitionRequestClient NettyPartitionRequestClient相关推荐
- Flink读取Netty数据示例代码
本示例代码记录每张表数据的爬取进度 每张表实时ID 每张表实时爬取数量 记录每张表记录总数 import lombok.AllArgsConstructor; import lombok.Builde ...
- netty通讯--tcp心跳异常断开问题排查
一.netty通讯中tcp心跳维持有以下两种: 1.TCP协议自带的心跳机制来实现,默认2h心跳检测频率. 2.应用层通过协议实现心跳机制. 二.最近的一个物联网项目,整体的通讯架构如下: 服务端和客 ...
- 智牛股_第4章_Nacos+Ceph分布式存储+Netty通讯
智牛股_第4章_Nacos+Ceph分布式存储+Netty通讯 文章目录 智牛股_第4章_Nacos+Ceph分布式存储+Netty通讯 学习目标 第1章 Nacos的介绍与使用 1. 目标 2. 分 ...
- 凌波微步Flink——Flink的技术逻辑与编程步骤剖析
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/95459606 本文出自[我是干勾鱼的博客] Ingredients: Java: ...
- 大数据计算引擎之Flink Flink CEP复杂事件编程
原文地址:大数据计算引擎之Flink Flink CEP复杂事件编程 复杂事件编程(CEP)是一种基于流处理的技术,将系统数据看作不同类型的事件,通过分析事件之间的关系,建立不同的时事件系序列库,并利 ...
- 凌波微步Flink——Flink API中的一些基础概念
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/95355619 本文出自[我是干勾鱼的博客] Ingredients: Java: ...
- 【Flink】Flink network netty ProducerFailedException SimpleChannelInboundHandler NullPointerException
1.背景 一个flink程序报错这个 org.apache.flink.runtime.io.network.netty.exception.RemoteTransportException: Err ...
- 大数据框架对比:Hadoop、Storm、Samza、Spark和Flink——flink支持SQL,待看
简介 大数据是收集.整理.处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称.虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的普遍性.规模,以及价值在最近几年才 ...
- flink 不设置水印_从0到1学习Flink—— Flink parallelism 和 Slot 介绍
前言 之所以写这个是因为前段时间自己的项目出现过这样的一个问题: 1Caused by: akka.pattern.AskTimeoutException: 2Ask timed out on [Ac ...
最新文章
- Python之Selenium的爬虫用法
- 基本概念之dos和cmd的区别
- 计算机音乐数字乐谱核爆神曲,原神乐谱核爆神曲
- SAP特性,物料特性,批次特性建立的BAPI函數
- lucene 第一天
- Tcode SCU3查看table log的error message - 如何查找necessary PFCG role
- matlab中gatbx工具箱的添加
- nuxt route 全局管理 route.beforeEach 替代
- java ssh pdf_JavaSSH框架技术规范.pdf
- Bootstrap 排版h1~h6标题
- Git for windows 配置
- WinXP系统连接网络教程
- 供水供气管道泄漏监测系统原理
- 跨模态行人重识别:RGB-Infrared Cross-Modality Person Re-Identification 学习记录笔记
- ios设置阴历或农历生日(以iPhone X为例)
- git推送不能完全退出错误
- Laya2自动同步cullingMask方案以及灯光裁剪补丁
- 差分时钟、DQS与DQM - DDRx的关键技术介绍
- Virus_JS3_PyAnalysisAndSummary
- Seq2Seq 粗浅理解
热门文章
- SpaceX载人龙飞船将于11月份进行首次环绕国际空间站飞行
- Facebook市值首次突破1万亿美元
- 消息称谷歌Pixel系列手机默认禁用美颜功能
- 外媒:三星电子正与华为商讨芯片代工事宜
- 台积电5nm进入试产 首批客户苹果华为在列
- 最受期待的功能之一:索尼PS5或可直接运行老款PS主机游戏
- 真有钱!科大讯飞年中分红:共派发现金红利2.2亿元
- 拳王虚拟项目公社:月入16000+的虚拟商品教程,虚拟项目全自动化的升级玩法拆解
- php mysql 代理_让PHP像C罗一样操作MySQL之ProxySQL
- 录音权限 推送_友邻正式推出Linux版本录音系统