前面介绍了批量处理的WorkCount是如何执行的 <从flink-example分析flink组件(1)WordCount batch实战及源码分析> <从flink-example分析flink组件(2)WordCount batch实战及源码分析----flink如何在本地执行的?> 这篇从WordCount的流式处理开始 /** * Implements the "WordCount" program that computes a simple wor…
先上一张图整体了解Flink中的反压   可以看到每个task都会有自己对应的IG(inputgate)对接上游发送过来的数据和RS(resultPatation)对接往下游发送数据, 整个反压机制通过inputgate,resultPatation公用一个一定大小的memorySegmentPool来实现(Flink 中memorySegment作为内存使用的抽象,类比bytebuffer), 公用一个pool当接收上游数据时Decoder,往下游发送数据时Encoder,都会向pool中请求…
TaskManager接收到来自JobManager的jobGraph转换得到的TDD对象,启动了任务,在StreamInputProcessor类的processInput()方法中 通过一个while(true)中不停的拉取上游的数据,然后调用streamOperator.processElement(record)调用用户实现的方法去处理数据拉取的数据 首先先来看下这个operator对象 然后看看OneInputStreamOperator类的UML 这里所有的实现类没有全部列出,只列了…
[源码分析] 带你梳理 Flink SQL / Table API内部执行流程 目录 [源码分析] 带你梳理 Flink SQL / Table API内部执行流程 0x00 摘要 0x01 Apache Calcite 1. Calcite 概念 2. Calcite 处理流程 0x02 Flink SQL综述 1. Flink关系型API执行原理 2. Flink Sql 执行流程 3. Flink Table Api 执行流程 4. Flink Table/SQL 执行流程的异同 0x03…
原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483692&idx=1&sn=18cddc1ee0decfe24323dafdb05a048d 本篇介绍一下如何从源码构建Flink,构建Flink源码是学习和研究Flink源码的基础,有助于更好的了解Flink. 环境准备 环境/软件 版本 备注 OS Ubuntu 14.04 LTS Maven 3.0.5 Java 1.8.0_161 Flink 1…
转发请注明原创地址http://www.cnblogs.com/dongxiao-yang/p/8260370.html flink checkpoint 源码分析 (一)一文主要讲述了在JobManager端定时生成TriggerCheckpoint的代码部分,本文继续研究下TaskManager端如何处理收到的TriggerCheckpoint消息并执行对应的备份操作. TriggerCheckpoint消息进入TaskManager的处理路径为 handleMessage -> handl…
前面说到了  Flink的JobManager启动(源码分析)  启动了TaskManager 然后  Flink的Job启动JobManager端(源码分析)  说到JobManager会将转化得到的TDD发送到TaskManager的RPC 这篇主要就讲一下,Job在TaskManager端是如何启动的 先来看一下,TaskManager端用来接收JobManager发送过来的TDD对象的RPC接口 在TaskExecutor.java中 这个方法用于接收了一个TaskDeploymentD…
前几天在社区群上,有人问了一个问题 既然上游最小水印会决定窗口触发,那如果我上游其中一条流突然没有了数据,我的窗口还会继续触发吗? 看到这个问题,我蒙了???? 对哈,因为我是选择上游所有流中水印最小的一条作为当前水印时间,那万一最小水印的那条流突然里面没有数据了 那我的最小水印不就一直不往前走了,一直是那个没有数据流的水印了吗,因为它的水印最小,而且一直不会更新了 ????然后窗口再也不触发???? 思考了一下,发现好像也对,当我有一个上游的水印没来的时候,我就等着呗,谁知道他是不是延迟了 但…
[源码分析] 从源码入手看 Flink Watermark 之传播过程 0x00 摘要 本文将通过源码分析,带领大家熟悉Flink Watermark 之传播过程,顺便也可以对Flink整体逻辑有一个大致把握. 0x01 总述 从静态角度讲,watermarks是实现流式计算的核心概念:从动态角度说,watermarks贯穿整个流处理程序.所以为了讲解watermarks的传播,需要对flink的很多模块/概念进行了解,涉及几乎各个阶段.我首先会讲解相关概念,然后会根据一个实例代码从以下几部分来…
[源码分析] 从实例和源码入手看 Flink 之广播 Broadcast 0x00 摘要 本文将通过源码分析和实例讲解,带领大家熟悉Flink的广播变量机制. 0x01 业务需求 1. 场景需求 对黑名单中的IP进行检测过滤.IP黑名单的内容会随时增减,因此是可以随时动态配置的. 该黑名单假设存在mysql中,Flink作业启动时候会把这个黑名单从mysql载入,作为一个变量由Flink算子使用. 2. 问题 我们不想重启作业以便重新获取这个变量.所以就需要一个能够动态修改算子里变量的方法. 3…
[源码分析] 从FlatMap用法到Flink的内部实现 0x00 摘要 本文将从FlatMap概念和如何使用开始入手,深入到Flink是如何实现FlatMap.希望能让大家对这个概念有更深入的理解. 0x01 Map vs FlatMap 首先我们先从概念入手. 自从响应式编程慢慢壮大以来,这两个单词现在越来越被大家熟悉了.前端能见到它们的身影,后台也能见到:安卓里面有,iOS也有.很多兄弟刚遇到它们时候是懵圈的,搞不清楚之间的区别.下面我就给大家简单讲解下. map 它把数组流中的每一个值,…
[源码分析]从"UDF不应有状态" 切入来剖析Flink SQL代码生成 (修订版) 目录 [源码分析]从"UDF不应有状态" 切入来剖析Flink SQL代码生成 (修订版) 0x00 摘要 0x01 概述结论 1. 问题结论 2. 问题流程 0x02 UDX 1. UDX (自定义函数) 2. 自定义标量函数 Scalar Functions (UDF) 3. 自定义聚合函数(UDAF) 4. 自定义表值函数(UDTF) 5. RichFunction 0x03…
本文源码基于flink 1.14 被同事问到几个关于AsyncIO和lookUp维表的问题所以翻了下源码,从源码的角度解惑这几个问题 对于AsyncIO不了解的可以看看之前写的这篇  <Flink中异步AsyncIO的实现 (源码分析)> 问题一:AsyncIO 有(排序 / 非排序) 模式,非排序模式数据会乱序,那水印waterMarker会乱序吗 ??? 不想看源码的先直接给出答案 :不会乱序,接收到水印数据后非排序模式会,直接往下游发送waterMarker 问题二:LookUp维表jo…
Flink通过全局快照能保证内部处理的Exactly-once语义 但是端到端的Exactly-once还需要下游数据源配合,常见的通过幂等或者二阶段提交这两种方式保证 这里就来分析一下Sink二阶段提交的Flink源码是如何实现的 本文源码基于Flink1.14 老版本的话看TwoPhaseCommitSinkFunction,现在用SinkWriter逻辑都是差不多的 先来看下我们的主角  org.apache.flink.streaming.runtime.operators.sink.S…
本文源码基于flink1.14 在帮助用户排查任务的时候,经常会发现部分task处理的慢,在Exactly once语义时需要等待快照的对齐而白白柱塞的情况 在flink1.11版本引入了非对齐的checkpoint,来解决这种柱塞问题,所以来看看这个新特性的源码是如何实现的 先看下官网的图来总的说下实现原理,再来看看源码 flink是基于Chandy-Lamport算法来实现全局快照的,其核心就是在数据中间穿插barrier 当一个task上游同一批次所有的barrier到齐时,就可以触发快照…
http://vinoyang.com/ http://wuchong.me Apache Flink源码解析之stream-source https://yq.aliyun.com/articles/259154 Flink - watermark https://yq.aliyun.com/articles/73191 http://wuchong.me/blog/2016/05/04/flink-internal-how-to-build-streamgraph/ http://vinoy…
整个Flink集群的角色分为Jobmanager和TaskManager 以Standalone为例来看一下脚本里面是怎样启动集群的 找到源码的dist这里面包含了启动的脚本文件 standalone模式下我们通过start-cluster.sh这个脚本启动 来看下里面具体做了什么 在最后调用了jobmanager.sh start 这个脚本和config.sh  中的TMSlaves 这个方法,分别启动了jobmanager和taskmanager 先看一下Jobmanager 在jobman…
通过前面的文章了解到 Driver将用户代码转换成streamGraph再转换成Jobgraph后向Jobmanager端提交 JobManager启动以后会在Dispatcher.java起来RPC方法submitJob(jobGraph),用于接收来自Driver转化得到的JobGraph来启动任务 具体来看jobGraph提交到JobManager的submitJob方法 前面都是一些调用链没有什么好讲的,最后到createJobManager( )方法这里 先看一下1,创建了一个jobm…
在用户代码中,我们设置生成水印和事件时间的方法assignTimestampsAndWatermarks()中这里有个方法的重载 我们传入的对象分为两种 AssignerWithPunctuatedWatermarks(可以理解为每条数据都会产生水印,如果不想产生水印,返回一个null的水印) AssignerWithPeriodicWatermarks(周期性的生成水印) 来看一下源码中是如何实现这两种水印的 二话不说打开org.apache.flink.streaming.runtime.o…
上一篇<Flink接收端反压机制>说到因为Flink每个Task的接收端和发送端是共享一个bufferPool的,形成了天然的反压机制,当Task接收数据的时候,接收端会根据积压的数据量以及可用的buffer数量(可用的memorySegment数)来决定是否向上游发送Credit(简而言之就是当我还有空间的时候,我向上游也就是上一个Task的发送端发送一个ack消息,表明我还有空间你可以发送数据过来,如果下游没有给你Credit就证明下游已经堵了,没有空间了也就不能继续往下游发送了) 现在从…
先上张图整体了解Flink中的异步io 阿里贡献给flink的,优点就不说了嘛,官网上都有,就是写库不会柱塞性能更好 然后来看一下, Flink 中异步io主要分为两种 一种是有序Ordered 一种是无序UNordered 主要区别是往下游output的顺序(注意这里顺序不是写库的顺序既然都异步了写库的顺序自然是无法保证的),有序的会按接收的顺序继续往下游output发送,无序就是谁先处理完谁就先往下游发送 两张图了解这两种模式的实现 有序:record数据会通过异步线程写库,Emitter是…
其实CEP复杂事件处理,简单来说你可以用通过类似正则表达式的方式去表示你的逻辑,表现能力非常的强,用过的人都知道 开篇先偷一张图,整体了解Flink中的CEP中的  一种重要的图  NFA非确定有限状态机 FlinkCEP在运行时会将用户的逻辑转化成这样的一个NFA Graph (nfa对象) graph 中包含状态(Flink中State对象),以及连接状态的边(Flink中StateTransition对象) 当从一个State跳变到另一个State时需要通过一条边StateTransiti…
流式计算中处理延迟是一个非常重要的监控metric flink中通过开启配置   metrics.latency.interval  来开启latency后就可以在metric中看到askManagerJobMetricGroup/operator_id/operator_subtask_index/latency指标了 如果每一条数据都打上时间监控 输出时间- 输入时间,会大量的消耗性能 来看一下flink自带的延迟监控是怎么做的 其实也可以想到原理很简单,就是在source周期性的插入一条特…
本篇文章首发于头条号Flink程序是如何执行的?通过源码来剖析一个简单的Flink程序,欢迎关注头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_tech)获取更多干货,也欢迎关注我的CSDN博客. 在这之前已经介绍了如何在本地搭建Flink环境和如何创建Flink应用和如何构建Flink源码,这篇文章用官方提供的SocketWindowWordCount例子来解析一下一个常规Flink程序的每一个基本步骤. 示例程序 public class SocketWi…
前言 在Flink原理——容错机制一文中,已对checkpoint的机制有了较为基础的介绍,本文着重从源码方面去分析checkpoint的过程.当然本文只是分析做checkpoint的调度过程,只是尽量弄清楚整体的逻辑,没有弄清楚其实现细节,还是有遗憾的,后期还是努力去分析实现细节.文中若是有误,欢迎大伙留言指出! 本文基于Flink1.9. 1.参数设置 1.1 有关checkpoint常见的参数如下: StreamExecutionEnvironment env = StreamExecut…
Calcite作为大数据领域最常用的SQL解析引擎,支持Flink , hive,  kylin , druid等大型项目的sql解析 同时想要深入研究Flink sql源码的话calcite也是必备技能之一,非常值得学习 我们内部也通过它在做自研的sql引擎,通过一套sql支持关联查询任意多个异构数据源(eg : mysql表join上 hbase表在做一个聚合计算) 因为calcite功能比较多,本文主要还是从calcite重要的主流程源码入手,主要侧重在VolcanoPlanner的优化器…
本文源码基于flink1.14 上一篇文章分析了<flink的minibatch微批处理>的源码 乘热打铁分析一下两阶段聚合的源码,因为使用两阶段要先开启minibatch,至于为什么后面会分析到 两阶段聚合的原理,还是简单提一下 如下图,当聚合发生热点的时候,可以在聚合前,先进行一个本地的聚合,先减小数据量,后接正常的数据交换以后聚合,来达到一个解热点的目的, 先来看下两阶段聚合的Calcite优化rule 看下什么情况会匹配上 并且在onmatch方法中会判断开启了minibatch,以及…
http://vinoyang.com/2016/05/05/flink-stream-source/ http://vinoyang.com/2016/12/28/flink-runtime-communicate-api/ http://vinoyang.com/2017/01/26/flink-runtime-specific-task/ http://chenyuzhao.me/2017/02/09/flink%E7%BD%91%E7%BB%9C%E6%A0%88/ http://che…
转发请注明原创地址http://www.cnblogs.com/dongxiao-yang/p/8029356.html checkpoint是Flink Fault Tolerance机制的重要构成部分,flink checkpoint的核心类名为org.apache.flink.runtime.checkpoint.CheckpointCoordinator. 定期产生的checkpoint事件 flink的checkpoint是由CheckpointCoordinator内部的一个time…
上一章<windows下flink示例程序的执行> 简单介绍了一下flink在windows下如何通过flink-webui运行已经打包完成的示例程序(jar),那么我们为什么要使用flink呢? flink的特征 官网给出的特征如下: 1.一切皆为流(All streaming use cases ) 事件驱动应用(Event-driven Applications) 流式 & 批量分析(Stream & Batch Analytics) 数据管道&ETL(Data…