首页 文章 精选 留言 我的

精选列表

搜索[单体版本],共10000篇文章
优秀的个人博客,低调大师

Flink 1.4.2 版本踩过的坑

0x1 摘要 最近业务要实时统计半小时维度的UV、PV数据,经过调研准备用Flink时间窗来实现,主要是Flink对eventTime的支持,可以做到更精准的统计,由于第一次尝试使用Flink,所以过程中遇到不少问题,记录下来方便后续查阅。 0x2 执行计划输出JSON问题 Flink对执行计划分析提供了支持,可以通过代码将执行计划打出来,并利用官网提供的图生成工具可以方便分析,通过env.getExecutionPlan()方法可以获取JSON格式的执行计划,将JSON字符串拷贝到http://flink.apache.org/visualizer/网站文本框就可以查看。但我们在项目中调用env.getExecutionPlan()方法后报以下异常信息: Caused by: java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util.TimSort.mergeLo(TimSort.java:777) at java.util.TimSort.mergeAt(TimSort.java:514) at java.util.TimSort.mergeForceCollapse(TimSort.java:457) at java.util.TimSort.sort(TimSort.java:254) at java.util.Arrays.sort(Arrays.java:1512) at java.util.ArrayList.sort(ArrayList.java:1454) at java.util.Collections.sort(Collections.java:175) at org.apache.flink.streaming.api.graph.JSONGenerator.getJSON(JSONGenerator.java:61) at org.apache.flink.streaming.api.graph.StreamGraph.getStreamingPlanAsJSON(StreamGraph.java:663) ... 2 more 通过异常信息可以知道问题发生在TimSort排序算法,意思就是比较方法违反约束,具体约束规范大家可以自行网上查阅:自反性、传递性、对称性。我们来看一下Flink的源码,只要看JSONGenerator类61行就可以: public String getJSON() throws JSONException { JSONObject json = new JSONObject(); JSONArray nodes = new JSONArray(); json.put("nodes", nodes); List<Integer> operatorIDs = new ArrayList<Integer>(streamGraph.getVertexIDs()); Collections.sort(operatorIDs, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { // put sinks at the back if (streamGraph.getSinkIDs().contains(o1)) { return 1; } else if (streamGraph.getSinkIDs().contains(o2)) { return -1; } else { return o1 - o2; } } }); visit(nodes, operatorIDs, new HashMap<Integer, Integer>()); return json.toString(); } 从源码可以看在对操作ID做排序时Flink自己实现compare方法,具体这个方法的实际意义不是很明白,有明白的赐教一下。后来通过网上查阅已经有人提过此issues,地址:https://issues.apache.org/jira/browse/FLINK-8498,但状态是关闭的,也没有回复什么时候解决,但我们通过查看Flink GitHub源码发现,此处实现已经发生变更,源码地址https://github.com/apache/flink/blob/master/flink-streaming-java/src/main/java/org/apache/flink/streaming/api/graph/JSONGenerator.java新实现源码: public String getJSON() { ObjectNode json = mapper.createObjectNode(); ArrayNode nodes = mapper.createArrayNode(); json.put("nodes", nodes); List<Integer> operatorIDs = new ArrayList<Integer>(streamGraph.getVertexIDs()); Collections.sort(operatorIDs, new Comparator<Integer>() { @Override public int compare(Integer idOne, Integer idTwo) { boolean isIdOneSinkId = streamGraph.getSinkIDs().contains(idOne); boolean isIdTwoSinkId = streamGraph.getSinkIDs().contains(idTwo); // put sinks at the back if (isIdOneSinkId == isIdTwoSinkId) { return idOne.compareTo(idTwo); } else if (isIdOneSinkId) { return 1; } else { return -1; } } }); visit(nodes, operatorIDs, new HashMap<Integer, Integer>()); return json.toString(); } 我猜测是因为违反了自反性导致的错误,那这个问题怎么解决呢?有两种方案: 方案一:去掉env.getExecutionPlan()不打印执行计划 方案二:设置JVM参数-Djava.util.Arrays.useLegacyMergeSort=true 0x3 不能连续split问题 场景描述,直接看拓扑图:希望达到上图的流拆分,但我开开心心把代码写后发布线上运行没有任何异常,等到验证数据时才发现最终统计数据不准A-1和A-2的结果都是一样的,issues地址:https://issues.apache.org/jira/browse/FLINK-5031 0x4 不能先process操作再split 在发现不能连续split后,只能想其他办法,将拓扑图改为:改为此方案后,线下运行直接报错,异常信息: Exception in thread "main" java.lang.NullPointerException at org.apache.flink.streaming.api.graph.StreamGraph.addOutputSelector(StreamGraph.java:444) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transformSplit(StreamGraphGenerator.java:267) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transform(StreamGraphGenerator.java:176) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transformSelect(StreamGraphGenerator.java:282) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transform(StreamGraphGenerator.java:178) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transformPartition(StreamGraphGenerator.java:241) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transform(StreamGraphGenerator.java:184) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transformOneInputTransform(StreamGraphGenerator.java:527) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.transform(StreamGraphGenerator.java:166) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.generateInternal(StreamGraphGenerator.java:132) at org.apache.flink.streaming.api.graph.StreamGraphGenerator.generate(StreamGraphGenerator.java:124) at org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.getStreamGraph(StreamExecutionEnvironment.java:1528) at org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.getExecutionPlan(StreamExecutionEnvironment.java:1540) ... 2 more 网上查阅发现存在issues,地址:https://issues.apache.org/jira/browse/FLINK-9141最终改为先split再process方法搞定,拓扑图如下:

