Flink开发中的问题
1. 流与批处理的区别
- 流处理系统
流处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,然后立刻通过网络传输到下一个节点,由下一个节点继续处理。
- 批处理系统
批处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,并不会立刻通过网络传输到下一个节点,当缓存写满,就持久化到本地硬盘上,当所有数据都被处理完成后,才开始将处理后的数据通过网络传输到下一个节点。
- flink的流处理和批处理
Flink的执行引擎采用了一种十分灵活的方式,同时支持了这两种数据传输模型:
• Flink以固定的缓存块为单位进行网络数据传输,用户可以通过设置缓存块超时值指定缓存块的传输时机。如果缓存块的超时值为0,则Flink的数据传输方式类似上文所提到流处理系统的标准模型,此时系统可以获得最低的处理延迟
• 如果缓存块的超时值为无限大,则Flink的数据传输方式类似上文所提到批处理系统的标准模型,此时系统可以获得最高的吞吐量
• 同时缓存块的超时值也可以设置为0到无限大之间的任意值。缓存块的超时阈值越小,则Flink流处理执行引擎的数据处理延迟越低,但吞吐量也会降低,反之亦然。通过调整缓存块的超时阈值,用户可根据需求灵活地权衡系统延迟和吞吐量
原文链接:https://blog.csdn.net/shujuelin/article/details/89351157
2. 恢复作业 checkpoint
检查点(checkpoint)的目录是依赖JobID的,每次运行任务都是一个唯一的JobID(好像不能手动设置),所以要找到上一次任务的JobID才能找到检查点。
保存点(savepoint)需要手动触发,而且在指定目录下还生成一个唯一的子目录。
# savepoint
flink run -s /tmp/state.backend/s1/savepoint-17b840-2cfe3bd5bc0c -c flink.HelloWorld target/scala-flink-0.1.jar
# checkpoint
flink run -s /tmp/state.backend/17b840a3d2221b1400ec03f7e3949b17/chk-960 -c flink.HelloWorld target/scala-flink-0.1.jar
检查点和保存点的恢复方法一样的
3. 用流处理批数据,最后一个窗口不计算
现象
用流处理,处理kafka里面的数据时,最后一个窗口会不关闭.导致最后的数据会丢失.
原因
最后一个窗口的水位线还没到 窗口关闭时间.
解决方案
自定义触发器.以机器时钟为准,5秒触发一次.
5. flink 消费kafka的多个topic
传入 List topics , kafka 支持 多个topic.
多个kafka消费,然后用union 连接.
8.Flink state 调优跟注意点
https://blog.csdn.net/qq_31866793/article/details/97272103
9 Flink1.8.0重大更新-Flink中State的自动清除详解
https://blog.csdn.net/u013411339/article/details/90625604
10. 内存溢出
现象
yang gc 时间达到30秒,fullgc 很少发生.
11 linux 内存过多
运行sync将dirty的内容写回硬盘
sync
通过修改proc系统的drop_caches清理free的cache
echo 1 > /proc/sys/vm/drop_caches
13 ask timeout
增加参数
akka.ask.timeout: 100s
web.timeout: 300000
参看:https://www.cnblogs.com/createweb/p/12027737.html
14 Container exited with a non-zero exit code 143
at org.apache.flink.yarn.YarnResourceManager.lambda$onContainersCompleted$0(YarnResourceManager.java:343)
at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRunAsync(AkkaRpcActor.java:402)
at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcMessage(AkkaRpcActor.java:195)
at org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.handleRpcMessage(FencedAkkaRpcActor.java:74)
at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleMessage(AkkaRpcActor.java:152)
at akka.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:26)
at akka.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:21)
at scala.PartialFunction$class.applyOrElse(PartialFunction.scala:123)
at akka.japi.pf.UnitCaseStatement.applyOrElse(CaseStatements.scala:21)
at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:170)
16 Flink 清理过期 Checkpoint 目录的正确姿势
https://www.jianshu.com/p/165a1bf33e4a
17 flink 内存越来越大,越来越慢
将窗口滑动时间由1分钟改为10分钟
18. flink 与 kafka
consumer.setStartFromEarliest(); //从最早的数据开始消费
consumer.setStartFromLatest(); //从最新的数据开始消费
consumer.setStartFromTimestamp(...); //从根据指定的时间戳(ms)处开始消费
consumer.setStartFromGroupOffsets(); //默认从提交的 offset 开始消费
反序列化用 KafkaDeserializationSchema 可以获取到topic的信息
public class ConsumerRecord<K, V> {
private final String topic;
private final int partition;
private final long offset;
private final long timestamp;
private final TimestampType timestampType;
private final long checksum;
private final int serializedKeySize;
private final int serializedValueSize;
private final K key;
private final V value;
}
21 集群启动
./hadoop-daemon.sh start journalnode
./hadoop-daemon.sh start zkfc
./hadoop-daemon.sh start datanode
./hadoop-daemon.sh start namenode
./yarn-daemon.sh start nodemanager
./yarn-daemon.sh start resourcemanager
./bin/kafka-server-start.sh -daemon ./config/server.properties
./zkServer.sh start
21 flink Reduce、GroupReduce、GroupCombine笔记
reduce
应用于分组DataSet的Reduce转换使用用户定义的reduce函数将每个组减少为单个元素。对于每组输入元素,reduce函数连续地将元素对组合成一个元素,直到每个组只剩下一个元素。
注意,对于ReduceFunction,返回对象的key字段应与输入值匹配。这是因为reduce是可隐式组合(combine)的,并且从combine运算符发出的对象在传递给reduce运算符时再次按key分组。
GroupReduce
应用于分组DataSet的GroupReduce调用用户定义的group-reduce函数转换每个分组。
这与Reduce的区别在于用户定义的函数会立即获得整个组。在组的所有元素上使用Iterable调用该函数,并且可以返回任意数量的结果元素
GroupCombine 分组连接 (少用)
该策略可能不会一次处理所有数据,而是以多个步骤处理
GroupCombine转换是可组合GroupReduceFunction中组合步骤的通用形式。它在某种意义上被概括为允许将输入类型I组合到任意输出类型O.
相反,GroupReduce中的组合步骤仅允许从输入类型I到输出类型I的组合。这是因为reduce步骤中,GroupReduceFunction期望输入类型为I.
在一些应用中,期望在执行附加变换(例如,减小数据大小)之前将DataSet组合成中间格式。这可以通过CombineGroup转换能以非常低的成本实现。
注意:分组数据集上的GroupCombine在内存中使用贪婪策略执行,该策略可能不会一次处理所有数据,而是以多个步骤处理。
它也可以在各个分区上执行,而无需像GroupReduce转换那样进行数据交换。这可能会导致输出的是部分结果,
所以GroupCombine是不能替代GroupReduce操作的,尽管它们的操作内容可能看起来都一样。
22flink 历史服务器
修改历史服务器配置
org.apache.flink.configuration.HistoryServerOptions
historyserver.web.tmpdir 文件地址.
23 Could not deploy Yarn job cluster
新增:
flink-conf.yaml:rest.port: 8082
24 Flink:Could not forward element to next operator
前后时间窗口不一致导致的.
25flink报错org.apache.commons.cli.Option.builder
删除$FLINK_HOME/lib下面的/commons-cli-1.4.jar
26 Flink中的序列化失败问题
声明为@transent
27 Line could not be encoded
Caused by: java.lang.RuntimeException: Line could not be encoded: [49, 56, 49, 49, 90, 77, 119, 66, 54, 48, 54, 71, 48, 53, 55, 50, 48, 49, 53, 48, 56, 48, 53, 49, 56, 52, 52, 48, 56, 109, 49, 106, 124, -26, -84, -94, -24, -65, -114, -28, -67, -65, -25]
at org.apache.flink.api.java.io.TextValueInputFormat.readRecord(TextValueInputFormat.java:127)
at org.apache.flink.api.java.io.TextValueInputFormat.readRecord(TextValueInputFormat.java:38)
at org.apache.flink.api.common.io.DelimitedInputFormat.nextRecord(DelimitedInputFormat.java:520)
at org.apache.flink.runtime.operators.DataSourceTask.invoke(DataSourceTask.java:195)
at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:708)
at org.apache.flink.runtime.taskmanager.Task.run(Task.java:533)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(CoderResult.java:281)
at java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:816)
at org.apache.flink.api.java.io.TextValueInputFormat.readRecord(TextValueInputFormat.java:117)
... 6 more
解决方案:
Configuration conf = new Configuration();
conf.setBoolean("recursive.file.enumeration", true);
TextValueInputFormat inputFormat = new TextValueInputFormat(new Path(path));
inputFormat.setSkipInvalidLines(true);
28 Embedded metastore is not allowed
解决方案:flink 集成 hive 时 不支持embedded metastore的,配置hive时 需要起一个hive metastore 并在conf文件配置 hive.metastore.uris
29 flink实战--开发中常见的错误与问题
https://blog.csdn.net/aa518189/article/details/103622261
30 Exceeded checkpoint tolerable failure threshold.
重启
Flink开发中的问题的更多相关文章
- Flink(三)Flink开发IDEA环境搭建与测试
一.IDEA开发环境 1.pom文件设置 <properties> <maven.compiler.source>1.8</maven.compiler.source&g ...
- Flink学习笔记:Flink开发环境搭建
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...
- Monad 在实际开发中的应用
版权归作者所有,任何形式转载请联系作者. 作者:tison(来自豆瓣) 来源:https://www.douban.com/note/733279598/ Monad 在实际开发中的应用 不同的人会从 ...
- Apache Flink 开发环境搭建和应用的配置、部署及运行
https://mp.weixin.qq.com/s/noD2Jv6m-somEMtjWTJh3w 本文是根据 Apache Flink 系列直播课程整理而成,由阿里巴巴高级开发工程师沙晟阳分享,主要 ...
- TDD在Unity3D游戏项目开发中的实践
0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...
- React在开发中的常用结构以及功能详解
一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...
- Android学习探索之Java 8 在Android 开发中的应用
前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- 总结iOS开发中的断点续传那些事儿
前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...
随机推荐
- 深度解析:如何替换掉代码中的ifelse,我女朋友看完都会了!
平时我们在写代码时,需要针对不同情况处理不同的业务逻辑,用得最多的就是if和else. 但是如果情况太多,就会出现一大堆的"if else",这就是为什么很多遗留系统中,一个函数可 ...
- 去年去阿里面试,被问到java 多线程,我是这样手撕面试官的
1.多线程的基本概念 1.1进程与线程 程序:是为完成特定任务,用某种语言编写的一组指令的集合,即一段静态代码,静态对象. 进程:是程序的一次执行过程,或是正在运行的一个程序,是一个动态的过程,每个程 ...
- ABBYY FineReader 15 文档转换功能
我们平常工作的时候总会固定地只用某几个文档格式,有的人经常使用office,所以电脑内就没安装PDF阅读器,这个时候就需要文档转换器了,ABBYY FineReader 15 也能够帮助我们实现快速的 ...
- MathType中余弦函数的输入
余弦函数是三角函数中十分重要的一个知识点,余弦函数的俩种形式分别为a2=b2+c2-2bccosA和cosA=(b2+c2-a2)/2bc,接下来我们分别介绍一下这俩种形式的输入. 具体步骤如下: 步 ...
- FL Studio采样器设置的功能是什么
FL Studio是一款很集成化的软件,它和很多其他的软件不同,FL Studio的通道中集成了很多采样器.这种整合的方式不但功能强大而且也很便捷.今天小编就来为大家详细的简介下FL Studio采样 ...
- Lambda表达式(一)入门认识篇
Lambda表达式(一)入门认识篇 Lambda简介 Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极 ...
- api4excel - 接口自动化测试excel篇
api4excel - 接口自动化测试excel篇 工作原理: 测试用例在excel上编辑,使用第三方库xlrd,读取表格sheet和内容,sheetName对应模块名,Jenkins集成服务发现服务 ...
- phpstorm中去除sql的背景颜色
链接 http://www.oschina.net/question/1779564_2143393 这是去除黄线 再去除灰色线
- Java(8)I/O
目录 一.File类 1.File类概述 2.File类实例化 3.File类常用方法 二.IO流的原理 1.IO流的原理 2.input和output的理解 三.IO流的分类 1.分类 2.图示 3 ...
- HarmonyOS Java UI之DependentLayout布局示例
DependentLayout简介 DependentLayout意为相对位置布局,与DirectionalLayout相比较有更多的排布方式,每个组件可以指定相对于其他同级组件的位置,也可以指定相对 ...