![](https://img-blog.csdnimg.cn/20200712003229745.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Flink源码阅读系列
文章平均质量分 73
Flink源码阅读系列
优优我心
这个作者很懒,什么都没留下…
展开
-
Flink源码阅读之JDBC Connector
JDBC connector的入口JdbcDynamicTableFactory,提供了source和sink的支持,详细内容参考官网。Source在Factory类中通过createDynamicTableSource来创建JdbcDynamicTableSource,并将需要的所有参数传递过去。jdbc作为source有两种用途:1.数据源使用Scan 2.维表关联使用Lookup。Scan通过JdbcRowDataInputFormat来实现数据读取,同时支持了列裁剪,limit下推。注意原创 2021-02-18 16:56:53 · 1818 阅读 · 1 评论 -
Flink源码阅读之SPI在Flink中的应用
SPISPI是Service Provider Interface的缩写,是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。有关SPI的详细内容请自行百度,这里不赘述。使用SPI需要遵循的规范:当服务提供者提供了接口的一种具体实现后,在jar包的META-INF/services目录下创建一个以“接口全限定名”为命名的文件,内容为实现类的全限定名;接口实现类所在的jar包放在主程序的classpath中;主程序通过java.util.ServiceLoder动态装载实现模块,它通过原创 2021-02-10 15:30:18 · 797 阅读 · 2 评论 -
Flink源码阅读系列之Kafka Connector
本文基于Flink 1.12版本,目前这个版本已经不需要再指定具体的kafka版本了。本文从Sql角度分析一下,创建一个kafka的table之后,flink是如何从kafka中读写数据的。入口依然是通过SPI机制找到kafka的factory(KafkaDynamicTableFactory),Flink中大量使用了SPI机制,有时间再整理一篇SPI在Flink中的应用。话不多说,进入正题。Source通过createDynamicTableSource方法创建 kafka source,这里主原创 2021-02-08 17:57:27 · 732 阅读 · 0 评论 -
Flink实战之Flink必须依赖Hadoop2.7+?
====原创 2020-10-22 20:51:46 · 4779 阅读 · 0 评论 -
Flink源码阅读之FileSystem Connector
代码在flink-table-runtime-blink模块,用户指南参考官网.目前是旧的实现方式,将会按FLIP-95重新实现FLINK-19336入口类FileSystemTableFactory,如何做Factory discover的可以参考之前的博文,这里就不赘述了。Sink构造FileSystemTableSink对象,传入相关属性参数public TableSink<RowData> createTableSink(TableSinkFactory.Context con原创 2020-10-21 00:51:33 · 1119 阅读 · 1 评论 -
Flink源码阅读之Sql-Client的执行原理
前言sql-cli相信大家都用过,通过sql-client.sh embedded启动就会进入交互界面,每条sql都可以单独执行。在功能调试时非常方便,还有进入界面的那个大松鼠相当可爱。脚本先上脚本代码#!/usr/bin/env bash################################################################################# Licensed to the Apache Software Foundation (ASF原创 2020-09-12 01:48:48 · 965 阅读 · 0 评论 -
Flink源码阅读之flink run 背后做了什么
我们经常使用flink run命令提交一个jar任务,比如提交到yarn集群,那么执行这个命令的背后flink都做了什么,能将我们的job提交到集群呢。对此我有兴趣一探究竟。flink脚本#!/usr/bin/env bash################################################################################# Licensed to the Apache Software Foundation (ASF) under原创 2020-08-10 01:46:32 · 390 阅读 · 0 评论 -
Flink源码阅读之Flinksql执行流程
基本结构Planner接口负责sql解析、转换成TransformationExecutor接口负责将planner转换的Transformation生成streamGraph并执行public interface Planner { /** * Retrieves a {@link Parser} that provides methods for parsing a SQL string. * * @return initialized {@link Parser} */原创 2020-07-03 17:35:36 · 1955 阅读 · 0 评论 -
Flink源码阅读之Checkpoint执行过程
前言对应Flink来说checkpoint的作用及重要性就不细说了,前面文章写过checkpoint的详细过程和checkpoint周期性触发过程。不熟悉checkpoint大概过程的同学可以查阅。本篇我们在一起根据源码看下checkpoint的详细执行过程。checkpoint过程源头我们都知道checkpoint的周期性触发是由jobmanager中的一个叫做CheckpointCoordinator角色发起的,具体执行在CheckpointCoordinator.triggerCheckpo原创 2020-06-18 17:13:40 · 655 阅读 · 0 评论 -
Flink源码阅读之Timer定时器
概述在window执行过程篇也提到了定时器的注册,在flink中有很多定时器的使用,比如窗口trigger的触发、watermark的周期生成,其实定时器底层是依赖jdk的ScheduledThreadPoolExecutor来调度的。入口通过TimerService 接口注册和删除定时器。public interface TimerService { long currentProcessingTime(); long currentWatermark(); void registerPr原创 2020-06-10 19:53:59 · 624 阅读 · 0 评论 -
Flink源码阅读之Checkpoint周期触发过程
Flink的checkpoint原理就不说了,官网以及博客都有说明,有兴趣的同学可以自行查阅。本文主要从源码层面分析一下checkpoint是如何周期性触发的。分析首先通过如下配置启用CheckPointenv.enableCheckpointing(1000);不设置,则默认CheckPoint间隔为-1,即不启用CheckPoint/** Periodic checkpoint triggering interval. */private long checkpointInterval原创 2020-06-05 16:01:02 · 694 阅读 · 0 评论 -
Flink源码阅读之Watermark对齐
watermark的产生我们知道watermark的生成有两种方式:1.在sourceFunction中通过emitWatermark方法生成2.通过assignTimestampsAndWatermarks抽取timestamp并生成watermarkwatermark的流转watermark会像普通的element和stream status一样随着stream流不断的向下游流转watermark的处理前面文章写过job的执行过程,描述了数据怎么被处理的,所有流数据被封装成StreamEl原创 2020-05-23 16:20:44 · 826 阅读 · 0 评论 -
Flink源码阅读之AssignerWithPeriodicWatermarks和AssignerWithPunctuatedWatermarks的区别
从提交程序到执行到用户自定义函数的执行过程引用一下https://blog.csdn.net/zhangjun5965/article/details/88944774从OneInputStreamTask入口,init()方法会初始化StreamInputProcessor对象,public void init() throws Exception { StreamConfig c...原创 2019-08-28 10:02:06 · 5287 阅读 · 4 评论 -
Flink源码阅读之周期性watermark生成逻辑分析
在我们的main函数中会设置时间特性和生成水印的时间间隔env.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime);env.getConfig().setAutoWatermarkInterval(200L);不设置的话默认为public void setStreamTimeCharacteristic(TimeCh...原创 2019-12-18 18:00:22 · 754 阅读 · 0 评论 -
Flink源码阅读之基于Flink1.10的任务提交流程
Flink在1.10版本对整个作业提交流程有了较大改动,详情请见FLIP-73。本文基于1.10对作业提交的关键流程进行分析,不深究。入口: 依旧是main函数最后env.execute();public JobExecutionResult execute(String jobName) throws Exception { Preconditions.checkNotNull(jobN...原创 2020-04-16 20:01:08 · 1723 阅读 · 0 评论 -
Flink源码阅读之基于Flink1.10的任务执行流程
在基于Flink1.10的任务提交流程中分析了任务的提交流程。本文基于前文基础上进行job执行流程的源码分析。前文这里已经已经说明,执行流程就从resetAndStartScheduler()开始private Acknowledge startJobExecution(JobMasterId newJobMasterId) throws Exception { //....... ...原创 2020-04-16 23:13:02 · 797 阅读 · 0 评论 -
Flink源码阅读之Window执行过程
前面文章介绍了Flink的任务执行流程,每一个operator都会有对应的Task去执行,如果程序中使用了window的话,当程序执行到window的task时就会调用WindowOperator中的实现。 public void processElement(StreamRecord<IN> element) throws Exception { //根据元素划分窗口 final Collection<W> elementWindows = windowAssigner.原创 2020-05-12 13:34:47 · 517 阅读 · 0 评论