Flink
文章平均质量分 64
Top5硕士,先后在京东、字节从事后端开发、大数据开发。专栏包含Flink基础知识、常用函数、各种窗口、水位线原理、各种异常的排查(反压、检查点、内存等)、自定义UDF/UDTF/UDAF等,均为博主精心总结。从企业实战出发,提高开发中解决问题的能力
二十六画生的博客
国内Top5硕士,先后在京东、字节从事多年后端开发、大数据开发。
展开
-
Hive sum over partition preceding following 累计求和
有重复,不符合预期 按月份累计时partition by不能再出现month字段!符合预期符合预期 把month加上后,是精确到month粒度了,就看不出累加的效果了:partition by与group by的不同点:1 over(partition by)时select中可以出现多个字段(比如相关的维度字段或不相关的其他字段);但是如果是写[group by 维度字段]时,前面select中需要出现相同的维度字段才行(不然报错),比partition by多了一个限制!2 par原创 2022-07-14 16:15:53 · 2745 阅读 · 0 评论 -
FlinkSQL 列转行/解开map array/unnest/lateral table udtf
将Map展开为多列多行。基于UDTF结果示例2 将数组展开为单列多行。基于UNNEST基于UDTF结果示例3 将Array展开成多列多行end原创 2022-07-14 11:06:44 · 7032 阅读 · 0 评论 -
Flink 窗口迟到很久的消息处理/side outputs 旁路输出/防止数据丢失
Flink 数据源分流/一个数据源分成多个/使用filter/使用split / select(已废弃)/side outputs 旁路输出_二十六画生的博客的博客-CSDN博客_flink 多个filterFlink(29):Flink中对迟到数据的处理(Allowed Lateness 和 SideOutput)_电光闪烁的博客-CSDN博客_flink迟到数据处理.sideOutputLateData(outputTag) Flink-处理乱序数据和迟到数据的总结和解决办法_Knight_AL的博客-原创 2022-06-14 21:30:59 · 925 阅读 · 0 评论 -
Flink 新加source后 发布前需要修改checkpoint的namspace/报错:作业拓扑发生改变,无法使用现有Checkpoint
之前是:source_a union all source_b ;新加source_c:source_a union all source_b source_c;会报错:Flink任务Checkpoint检查报错:作业拓扑发生改变,无法使用现有CheckpointCheckpoint verification error: org.apache.flink.client.program.ProgramInvocationException: The main method ca原创 2022-05-21 13:48:36 · 360 阅读 · 0 评论 -
Clickhouse groupArray/groupUniqArray/arrayJoin/splitByChar
行列转置一般由由行转为列,或者由列转为行。CREATE TABLE datasets.t_city( `province` String, `city` String, `createtime` DateTime, `city_level` Int8)ENGINE = MergeTree()ORDER BY provinceSETTINGS index_granularity = 8192; insert into t_city values.原创 2022-05-15 15:06:56 · 2312 阅读 · 0 评论 -
Flink AggregateFunction窗口函数,执行步骤、流程与实例(二)
先keyby分组,使用计数窗口计算,实例:原创 2022-04-15 14:14:12 · 925 阅读 · 0 评论 -
Flink AggregateFunction窗口函数,自定义UDAF,UDF(一)
AggregateFunction 比 ReduceFunction 更加的通用,它有三个参数:输入类型(IN)、累加器类型(ACC)和输出类型(OUT)。原创 2022-04-15 14:10:45 · 524 阅读 · 0 评论 -
flinksql的 / 的结果只会保留整数部分,flinksql 不支持 div运算符。hive、 mysql : / 结果是小数, div 结果只会保留整数部分
flinksql的 / 的结果只会保留整数部分,flinksql 不支持 div运算符。hive、 mysql : / 结果是小数, div 结果只会保留整数部分mysql> select 3/2 ;+--------+| 3/2 |+--------+| 1.5000 |+--------+1 row in set (0.00 sec)mysql> mysql> mysql> select 3 div 2 ;+---------+| 3 ..原创 2022-03-29 10:16:53 · 3277 阅读 · 0 评论 -
SQL 10位时间戳 除以60 得到整分钟;group by event_ts/60<==> group by 1min
1648519200 2022-03-29 10:00:00/60 = 274753201648519260 2022-03-29 10:01:00/60= 274753211648519300 2022-03-29 10:01:40/60= 27475321.6666666666666671648519320 2022-03-29 10:02:00/60= 274753221648519360 2022-03-29 10:02:40/60= 27475322.6666666666原创 2022-03-29 10:10:12 · 759 阅读 · 0 评论 -
Flink的4种重启策略
如果checkpoint未启动,就会采用no restart策略;如果启动了checkpoint机制,但是未指定重启策略的话,就会采用fixed-delay策略,重试Integer.MAX_VALUE次。分别是:Fixed Delay Restart Strategy Failure Rate Restart Strategy No Restart Strategy Fallback Restart Strategy1 固定间隔 (Fixed delay)For example:原创 2021-09-02 11:02:17 · 1413 阅读 · 0 评论 -
Flinksql 删除/修改print表 再发布是否成功?
均不修改checkpoint的namespace:1如果把print表删除了,再发布会失败,因为拓扑图已经改变。2如果把create的print表名修改了,再发布会成功因为拓扑图没有改变。end原创 2021-08-10 13:17:26 · 495 阅读 · 0 评论 -
jsonpath 果然强大
{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { .原创 2021-07-15 19:00:16 · 140 阅读 · 0 评论 -
Failed to send data to Kafka: Expiring 89 record(s) ...30005 ms has passed since last append
2021-06-08 02:05:37 java.lang.Exception: Failed to send data to Kafka: Expiring 89 record(s) for XXXXXXXXXXXXXX: 30005 ms has passed since last append at org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducerBase.checkErroneous(FlinkKafkaProducerBa原创 2021-06-08 16:55:29 · 9201 阅读 · 0 评论 -
Flink检查点(checkpoint)、保存点(savepoint)的区别与联系
最近一段时间很忙,顾不上仔细选题,写一个所有人都知道的小知识点吧。checkpoint和savepoint是Flink为我们提供的作业快照机制,它们都包含有作业状态的持久化副本。官方文档这样描述checkpoint:Checkpoints make state in Flink fault tolerant by allowing state and the corresponding stream positions to be recovered, thereby giving the appl原创 2021-05-17 10:43:43 · 1074 阅读 · 0 评论 -
Flink 的 emit 作用
flink 1.9如下:配置如下:table.exec.emit.early-fire.enabled:truetable.exec.emit.early-fire.delay:60 searly-fire.delay 就是每分钟输出一次结果的意思。SQL 如下:SELECT TUMBLE_ROWTIME(eventTime, interval ‘1’ day) AS rowtime, dimension, count(distinct id) as uvFROM personG原创 2021-04-28 18:23:35 · 1700 阅读 · 1 评论 -
Flink Record has Long.MIN_VALUE timestamp (= no timestamp marker). Is the time characteristic
报错:Exception in thread "main" org.apache.flink.runtime.client.JobExecutionException: Job execution failed. at org.apache.flink.runtime.jobmaster.JobResult.toJobExecutionResult(JobResult.java:147) at org.apache.flink.runtime.minicluster.MiniCluste...原创 2021-04-15 15:36:00 · 7605 阅读 · 0 评论 -
Flink SQL validation failed. From line 1, column 89 to line 1, column 111: List of column aliases
SQL validation failed. From line 1, column 89 to line 1, column 111: List of column aliases must have same degree as table; table has 1 columns ('f0'), whereas alias list has 3 columnsat org.apache.flink.table.planner.calcite.FlinkPlannerImpl.validate(Fli原创 2021-04-15 15:18:09 · 2653 阅读 · 0 评论 -
Flink的Watermark细节介绍
在前面的流处理随谈一文中已经简单介绍了Watermark,本文主要再结合Flink具体分析一下,作为补充。理论如果看完之前的文章,已经完全理解了Watermark,那可以直接跳过这部分,看实战部分。如果还不太理解,我通过几个问题来阐述一下,帮助你理解。要注意的是下面的描述方式和实际实现未必完全一样(有些甚至是我的个人观点),但可以帮助你更好的理解。What?Watermark是什么?从不同的维度可以有不同的理解从Watermark的计算角度看:可以将Watermark理解为一个函数:F(原创 2021-04-15 11:01:06 · 464 阅读 · 0 评论 -
Flink 使用TableFunction getResultType返回Row类型
Flink1.9.3package SQL_split_index;import org.apache.flink.api.common.typeinfo.TypeInformation;import org.apache.flink.api.common.typeinfo.Types;import org.apache.flink.streaming.api.datastream.DataStreamSource;import org.apache.flink.streaming.api.原创 2021-04-13 11:35:32 · 2378 阅读 · 0 评论 -
Flink 数据倾斜 解决方法
1.数据倾斜的原理和影响1.1 原理数据倾斜就是数据的分布严重不均,造成一部分数据很多,一部分数据很少的局面。数据分布理论上都是倾斜的,符合“二八原理”:例如80%的财富集中在20%的人手中、80%的用户只使用20%的功能、20%的用户贡献了80%的访问量。 数据倾斜的现象,如下图所示。1.2 影响(1)单点问题数据集中在某些分区上(Subtask),导致数据严重不平衡。(2)GC 频繁过多的数据集中在某些 JVM(TaskManager),使得JVM 的内存资源短缺,.原创 2021-04-12 21:27:53 · 3406 阅读 · 0 评论 -
FlinkSQL split_index 的用法
1 添加<properties> <flink.version>1.9.3</flink.version> <flink.scala.version>2.11</flink.scala.version></properties><dependency> <groupId>org.apache.flink</groupId> <artifactId&原创 2021-04-12 17:10:28 · 3631 阅读 · 0 评论 -
FlinkSQL 依赖的pom/api.Table
<!--公共依赖版本号--> <properties> <flink.version>1.9.2</flink.version> <flink.scala.version>2.11</flink.scala.version> </properties> <!-- https://mvnrepository.com/artifact/org...原创 2021-03-22 10:30:55 · 2052 阅读 · 0 评论 -
FlinkSQL split报错No match found for function signature 使用UDF ScalarFunction/TableFunction
1 用TableFunction报错,用ScalarFunction正常 stEnv.registerFunction("SplitLine",new SplitLine("_")); //报错SqlValidatorException: No match found for function signature SplitLine(<CHARACTER>) Table result = stEnv.sqlQuery("SELECT name,原创 2021-03-10 11:06:24 · 11200 阅读 · 0 评论 -
ClickHouse向量化执行 漫谈SIMD、SSE指令集与 ClickHouse为何那么快?
前言ClickHouse之所以会像闪电一样快("blazing fast"),是多方面优化的结果,包括且不限于:高效且磁盘友好的列式存储,高效的数据压缩,精心设计的各类索引,并行分布式查询,运行时代码生成等。另外,ClickHouse为了最大限度地压榨硬件——尤其是CPU——的性能,实现了向量化查询执行(vectorized query execution)机制。这个名词相对于上面的那些可能没那么平易近人,但它毫无疑问是CK相对于传统OLAP引擎的大杀器。鉴于现有资料中讲解CK向量化执行的内容很少,转载 2021-02-23 11:08:31 · 2263 阅读 · 0 评论 -
Flink两阶段提交协议 + Kakfa事务 保证端到端唯一 /TwoPhaseCommitSinkFunction / Kafka的幂等性和事务
文章目录Flink两阶段提交 1.EXACTLY_ONCE语义 2.Kafka的幂等性和事务 2.1 幂等性 2.2 事务 3.两阶段提交协议 4.TwoPhaseCommitSinkFunction 参考文献 Flink两阶段提交1.EXACTLY_ONCE语义EXACTLY_ONCE语义简称EOS,指的是每条输入消息只会影响最终结果一次,注意这里是影响一次,而非处理一次,Flink一直宣称自己支持EOS,实际上主要是对于Flink应用内部.转载 2021-02-22 11:28:38 · 4550 阅读 · 3 评论 -
Flink. Runtime核心架构
1. Flink Runtime 概述1.1 概述Flink RunTime是介于底层部署与DataSteamApi或DataSetApi之间的一层,以JobGraph形式接收程序,将任务task提交到集群上执行,RunTime层可以适用不同底层部署模式。Flink Runtime总体架构如下如所示:[支持分布式Stream作业的执行、JobGraph到ExecutioGraph的映射转换、任务调度等,P11]主要分为Client ,JobManager, TaskManagerClie转载 2021-02-21 18:53:49 · 334 阅读 · 0 评论 -
Flink 三种时间机制、窗口机制 与 sparkStreaming storm 区别
窗口的使用方式:DataStream input = ;input.keyBy(new MyKeyselector()).window(TumblingEventTimeWindows.of(Time.seconds(5))) //assigner.evictor(TimeEvictor.of(Time.of(2,TimeUnit.SECONDS))) //evictor.trigger(EventTimeTrigger.create()) //trigger.allowedLate原创 2021-02-21 18:13:37 · 787 阅读 · 0 评论 -
Flink中水位线/Periodic周期水印/Punctuated每个事件水印实现原理/ PunctuatedWatermarks/PeriodicWatermarks
在用户代码中,我们设置生成水印和事件时间的方法assignTimestampsAndWatermarks()中这里有个方法的重载我们传入的对象分为两种:【2种生成水印的策略】AssignerWithPunctuatedWatermarks(可以理解为每条数据都会产生水印,如果不想产生水印,返回一个null的水印)AssignerWithPeriodicWatermarks(周期性的生成水印)AssignerWithPunctuatedWatermarks:来看一下源码中是如何实现这.转载 2021-01-27 17:42:42 · 1296 阅读 · 0 评论 -
Flink parallelism/maxParallelism 作用 源码
Parallel ExecutionThis section describes how the parallel execution of programs can be configured in Flink. A Flink program consists of multiple tasks (transformations/operators, data sources, and sinks). A task is split into several parallel instances f原创 2021-01-25 14:26:48 · 2208 阅读 · 0 评论 -
Flink CheckpointCoordinator 步骤 流程 源码
1 内部是用ScheduledThreadPoolExecutor实现的2CheckpointCoordinator.java private void preCheckBeforeTriggeringCheckpoint(boolean isPeriodic, boolean forceCheckpoint) throws CheckpointException { // abort if the coordinator has been shutdown in the ...原创 2021-01-24 22:24:47 · 1353 阅读 · 0 评论 -
如何查看Flink配置的意思和作用?
https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/config.html官网 Flink1.12原创 2021-01-23 17:54:06 · 253 阅读 · 0 评论 -
Flink 1.10之改进的TaskManager内存模型与配置/taskmanager.memory.network.fraction
新版内存模型与参数概览官方给出的图示如下。下面看图说话,分区域介绍之。Flink总内存(Total Flink Memory)含义 TaskManager进程占用的所有与Flink相关的内存(不包括JVM元空间和其他额外开销)。具体包含4大块:Flink框架内存(堆内、堆外)、托管内存(仅堆外)、网络缓存(仅堆外)、任务内存(堆内、堆外)。 参数 taskmanager.memory.flink.size:无默认值,需要用户指定。Flink框架(Framework)内..转载 2021-01-23 17:53:00 · 4203 阅读 · 0 评论 -
Flink 数据类型和序列化机制简介/TypeInformation createSerializer TypeSerializer
Flink自己定义了一套数据类型,对应Java中的基本类型、集合、POJO等,数据类型都是TypeInformation的子类,并且在每个子类中都重写了createSerializer方法来创建自己的TypeSerializer,然后使用TypeSerializer来实现序列化和反序列化。如果Flink无法识别或推断类型,则使用Kryo序列化反序列化。如果Kryo无法实现序列化反序列化,可以使用强制avro或者为 Kryo 增加自定义的 Serializer 以增强 Kryo 的功能。实现序列化反序列化转载 2021-01-22 10:16:30 · 3430 阅读 · 0 评论 -
Flink On Yarn 架构/Job启动流程/部署模式
Flink 和spark一样有三种部署模式,分别是 Local、Standalone Cluster 和 Yarn Cluster。实战开发主要使用Yarn Cluster模式,所以本文主要介绍yarn 模式下flink任务的执行和资源分配。Yarn Cluster 模式在图中可以看出,Flink 与 Yarn 的关系与MapReduce 和 Yarn 的关系是一样的。Flink 通过 Yarn 的接口实现了自己的 App Master。当在 Yarn 中部署了 Flink,Yar...转载 2021-01-20 15:33:36 · 318 阅读 · 0 评论 -
Flink 数据源分流/一个数据源分成多个/使用filter/使用split / select(已废弃)/side outputs 旁路输出
实时数据分流的方法1 使用filter2 使用split / select(已废弃)package splitStream;import org.apache.flink.api.java.tuple.Tuple2;import org.apache.flink.streaming.api.collector.selector.OutputSelector;import org.apache.flink.streaming.api.datastream.DataStream;i.原创 2021-01-17 13:12:51 · 1777 阅读 · 2 评论 -
Flink 3种部署模式、保证高可用的区别/Standalone Cluster/Yarn Cluster /Kubernetes Cluster
1 Standalone ClusterMaster-Slave架构,JobManager运行在Master节点,TaskManager运行在Slave节点,与HDFS/Hadoop无关Active JobManager挂掉时,通过Zookeeper选举多个StandByJobManager成为Active JobManager来保证高可用2 Yarn Cluster 【一个作业只运行一个JobManager,JobManager挂掉时会通过重启来保证高可用】2.1 Yarn Ses..原创 2021-01-13 10:51:14 · 2650 阅读 · 1 评论 -
Flink Event Time / Processing Time / Ingestion Time (事件时间/处理时间/摄取时间)
概念Flink supports different notions of time in streaming programs.flink支持不同的 time 流媒体的概念。处理时间: 处理时间是指正在执行相应操作的机器的系统时间。 当流式程序在处理时间上运行时,所有基于时间的操作(如时间窗口)都将使用运行相应操作员的机器的系统时钟。每小时处理时间窗口将包括在系统时钟指示整个小时的时间之间到达特定操作员的所有记录。例如,如果应用程序在上午9:15开始运行,则第一个每小时处理时间窗口将包括.转载 2021-01-08 15:05:08 · 2357 阅读 · 0 评论 -
Flink DataStream转Table 使用SQL:join
inner join 相当于全局窗口,之前的消息也一直保存着,来了一条能关联上的消息,则输出所有的笛卡尔积!package SQL;import org.apache.flink.streaming.api.datastream.DataStreamSource;import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;import org.apache.flink.streaming.api.fu原创 2021-01-06 16:10:17 · 1376 阅读 · 1 评论 -
Flink DataStream转Table 使用SQL:select /where/ group by/toAppendStream/toRetractStream
方法1registerDataStreampackage SQL;import org.apache.flink.streaming.api.datastream.DataStreamSource;import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;import org.apache.flink.streaming.api.functions.source.SourceFunctio...原创 2021-01-06 16:09:41 · 1598 阅读 · 0 评论 -
Flink yarn.application-attempts 与 yarn.resourcemanager.am.max-attempts 区别
yarn.resourcemanager.am.max-attempts是yarn集群上的全局配置,对运行在集群上的所有flink任务起作用;在yarn-site.xml中配置;yarn.application-attempts只对当前的flink Job起作用,且不能大于yarn.resourcemanager.am.max-attempts,不然会被yarn.resourcemanager.am.max-attempts的值覆盖掉;在flink-conf.yaml中配置(每个J.原创 2020-08-07 10:52:01 · 3474 阅读 · 1 评论