优秀的个人博客,低调大师

使用高速通道加速iOS版本审核

1 市场现状 据Newzoo数据显示,2017年全球游戏市场规模预计达1089亿美元,较上年增长7.8%,移动游戏(包括平板和智能手机)方面,市场规模占整体游戏市场42%,占比最大,约457.38亿美元。预计2018年,全球手游市场规模将达到521亿美元,也将会是所有平台中,游戏规模增速最快、市场规模最大的游戏平台。 而在整个智能手机的普及率上,IOS的手机也占了将近半壁江山,同时它的CPI和相对更高,人群的付费意愿和能力相比Android也会略高。 但是一款手游要想发布在苹果商店的应用市场,最头痛的莫过于审核。最近,苹果在官网给出了截至2016年6月份应用被拒绝的十大条款(其中63%以上的应用被拒绝都是因为这10个条款),另外一个主要的原因就是跨境网络传输的不稳定、延迟高也是造成审核失败的重要原因,此方案目的是为了加速苹果商店审核的网

优秀的个人博客,低调大师

Android Day13-版本控制SVN

插件的安装与安装成功验证 注意事项 1.服务器安装好之后,验证,在浏览器输入https://127.0.0.1/,如果没有出现想要的提示信 息,可能是浏览器不兼容,换个浏览器就好了。 2.卸载Oracle VM时,虚拟主机所占用的内存空间不会释放掉,应找到它的位置手动清除。 VirtualBox主菜单,管理--〉全局设定 默认虚拟电脑位置 一般虚拟主机应该是放在C:\Users\LENOVO\VirtualBox VMs这个目录下面。 SVN Server导入资源库 右击Respositories文件夹, 选择“所有任务”-“Import Existing Respository” 如果没有资源的权限,可以新建一个用户。 Eclipse检出项目 首先,Eclipse装好SVN的插件。 1.import项目时,选择SVN-检出SVN项目 2.创建新的或使用已有的资源库位置 位置是在服务器里右击资源库复制它的链接的,如果服务器软件不在本地电脑上,就要修改 一下主机名为共网的IP地址。 本文转自屠夫章哥 51CTO博客,原文链接:http://blog.51cto.com/4259297/1680897,如需转载请自行联系原作者

优秀的个人博客,低调大师

iOS itunesconnect 权限分配(发布版本前奏)

进入:itunesconnect.apple.com登陆对应的账号,登陆成功之后,有权限、无权限页面分别如下 登陆主账号,点击 填写邀请人的基本信息,APP ID需要要正确的,邀请成功之后,有邮件提示,最后需要点击邮寄链接激活 邀请人对应的权限,选择对应权限之后,有什么功能可以使用,列举在下面了 邮件提示 点击邮件里“activate your account” OK,重新登录一下账号

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册