flink
文章平均质量分 51
flink 日常开发的问题记录和调优总结
笔墨新城
stay hungry stay foolish(饥渴求知,虚怀若愚)
展开
-
flink任务调优日常总结
1. 你是怎么合理的评估 Flink 任务的并行度?Flink 任务并行度合理行一般根据峰值流量进行压测评估,并且根据集群负载情况留一定量的 buffer 资源。⭐ 如果数据源已经存在,则可以直接消费进行测试⭐ 如果数据源不存在,需要自行造压测数据进行测试1.1 对于一个 Flink 任务来说,一般可以按照以下方式进行细粒度设置并行度:⭐ source 并行度配置:以 kafka 为例,source 的并行度一般设置为 kafka 对应的 topic 的分区数⭐ transform(比如 fla原创 2022-03-15 09:42:35 · 2802 阅读 · 0 评论 -
flink savepoint 和 checkpoint对比
flink 设计checkpoint为什么还要设计savepoint?Savepoint 和 Checkpoint 都是使用 Asynchronous Barrier Snapshotting(简称 ABS)算法实现分布式快照的,都可以确保一致性、容错、故障恢复。1.什么是 Checkpoint?Flink Checkpoint 是一种容错恢复机制。这种机制保证了实时程序运行时,即使突然遇到异常也能够进行自我恢复。Checkpoint 对于用户层面,是透明的,用户会感觉程序一直在运行。Flink Ch原创 2022-03-09 10:17:59 · 2593 阅读 · 0 评论 -
flink处理天级别的开窗出现时区的问题
flink处理天级别的开窗出现时区的问题时区的问题是,在处理数据的时候我们是东八区,要对当前要处理的时间加上8小时,才是符合我们预期的。flink这个没考虑时区问题。1.时间纪元所谓的”时间纪元”就是1970年1月1日0时0分0秒,指的是开始的时间。比如Java类代码:Date date = new Date(0);System.out.println(date);打印出来的结果:Thu Jan 01 08:00:00 CST 1970也是1970年1月1日,实际上时分秒是0点0分0秒,这里原创 2022-03-07 13:42:30 · 1722 阅读 · 1 评论 -
flink读取mysql表中的时间字段error java.time.LocalDateTime cannot be cast to java.sql.Timestamp
版本说明flink 版本 1.13.5mysql 版本 8.0.26操作使用mysql table api 读取mysql8中的一个表,这个表的时间字段类型是datetime,在创建数据源的时候,对应mysql 的时间类型,设置成 datatime,String 都不行,执行都报错。这让我emo好久,找不出问题所在。这应该是mysql的一个bug。具体错误信息Exception in thread "main" java.lang.RuntimeException: Failed to fet原创 2022-02-21 16:08:04 · 3705 阅读 · 5 评论 -
The generic type parameters of ‘Tuple2‘ are missing. In many cases lambda methods don‘t provide
想在使用datastream api 开发的时候,对于多个字段开窗的时候,刚开始是逐个排序,但是影响性能。所以想把两个字段一起来排序,就遇到以下问题。Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: The generic type parameters of 'Tuple2' are missing. In many cases lambda methods don't prov原创 2022-01-10 15:28:57 · 1798 阅读 · 0 评论 -
Flink状态之 ListState 用法
1.flink的基本状态Flink有两种基本的状态:算子状态(Operator State)和键控状态(Keyed State),他们的主要区别就是作用范围不一样,算子状态的作用范围就是限定为算子任务(也就是当前一个分区执行的时候,所有数据来了都能访问到状态)。键控状态中并不是当前分区所有的数据都能访问所有的状态,而是按照keyby之后的key做划分,当前key只能访问自己的状态。1.1 Operator State算子状态顾名思义,状态是和算子进行绑定的,一个算子的状态不能被其他算子所访问到。状态由原创 2022-01-08 13:35:03 · 2947 阅读 · 0 评论 -
flink sql之自定义UDF
三种udf:(SQL里可解释的Function)ScalarFunctionTableFunctionAggregateFunction一、Scalar Functions 标量函数标量函数,是指返回一个值的函数。标量函数是实现将0,1,或者多个标量值转化为一个新值。标量函数的行为就是通过evaluation方法来实现的。evaluation方法必须定义为public,命名为eval。evaluation方法的输入参数类型和返回值类型决定着标量函数的输入参数类型和返回值类型。evaluation方原创 2021-12-31 16:50:24 · 1460 阅读 · 0 评论 -
flink状态后端之RocksDB
1.什么是RocksDb?RocksDB 是一个以日志合并树( LSM 树)作为索引结构的 KV 存储引擎。当用于在 Flink 中存储 kv 状态时,键由 <Keygroup,Key,Namespace> 的序列化字节串组成,而值由状态的序列化字节组成。每次注册 kv 状态时,它都会映射到列族(column-family)(类似于传统数据库中的表),并将键值对以字节串存储在 RocksDB 中。这意味着每次读写(READ or WRITE)操作都必须对数据进行反序列化或者序列化,与 Flin原创 2021-12-28 14:48:16 · 3312 阅读 · 1 评论 -
flink如何实现内存管理
flink 的内存管理flink是基于jvm实现内存管理的,但是它是自己管理自己的jvm,没有使用jvm的。1、为什么flink要自己管理jvm?说下jvm在大数据上有什么问题?1、Java 对象存储密度低。一个只包含 boolean 属性的对象占用了16个字节内存:对象头占了8个,boolean 属性占了1个,对齐填充占了7个。而实际上只需要一个bit(1/8字节)就够了。2、Full GC 会极大地影响性能,尤其是为了处理更大数据而开了很大内存空间的JVM来说,GC 会达到秒级甚至分钟级。3原创 2021-11-28 19:48:23 · 757 阅读 · 0 评论 -
DataStreamApi 之watermark和开窗设置
watermark 设置的方式 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStreamSource<Snapshot> dataStreamSource = env.addSource(new SourceFormClickhouse2()); // 设置watermark WatermarkStrategy<Snapshot原创 2021-10-19 19:55:52 · 148 阅读 · 0 评论 -
FLINK数据倾斜的解决思路
排查思路1、查看该任务是否有反压现象利用Flink WebUi查看任务是否有反压情况,结果正常,没有出现反压现象。如果有反压,一般是红色节点往后的一个节点效率或者处理耗时很多,经常出现的是 开窗 分组,维表join,或者 sink 节点入库时间太久等情况。总之根据 web ui 找到对应节点, 可以增大并发,调整资源。2、 查看是否有数据倾斜现象当出现数据倾斜的时候,某一个窗口的数据太大导致无法处理或者处理很慢,所以造成kafka中数据堆积太多。这种情况出现数据倾斜,是由于 按照字段 keyB原创 2021-10-09 16:25:33 · 2352 阅读 · 0 评论 -
Flink State的使用(面试)
1. Keyed state 的使用state.clear() 实际上只能清理当前 key 对应的 value 值,如果想要清空整个 state,需要使用 applyToAllKeys 方法2. Flink MapState的失效时间是针对整个map还是单个key?MapState的失效时间针对于单独的key。可以参考一个例子:demo 3. ValueState 中存 Map 与 MapState 有什么区别?如果 ValueState 中存 Map,则整个 Map 被当做 value,只维原创 2021-08-30 19:22:02 · 557 阅读 · 0 评论 -
自定义适配器Flink数据写入Clickhouse
https://github.com/ivi-ru/flink-clickhouse-sink.githttps://blog.csdn.net/weixin_42868529/article/details/107990845原创 2021-08-27 17:24:38 · 260 阅读 · 0 评论 -
Flink web ui面板功能简述
前言1. 运行状态和数字的含义方块上的数字6,是串行执行的task数量(从输入task一直到输出task),6具体的含义如下这里运行的 数字 ,表示整个流程从头到尾总共有6个task。2. 运行的状态和颜色...原创 2021-08-27 17:19:22 · 1844 阅读 · 1 评论 -
Flink 之容错配置 checkoutpoint
Flink 容错1 .Fault tolerance and checkpointing在 yaml 文件中配置配置信息### flink 可以自动触发state.checkpoints.dir: hdfs://fl:9001/flink-checkpoints### state.savepoints.dir: hdfs://fl:9001/flink-savepoints原创 2021-08-10 20:01:57 · 260 阅读 · 1 评论 -
Flink的重启策略(RestartStrategy)实战
前言flink的 RestartStrategy 作用是什么?一句话概括,提升任务健壮性和容错性,保证任务可以实时产出数据。设置重启策略和公司处理数据业务需求有很大的关系,根据不同的业务需求设置处理任务的不同策略。其实遇到上面这种问题比较常见的,比如有时候因为数据的问题(不合规范、为 null 等),这时在处理这些脏数据的时候可能就会遇到各种各样的异常错误,比如空指针、数组越界、数据类型转换错误等。可能你会说只要过滤掉这种脏数据就行了,或者进行异常捕获就不会导致 Job 不断重启的问题了。所以日常原创 2021-07-28 17:22:34 · 3696 阅读 · 0 评论 -
Flink web ui 自定义传参
前言目前flink 开发使用的是DatastreamApi,由于业务需要设置动态参数。这个不常用,再次记录下,便于需要时查找。1. 编码开发动态设置 收参代码如下: StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 获取传入的参数 ParameterTool parameterTool = ParameterTool.fromArgs(a原创 2021-07-28 10:57:57 · 1171 阅读 · 4 评论 -
Flink--Table Api 和 sql 之时间属性(一)
Flink时间Flink总共有三种时间语义:Processing time(处理时间)、Event time(事件时间)以及Ingestion time(摄入时间)。关于这些时间语义的具体解释,可以参考另一篇文章Flink的时间与watermarks详解。本文主要讲解Flink Table API & SQL中基于时间的算子如何定义时间语义。通过本文你可以了解到:时间属性的简介处理时间事件时间时间属性概述Flink TableAPI&SQL中的基于时间的操作(如window),需原创 2021-07-20 19:23:19 · 483 阅读 · 1 评论 -
Flink - Table API 之流与表转换
Flink - Table API 数据转换1.DataStream或DataSet 转换为Table目前有两种方式将DataStream或DataSet 转换为Table一种是通过注册Table的方式,将DataSet或DataStream数据集注册成CataLog中的表,然后可以直接使用Flink SQL操作注册好的Table,这种方式需要指定表名和包含的字段名称,Flink会自动推断出Table中的字段类型一种是转换的方式,将DataSet或DataStream数据集转换成Table结构,然后原创 2021-07-19 17:44:01 · 2017 阅读 · 0 评论 -
flink.table.api.ValidationException: Cannot resolve field [timeConsuming], input field list:[level]
flink table api 报错的原因是在使用table api 进行数据 group by 之后,做数据的排序。这样写之后,运行报错。 // 数据提取 Table sourceTable = tEnv.from("kafka_source"); Table table = sourceTable.groupBy($("level")) .select($("msg"));详细错误信息如下:Exception in t原创 2021-07-16 16:50:44 · 1265 阅读 · 0 评论 -
flink table api No operators defined in streaming topology. Cannot generate StreamGraph
使用发link tableApi 进行表和流转换报错Exception in thread "main" java.lang.IllegalStateException: No operators defined in streaming topology. Cannot generate StreamGraph. at org.apache.flink.table.planner.utils.ExecutorUtils.generateStreamGraph(ExecutorUtils.java:40原创 2021-07-16 16:06:36 · 498 阅读 · 0 评论 -
flink mysql 链接超时报错
flink连接mysql 的一些问题解决办法原创 2021-07-08 16:19:13 · 1274 阅读 · 0 评论 -
flink之metrics开发
flink metrics 的作用1.flink metric的配置参考:https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/deployment/metric_reporters/https://www.jianshu.com/p/a91ebb9d8b74原创 2021-07-07 13:20:35 · 359 阅读 · 0 评论 -
flink1.13新特性之火焰图
一、flink最新版本1.13 特性火焰图1.开启火焰图配置rest.flamegraph.enabled : true2.效果原创 2021-07-07 13:14:21 · 3265 阅读 · 0 评论 -
Flink之DataStreamApi编程实战
一、Flink DataStreamApi作用和使用场景Flink中的DataStream程序是实现在数据流上的transformation(如filtering,updating state, defining windows,aggregating)的普通程序。创建数据流的来源多种多样(如消息队列,socket流,文件等)。程序通过data sink返回结果,如将数据写入文件,或发送到标准输出(如命令行终端)。Flink程序可以在多种上下文中运行,如独立运行或是嵌入在其他程序中执行。程序的执行可以发生原创 2021-06-29 20:05:30 · 529 阅读 · 1 评论 -
Flink之window窗口
flink的开窗1.flink 的window 概述Windows 是处理无限流的核心。Windows 将流分成有限大小的“存储桶”,我们可以在其上应用计算。Flink 是一个优秀的流计算引擎,数据是源源不断的,它认为批处理 Batch 是一种特殊的流计算,在流中分割出一个个窗口,每个窗口相当于有限大小的空间,汇聚了待处理的数据。2.flink的窗口类型window 注意分为两大类型:CountWindow 和 TimeWindowCountWindow 是与时间没有关系的,比如 数据收集的一定大原创 2021-06-29 19:57:49 · 624 阅读 · 0 评论 -
org/apache/kafka/common/serialization/ByteArrayDeserializer
前言我在idea 项目中读取数据是可以的,但是项目打成jar在flink上运行报错。刚开始以为是打jar 包的问题,最后发现是flink运行jar 缺少依赖。java.lang.NoClassDefFoundError: org/apache/kafka/common/serialization/ByteArrayDeserializer at org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer.setDeserializer原创 2021-06-01 13:09:30 · 2540 阅读 · 1 评论 -
flink本地版环境搭建和踩坑总结
前言最近要搭建一个大数据实时计算平台,架构选型是选的 flink,这里先搭建一个单机版的flink.先感受一下。环境准备VMware 16 + centos7 + xhsell + xftp (开发所用到的工具和容器)此处省略这些工具的下载和安装教程。1.flink的下载我选择的是官网最新的版本wget https://mirrors.bfsu.edu.cn/apache/flink/flink-1.12.2/flink-1.12.2-bin-scala_2.11.tgz解压 tar -原创 2021-04-21 20:26:09 · 750 阅读 · 2 评论 -
阿里实时任务计算blink调优技巧
watermarkMiniBatch 的优势:1.提升吞吐2.减少 state 访问3.减少序列化/反序列化的开销4.减少输出,降低对下游压力表示整个job允许的延迟blink.miniBatch.allowLatencyMs=5000单个batch的sizeblink.miniBatch.size=1000miniBatch设置: 该设置只能优化group by。Stre...原创 2020-08-23 14:24:00 · 1132 阅读 · 0 评论