Flink
文章平均质量分 74
Flink基本使用和原理解析
Bulut0907
大数据、机器学习、编程语言、IT相关技术分享, 喜欢请关注、点赞、收藏哦!
展开
-
使用Flink命令行和Java API远程提交Flink任务到Yarn
然后下载flink-runtime-web-1.15.0.jar、flink-connector-jdbc-1.15.0.jar、mysql-connector-java-8.0.29.jar,上传到HDFS的/flink/remote-submit-lib下。下载flink-clients-1.15.0.jar、log4j-1.2-api-2.17.2.jar,到/opt/flink-remote-submit/java-lib目录下。然后上传datasync-test的jar包到创建的目录下。原创 2024-09-23 09:29:44 · 1083 阅读 · 0 评论 -
Flink SQL的JDBC Connector实现SupportsFilterPushDown谓词下推、SupportsAggregatePushDown聚合下推
主要逻辑是对filters进行遍历,一个ResolvedExpression就是一个where条件,根据不同的条件表达式,比如equals,进行不同的处理,生成where条件SQL语句,拼接到query中形成新的query并返回。Flink会自动传递3个参数值给applyAggregates方法进行调用,我们只需对获取的3个参数值进行解析,拼接成聚合SQL语句,然后再从原query中获取表名,就可以生成新的query语句了。的3个参数,groupingSets包含字段在GROUP BY中的index;原创 2024-09-20 09:19:47 · 709 阅读 · 0 评论 -
Prometheus之集成Flink
Flink提供的Metrics可以在Flink内部收集一些指标,通过这些指标让开发人员更好地查看作业或集群的状态。原创 2022-12-17 10:05:42 · 1573 阅读 · 0 评论 -
Flink DataStream使用JdbcInputFormat方式从Mysql读取数据
官网Jdbc DataStream Connector只有Sink,没有Source,所以需要用其它方式从Mysql查询数据。原创 2022-11-29 08:46:28 · 1532 阅读 · 0 评论 -
在IDEA本地开发时Flink CDC和Flink的guava版本冲突解决办法
将flink-sql-connector-mysql-cdc/target/flink-sql-connector-mysql-cdc-2.2.0.jar拷贝到本地进行引用,同时将原来pom.xml的flink-connector-mysql-cdc依赖注释掉,最后就可以在本地运行项目了。如果不放心可以在本地使用自己编译的flink-sql-connector-mysql-cdc-2.2.0.jar,在生成环境使用。因为Flink CDC使用的是guava版本如下。原创 2022-11-10 13:50:16 · 7143 阅读 · 4 评论 -
【Flink源码篇】Flink提交流程之有效配置和程序的封装
然后进行所有classpath的URL、application的jar包和里面的依赖jar包的URL的加载,返回一个ClassLoader。ProgramOptions这个类,主要是在构造函数中,通过从CommandLine获取不同参数的值,经过一定的转换,给ProgramOptions的各个类变量进行赋值操作。大致的过程如上所示,具体的转换过程这里就不讲解了。主要进行application的ClassLoader加载,Context的设置,和最终的application程序的执行。原创 2022-09-19 09:23:53 · 720 阅读 · 0 评论 -
Flink通过Native Kubernetes(k8s)方式Session模式和Application模式进行部署
目录1. Session模式1.1 安装Java1.2 下载Flink并解压1.3 在所有k8s的所有node节点下载flink镜像1.4 创建namespace、service账号和给账号授权1.5 启动flink的jobmanager1.6 访问Flink Web页面1.7 向Flink集群提交任务1.8 再次查看Pod和Flink Web1. Session模式1.1 安装Javajava 8的安装,请参考我的这篇博客centos7同时安装java8和openJdk11、windows同时安装j原创 2022-09-15 09:27:14 · 4853 阅读 · 4 评论 -
【Flink源码篇】Flink提交流程之flink命令自定义参数的解析和命令行客户端的选择
.....省略部分......try {// 进行CliFrontend客户端的实例化// 安全模块的安装// 进行flink自定义参数的解析,并进行application的提交}......省略部分......}}// 进行客户端的文件系统初始化。Flink的文件系统采用了插件的方式,以支持不同的文件系统// 添加zookeeperNamespace、jobmanager、-D传递的参数的key和value到customCommandLineOptions。原创 2022-09-08 09:47:45 · 1299 阅读 · 0 评论 -
【Flink源码篇】Flink提交流程之flink-conf.yaml的解析和3种flink命令行客户端的添加
上篇,我们讲解了EnvironmentInformation.logEnvironmentInfo函数。主要是log4j2日志框架如何绑定到Flink、log4j2配置文件和日志路径的定义这篇我们来讲解Flink的flink-conf.yaml和flink命令自定义参数解析。原创 2022-09-07 09:18:58 · 1928 阅读 · 0 评论 -
Flink Table/Sql自定义Kudu Sink实战(其它Sink可参考)
DynamicTableSourceFactory或DynamicTableSinkFactory将CatalogTable的metadata,转换成DynamicTableSource或DynamicTableSink的实例数据。:Flink Catalog已有的Flink Table,或在Flink Catalog进行Flink Table的create sql声明。DynamicTableFactory主要验证with子句的各个选项,并解析with子句的各个选项值。具体可以参考我的这篇博客。原创 2023-06-12 09:23:30 · 1818 阅读 · 0 评论 -
【Flink源码篇】Flink提交流程之logEnvironmentInfo解读
然后flink-dist/src/main/assemblies/bin.xml中,定义了打包的时候会将log4j-slf4j-impl打包到Flink_HOME/lib目录下,打包使用的是maven-assembly-plugin插件。log4j2日志框架会读取这些JVM参数。这里主要讲解flink客户端是如何加载log4j2日志框架的,log4j2的配置文件是如何指定的,以及最后的日志文件输出到哪里的。那么Flink_HOME/lib/log4j-slf4j-impl-2.17.1.jar是如何来的。.原创 2022-08-29 09:27:48 · 591 阅读 · 0 评论 -
【Flink源码篇】Flink提交流程之脚本运行过程解析和IDEA本地调试debug
这里我们使用local的方式进行程序的运行,会在本地启动一个MiniCluster集群,application运行完成,集群关闭。在IDEA按下Ctrl + Shift + n,弹出文件搜索框,输入CliFrontend,就可以看到我们需要的CliFrontend.java类文件,点击跳转到CliFrontend.java。按下Ctrl + F12,弹出当前类CliFrontend的文件结构,找到main方法然后点击,就可以跳转到main方法。还可以按ctrl + h查看一个抽象方法的具体实现。......原创 2022-08-19 15:48:08 · 1831 阅读 · 0 评论 -
【Flink源码篇】Flink 1.15.0源码编译
在flink-parent的pom中给id为java11-target的profile,配置activateByDefault为true,这个对IDEA调式程序是不生效的。但是我们看IDEA配置的zulu-11的jdk-unsupported模块下是有sun.misc的,但是它明确表明这是不支持的。编译后的可执行文件不是一个jar包,是一个文件夹:flink-release-1.15.0\flink-dist\target\flink-1.15.0-bin\flink-1.15.0。......原创 2022-08-19 15:44:58 · 2464 阅读 · 0 评论 -
在Centos7上搭建Flink1.15.0的Standalone分布式集群
vi /root/.bashrc(在bigdata002/3也要操作)执行测试程序(在bigdata001操作)原创 2022-07-11 09:15:17 · 848 阅读 · 0 评论 -
Flink TaskManager的Memory Model内存模型
目录1. Memory Model内存模型图1.1 Total Process Memory1.2 Total Flink Memory1.2.1 JVM Heap1.2.2 Managed Memory1.2.3 Direct Memory2. JVM内存概念2.1 Heap2.2 Off-Heap1. Memory Model内存模型图1.1 Total Process Memory作用:整个TaskManager进程的内存组成:等于Total Flink Memory + JVM Metas原创 2022-07-05 09:27:41 · 904 阅读 · 0 评论 -
Flink在IDEA中本地执行创建带有Web UI的Environment
目录1. 背景2. 解决方法1. 背景在IDEA中本地执行Flink程序,直接通过下面的方式创建的Environment,是没有Web UI的val senv = StreamExecutionEnvironment.getExecutionEnvironment2. 解决方法通过下面的方式创建带有Web UI的本地Environmentimport org.apache.flink.configuration.Configurationimport org.apache.flink.str原创 2022-06-24 09:16:16 · 2178 阅读 · 0 评论 -
Flink Table查询mysql数据转换成DataStream插入到Clickhouse
因为Flink Table并不支持插入数据到Clickhouse, 所以通过转换成DataStream的方式,将数据插入到Clickhouse。执行TableSqlTest.scala程序。pom.xml需添加以下依赖。原创 2022-05-16 09:11:08 · 971 阅读 · 0 评论 -
Flink CDC使用DataStream API方式同步数据到Iceberg数据湖
目录1. 背景2. 同步表情况3. 程序4. 结果说明1. 背景虽然使用SQL的方式进行同步非常方便。但是该方式,每向一个Iceberg目标表导入数据,都会向集群提交一个Application,非常消耗集群的资源通过DataStream API的方式,可以只检索Mysql的数据源一次,就可同步多个数据库的多个数据表。然后通过Flink的Side Output将数据分成多个流。然后再将多个流分别导入到不同的Iceberg表2. 同步表情况这里的示例只演示一个表的同步将Mysql的表d_geneal原创 2022-05-01 17:44:15 · 2383 阅读 · 10 评论 -
Flink Iceberg Connector
目录create table test(…) with (‘connector’ = ‘iceberg’, …)在Flink的当前Catalog(默认为GenericInMemoryCatalog)中,创建一个和Iceberg表对应的表映射create temporary table my_user(user_id bigint,user_name string,birthday date,country string) with ('connector'='iceberg','cata原创 2022-04-08 17:50:49 · 749 阅读 · 0 评论 -
使用Flink1.14 + Iceberg0.13构建数据湖
目录 1. Flink SQL Client配置Iceberg 2. Catalog 2.1 Hive Catalog 2.2 HDFS Catalog 3. 数据库和表相关DDL命令 3.1 创建数据库 3.2 创建表(不支持primary key等) 3.3 修改表 3.4 删除表 4. 插入数据到表 4.1 insert into 4.2原创 2022-03-29 09:21:11 · 2140 阅读 · 4 评论 -
Flink Catalog(Memory、Jdbc、Hive Catalog)的使用及Catalog SQL应用
目录1. calalog类型1.1 GenericInMemoryCatalog1.2 JdbcCatalog1.3 HiveCatalog2. catalog SQL语句使用2.1 数据库2.2 表1. calalog类型1.1 GenericInMemoryCatalog默认的类型。对meta-object名称是大小写敏感的1.2 JdbcCatalog目前只支持Postgres数据库1.3 HiveCatalog将所有的meta-object名称保存为小写有两个作用:保存Flink原创 2022-02-26 10:59:00 · 4351 阅读 · 0 评论 -
Flink SQL Client的使用
目录1. 启动SQL Client2. SQL Client结果查看模式3. 同步 / 异步执行DML语句1. 启动SQL Client先启动Flink集群[root@flink1 ~]# [root@flink1 ~]# flink-1.14.3/bin/sql-client.sh ......省略部分......Flink SQL> 目前sql-client.sh只能连接本地的集群,不能连接远程的集群2. SQL Client结果查看模式1. table模式将结果物化到内存,原创 2022-02-25 07:24:30 · 4986 阅读 · 0 评论 -
Flink Table和SQL中Table和DataStream的相互转换(fromDataStream、toChangelogStream、attachAsDataStream)
将Table和SQL的多个insert操作,转换成DataStream,同时清除statementSet,最后通过senv.execute()进行触发。原创 2022-02-25 07:22:45 · 3663 阅读 · 0 评论 -
Flink Table和SQL动态表的理解(更新流和追加流)、动态表的种类
目录1. 动态表1. 动态表对于动态表,一旦前面的基表有insert、update、delete形式的changelog stream,就用一条SQL查询的物化视图即时更新动态表。物化视图用state缓存数据。动态表数据更新方式可以为append-only、retract、upsert注意:动态表只是方便我们理解的一个逻辑表,实际并不存在...原创 2022-02-16 15:37:45 · 2950 阅读 · 0 评论 -
Flink Table和SQL的表和视图、Connectors和timestamp数据类型
目录1. catalog、表和视图2. 触发计算的API3. 查询优化1. catalog、表和视图catalog由catalog名称和数据库名称组成,默认为:default_catalog.default_database连接外部数据系统通常用createTemporaryTable,中间结果表通常用createTemporatyView,如下所示:tEnv.createTemporaryTable("table_name", tableDescriptor)tEnv.createTempora原创 2022-02-14 12:54:13 · 3396 阅读 · 0 评论 -
Flink Table和SQL中BatchMode的特点、RuntimeMode转换注意点、触发计算API、查询优化
目录1. BatchMode的特点2. BatchMode和StreamMode转换注意点3. 触发计算的API4. 查询优化1. BatchMode的特点数据是有界的insert-only流使用的Operator必须支持BatchMode不需要Watermark,执行结束时会发出一个最大时间戳的Watermark用来结束执行不需要checkpoint批量执行,结果为insert-only流2. BatchMode和StreamMode转换注意点BatchMode比StreamingMo原创 2022-02-14 12:52:33 · 760 阅读 · 0 评论 -
Flink将application发布到生产环境前需要注意的事项(setMaxParallelism、uuid、State Backend、Checkpoint interval、HA集群)
目录1. application未来能扩展到的最大parallelism2. 为DataStream的所有operator设置uuid3. 选择合适的State Backend4. 选择合适的Checkpoint时间间隔5. 搭建一个高可用HA集群,保证JobManager高可用1. application未来能扩展到的最大parallelism默认的值由application第一次启动时决定:如果所有operator的最大parallelism小于等于128,则默认值等于128否则默认值 = M原创 2022-02-13 23:29:25 · 1052 阅读 · 0 评论 -
Flink1.14版本DataSet已废弃,Streaming和Batch统一改用DataStream
目录1. Streaming模式1.1 代码Demo1.2 flink run命令2. Batch模式2.1 代码Demo2.2 flink run命令1. Streaming模式1.1 代码Demopackage apiTestimport org.apache.flink.api.common.RuntimeExecutionModeimport org.apache.flink.api.common.functions.RichMapFunctionimport org.apache.f原创 2022-02-11 17:15:54 · 1353 阅读 · 0 评论 -
Flink Table和SQL的TableEnvironment的创建、程序结构、简单使用示例
目录1. pom.xml依赖2. 使用Table处理有界和无界数据流例子3. 使用SQL处理有界和无界数据流例子3. Table API和SQL的概念3.1 TableEnvironment的创建3.2 Table API和SQL的程序结构3.3 Table API和SQL的简单使用3.3.1 聚合查询1. pom.xml依赖<dependency> <groupId>org.apache.flink</groupId> <artifactId&原创 2021-12-30 16:54:37 · 4082 阅读 · 0 评论 -
各种示例让你学会Flink复杂事件模式CEP
目录1. 什么是Flink CEP2. CEP的使用准备3. Individual Patterns(单个模式)3.1 times和oneOrMore(不连续匹配)1. 什么是Flink CEP从DataStream中检测出符合特定规则的数据结果,如下图所示DataStream中元素是各种形状,我们想检测长方形后面跟着椭圆形这样一个规则,最后得到两次检测结果2. CEP的使用准备pom.xml<dependency> <groupId>org.apache.fli原创 2021-12-20 13:51:14 · 1071 阅读 · 0 评论 -
Flink DataStream的Operator State、Keyed State、checkpoint、Savepoint、State Backends的使用和讲解
目录1. 什么operator有状态2. Operator State2.1 Broadcast state的使用2.2 List state和Union List state的使用2.3 Stateful Source Functions(List state和Union List state的特例)3. Keyed State3.1 Keyed state的使用3.2 State Time-To-Live (TTL)4. checkpoint的设置5. Savepoint6. State Backend原创 2021-12-04 22:46:57 · 859 阅读 · 0 评论 -
Flink DataStream的timestamp和watermark
目录1. 认识timestamp2. 认识watermark2.1 watermark的生成2.2 Idle Sources的处理2.3 watermark策略和kafka connector1. 认识timestamp元素的timestamp为EventTime或ProcessingTimeEventTime默认TimeCharacteristic,processing time也可以在该时间语义下工作,所有不需要执行senv.setStreamTimeCharacteristic;可以处理原创 2021-12-04 22:45:33 · 855 阅读 · 0 评论 -
Flink DataStream Keyed和Non-Keyed窗口、WindowAssigner、窗口生命周期、窗口函数、迟到数据和窗口结果的处理
目录1. Keyed窗口(window)、Non-Keyed窗口(windowAll)2. WindowAssigner(基于时间)2.1 必须指定Time.hours(-8L)的offset2.2 Tumbling Windows2.3 Sliding Windows2.4 Session Windows2.5 Global Windows3. WindowAssigner(基于数据)4. 认识窗口的生命周期5. 认识窗口函数5.1 ReduceFunction和ProcessWindowFunction原创 2021-11-27 07:30:30 · 1162 阅读 · 0 评论 -
Flink DataStream的(任务、算子链和资源组)、ProcessFunction、迭代运算
目录1. 任务、算子链和资源组2. ProcessFunction3. 迭代运算3.1 iterate3.2 iterateWithTermination3.3 iterateDelta3.4 iterate(DataStream)1. 任务、算子链和资源组Task Slot相当于线程Task Slot的数量等于最大parallelism可以通过-p参数进行指定Task Slot的数量自定义算子链接关系package devBaseimport org.apache.flink.str原创 2021-11-27 07:27:00 · 1146 阅读 · 0 评论 -
Flink DataStream的多流、键控流、窗口、连接、物理分区转换算子的使用
目录1. 多流转换算子1.1 union1.2 connect2. 键控流转换算子2.1 keyBy和min、max、sum、minBy、maxBy2.2 keyBy和reduce3. 窗口转换算子3.1 WindowedStream.apply3.2 AllWindowedStream.apply3.3 DataStream.coGroup(DataStream)4. 连接转换算子4.1 窗口连接4.2 间隔连接5. 物理分区算子1. 多流转换算子1.1 unionpackage devBase原创 2021-11-20 22:35:31 · 1369 阅读 · 0 评论 -
Flink DataStream的wordCount、数据源和Sink、Side Outputs、两阶段提交(two-phase commit, 2PC)
目录1. pom.xml的依赖2. 使用DataStream实现word count2.1 不含window窗口的word count2.2 含window窗口的word count3. DataStream API的数据源3.1 基于文件3.2 基于socket3.3 基于集合4. DataStream API的数据Sink接收器5. Side Outputs6. 两阶段提交(two-phase commit, 2PC)1. pom.xml的依赖 <dependency>原创 2021-11-20 22:33:47 · 1510 阅读 · 0 评论 -
Flink Accumulators累加器、Counters计数器的使用和实现自定义Accumulators、Counters
目录1. 自定义Accumulators1. 自定义Accumulators自定义的方式有两种,两种之间除了要求的数据类型不一样,其它都一样Accumulator<V, R>: 其中V指add的数据的类型、R指结果的类型SimpleAccumulator<T>: 其中T指add和结果的数据的类型...原创 2021-11-13 07:37:32 · 1775 阅读 · 0 评论 -
向Flink传递自定义参数的3种方式(withParameters、setGlobalJobParameters、ParameterTool)
目录1. devBase\WithParameters.scala2. devBase\GlobalJobParameters.scala3. devBase\ParameterToolTest.scala1. devBase\WithParameters.scalapackage devBaseimport org.apache.flink.api.common.functions.RichMapFunctionimport org.apache.flink.api.scala.{DataSet原创 2021-11-13 07:35:39 · 4495 阅读 · 0 评论 -
Flink生成执行计划图并进行可视化
打开执行计划图Web界面复制上面println(senv.getExecutionPlan)打印的执行计划JOSN粘贴,然后点击Draw按钮,如下图所示:4. 生成的执行计划图,如下图所示:原创 2021-11-05 18:18:35 · 1932 阅读 · 0 评论 -
Flink的数据类型和序列化(Scala版)
目录1. 数据类型1.1 Tuple和case class1.2 POJOs类1.3 原生数据类型1.4 普通class1.5 Values1.6 Hadoop Writables1.7 Special Types2. TypeInformation类2.1 创建TypeInformation和TypeSerializer2.2 泛型参数用TypeInformation表示1. 数据类型1.1 Tuple和case classpackage devBaseimport org.apache.fli原创 2021-11-05 18:16:36 · 1736 阅读 · 0 评论