
Flink
文章平均质量分 93
flink实时流式计算,实时仓库
KK架构
天道酬勤
展开
-
Apache Flink 水印的工作机制详解与源码阅读
本文主要介绍了 Flink 水印的产生背景,工作原理,api以及部分源码阅读,阅读文本可以更加深刻的了解水印的工作方式。原创 2022-12-10 18:50:23 · 1564 阅读 · 0 评论 -
高性能异步编程和实时流模型的关系
本次我们来实现一个支持百万并发连接数的采集服务器,并且找到异步+ NIO 的编程方式和实时流模型的那些千丝万缕的联系。一、需求说明简单的需求功能如下:数据采集是一个 web 服务器,可以接收 http 请求传上来的事件,事件是 json 格式的;收到之后,进行解码,校验字符串是否可以解码成 json 对象;对消息进行抽取、清洗、转化;最后发送到 kafka 中。性能要求:支持百万并发连接数;对 CPU 资源和 IO 资源充分利用;二、实现方案剖析网页和手机端会产生一些原创 2021-03-05 21:30:43 · 378 阅读 · 0 评论 -
Flink 源码阅读 flink-client 模块实现原理与源码解析
一、我们本次的目的是什么?这次我们的目的是,在本地的 IDEA 中去 debug flink-clients 代码,然后远程提交给 flink standalone 集群上去执行,看一看 flink 客户端在提交代码之前都干了什么。就像下面这样:很简单是不是,瞬间自信心爆棚!在开始之前,我想要提两个发人深省的问题,你平时一定没有考虑过:问题 1:用户代码如何变成 DAG 图DataStream<Tuple2<String, Integer>> counts = te原创 2021-02-20 08:49:33 · 962 阅读 · 0 评论 -
Flink 源码阅读,用户代码生成 StreamGraph 过程
一、絮叨两句新的一年又来了,不知道大家有没有立几个每年都完不成的 FLAG ?反正我立了,我今年给自己立的 FLAG 是大致阅读大数据几个框架的源码。为什么要“大致”阅读,因为这些牛逼的框架都是层层封装,搞懂核心原理已经是很不易,更别谈熟读源码了。但是目标还是要有的,我也不要当一条咸鱼。之前几篇源码阅读的文章,不知道大家有没有亲自动手打开 Idea 去试一试,这里我再贴一下文章链接,大家可以再回顾一下。本次,我们来聊一聊,我们自己写的代码是如何变成 StreamGraph 的。二、引出问题开原创 2021-02-20 08:45:55 · 836 阅读 · 1 评论 -
阅读 Flink 源码前必知必会 - SPI 和 ClassLoader
一、本文大纲二、ClassLoader 类加载器1、Java 中的类加载器以及双亲委派机制Java 中的类加载器,是 Java 运行时环境的一部分,负责动态加载 Java 类到 Java 虚拟机的内存中。有了类加载器,Java 运行系统不需要知道文件与文件系统。那么类加载器,什么类都加载吗?加载的规则是什么?Java 中的类加载器有四种,分别是:BootstrapClassLoader,顶级类加载器,加载JVM自身需要的类;ExtClassLoader,他负责加载扩展类,如 jre/li原创 2021-01-27 21:31:01 · 613 阅读 · 0 评论 -
Flink 源码阅读环境搭建并调试 Flink-Clients 模块
本文大纲一、Flink 官方文档这么全面,为什么还要读 Flink 源码读文档和读源码的目的是不一样的,就拿 Apache Flink 这个项目来说,如果你想知道 Flink 的使用功能,设计思想,实现原理,看官方文档就足够了;如果你想了解的就是具体细节,比如说 StreamGraph 是怎么生成的或者是 Exactly Once 究竟如何实现的,那么就需要去阅读源码了。关键是看你的目的是什么,如果你想了解思想,经验等看文档就够了,因为文档是人写给人的;如果你想了解具体细节,那应该去看源码,因为源码原创 2021-01-28 22:04:32 · 2276 阅读 · 1 评论 -
阅读 Flink 源码前必会的知识 - 命令行解析库 Apache Commons Cli
一、介绍一下 Apache Commons Cli,有一个感官的认识我们在使用一些开源项目时,会敲一些命令,有简单的,比如 hadoop version;有复杂的,比如 flink run … ,hdfs dfs -ls ,等等。一般这些命令后面有很多的参数,特别是在往 Yarn 上提交 Flink 任务时,后面要设置很多属性。这些命令实际上最终还是会启动虚拟机来执行的,如果你用 vi 看过这些命令,就可以发现,最终都是调用的 java xxxx,来执行的。那么命令后面的参数会传到 main 方法里,然原创 2021-02-02 20:48:09 · 332 阅读 · 0 评论 -
Flink 源码阅读 Client 实现原理与源码解析
一、我们本次的目的是什么?这次我们的目的是,在本地的 IDEA 中去 debug flink-clients 代码,然后远程提交给 flink standalone 集群上去执行,看一看 flink 客户端在提交代码之前都干了什么。就像下面这样:很简单是不是,瞬间自信心爆棚!在开始之前,我想要提两个发人深省的问题,你平时一定没有考虑过:问题 1:用户代码如何变成 DAG 图DataStream<Tuple2<String, Integer>> counts = t.原创 2021-02-04 21:55:41 · 521 阅读 · 0 评论 -
Flink SQL 核心概念剖析与编程案例实战
本次,我们从 0 开始逐步剖析 Flink SQL 的来龙去脉以及核心概念,并附带完整的示例程序,希望对大家有帮助!本文大纲一、快速体验 Flink SQL为了快速搭建环境体验 Flink SQL,我们使用 Docker 来安装一些基础组件,包括 zk 和 kafka,如果你有这个环境,可以略过了。在 Centos 7 上安装 Docker 环境,具体见这个链接,此处就不细说了:https://blog.youkuaiyun.com/qq_24434251/article/details/105712044原创 2021-01-07 23:38:07 · 732 阅读 · 0 评论 -
Flink + Iceberg 的数仓增量生产 ETL 以及在美团的落地实践
一、美团数仓架构图如上图,是美团最新的数仓架构图。整个架构图分为三层,从下往上看,最下面一层是数据安全,包括受限域认证系统、加工层权限系统,应用层权限系统,安全审计系统,来保证最上层数据集成与处理的安全;中间一层是统一的元数据中心和全链路血缘,覆盖了全链路的加工过程;最上层根据数据的流向,分成数据集成,数据处理,数据消费,数据应用,四个阶段;在数据集成阶段,对于不同的数据来源(包括用户行为数据,日志数据,DB 数据,文件数据),都有相对应的数据集成系统,把数据收集到统一的存储之中,包括 Kafk原创 2020-12-21 09:44:31 · 1768 阅读 · 0 评论 -
Flink 核心组件 内部原理 多图剖析
一、Flink 整体架构Flink 集群整体遵循 Master ,Worker 这样的架构模式。JobManager 是管理节点,有以下几个职责:接受 application,包含 StreamGraph(DAG),JobGraph(优化过的)和 JAR,将 JobGraph 转换为 Execution Graph申请资源,调度任务,执行任务,保存作业的元数据,如Checkpoint协调各个 Task 的 Checkpoint;TaskManager 是工作节点,负责数据交换,跑多个线程的原创 2020-12-19 09:31:35 · 818 阅读 · 3 评论 -
Flink Checkpoint 原理及在 1.11 版本的优化
一、什么是 checkpoint上次发文,提到了 Flink 可以非常高效的进行有状态流的计算,通过使用 Flink 内置的 Keyed State 和 Operator State,保存每个算子的状态。默认情况下,状态是存储在 JVM 的堆内存中,如果系统中某个环节发生了错误,宕机,这个时候所有的状态都会丢失,并且无法恢复,会导致整个系统的数据计算发生错误。此时就需要 Checkpoint 来保障系统的容错。Checkpoint 过程,就是把算子的状态周期性持久化的过程。在系统出错后恢复时,就可以从原创 2020-12-15 00:01:06 · 280 阅读 · 0 评论 -
Flink 作业链和资源
1 Flink 的角色Flink 在运行时,主要由两种角色组成 JobManager 和 TaskManager。JobManager主要是负责接受客户端的 Job,调度 Job,协调 checkpoints,故障恢复等。TaskManager主要是负责执行具体的 Task。JobManager 和 TaskManager 的通信类似于 Spark 早期版本使用的 actor系统。如下图:2 任务链首先,Flink 中的 Task 是什么?Flink 中的每个算子都可以设置并行度,每个算子的原创 2020-12-16 09:06:47 · 291 阅读 · 0 评论 -
Flink 窗口函数(window function) 详解
一、概念在定义好了窗口之后,需要指定对每个窗口的计算逻辑。Window Function 有四种:ReduceFunctionAggregateFunctionFoldFunctionProcessWindowFunction前面两个会执行的更加有效率,因为在元素到来时,Flink 可以增量的把元素聚合到每个窗口上。ProcessWindowFunction 提供了一个 Iterable 迭代器,可以获得一个窗口的所有元素以及元素的元数据信息。ProcessWindowFunction 执行效原创 2020-12-06 13:16:21 · 2544 阅读 · 3 评论 -
Flink Session Window 六个灵魂拷问
一、什么是flink 的 session window与翻滚窗口(Tumbling Window)和滑动窗口(Sliding Window)相比,会话窗口(Session Window)不重叠并且没有固定的开始和结束时间。当会话窗口在一段时间内没有接收到元素时,即当发生不活动的间隙时,会话窗口关闭会话窗口分配器可以设置静态会话间隙和动态会话间隙二、实际应用问题每个用户在一个独立的session中平均页面访问时长,session 和 session 的间隔时间是15分钟我们使用 flink 来解原创 2020-12-06 13:13:38 · 243 阅读 · 0 评论 -
Flink 彻底理解 window(窗口)
一、描述Window 是处理无限流的核心。Flink 认为 Batch 是 Streaming 的一个特例,所以 Flink 底层的引擎是一个流式引擎,在上面实现了流处理和批处理。而窗口(Window)就是从Streaming 到 batch 的一个桥梁。Flink 提供了非常完善的窗口机制,这是 Flink 最大的亮点之一(其他的亮点包括消息乱序处理和 Checkpoint 机制)二、窗口的生命周期窗口的生命周期,就是创建和销毁。窗口的开始时间和结束时间是基于自然时间创建的,比如指定一个5s的窗原创 2020-12-06 13:10:24 · 833 阅读 · 0 评论 -
Flink 16种数据转换操作,满足所有数据处理场景
数据转换(Transformation),即通过从一个或多个 DataStream 生成新的DataStream 的过程,是主要的数据处理的手段。Flink 提供了多种数据转换操作,基本可以满足所有的日常使用场景。所有的转换操作可分为:单 Single-DataStream多 Multi-DataStream物理分区三种类型今天我们讨论 单 DataStream 转换 的场景MapMap 操作对 DataStream[ T ] 数据进行处理,常用作对数据集的清洗和转换。如下代码展示了,把原创 2020-12-06 13:05:51 · 1120 阅读 · 1 评论 -
Flink DataStream 内置数据源和外部数据源
内置数据源(1)文件数据源在 StreamExecutionEnvironment 中,可以使用 readTextFile 方法直接读取文本文件,也可以使用 readFile 方法通过指定文件 InputFormat 来读取特定数据类型的文件,如 CsvInputFormat。下面的代码演示了使用 readTextFile 读取文本文件import org.apache.flink.streaming.api.scala._object Flink9 extends App { val e原创 2020-12-06 13:02:59 · 427 阅读 · 0 评论 -
Flink 的 TypeInformation
在 Flink 中,数据类型的描述信息都是定义在 TypeInformation 中,比较常用的 TypeInformatica 有 BasicTypeInfo、TupleTypeInfo、CaseClassTypeInfo、PojoTypeInfo 等Flink 为何要别出心裁,自己搞一套类型系统呢?原因有二一是做类型检查,Flink支持比较灵活的基于field的join或group,需要先检查这个field是否可以作为key,或这个field是否可以做join或group,二是更加利于存储,F原创 2020-12-06 12:49:02 · 4972 阅读 · 0 评论 -
Flink 程序结构
我们还是从wordcount程序说起下面是一段使用 Flink 实现的 WordCount 代码import org.apache.flink.streaming.api.scala._object WordCount { def main(args: Array[String]): Unit = { val env = StreamExecutionEnvironment.getExecutionEnvironment val text = env.readTextFi原创 2020-12-06 12:45:49 · 1072 阅读 · 0 评论 -
Flink 编程接口
1 数据集类型现实世界中,所有的数据都是以流式的形态产生的,不管是哪里产生的数据,在产生的过程中都是一条条地生成,最后经过了存储和转换处理,形成了各种类型的数据集。根据现实世界中,数据产生方式和数据产生是否含有边界(具有起始点和终止点)角度,将数据分为两种类型的数据集,一种是有界数据集,另外一种是无界数据集。(1)有界数据集有界数据具有时间边界,在处理过程中数据一定会在某个时间范围内起始和结束,有可能是一分钟,也有可能是一天内的交易数据。对有界数据集的数据处理方式被称为批计算,例如将数据从 RDB原创 2020-12-06 12:41:44 · 385 阅读 · 0 评论 -
一文带你了解 Flink 基本组件栈
今天我们大概了解下Flink的基本组件栈,看看 Flink 的分层架构Flink 同样遵循着分层的架构设计理念,在降低系统耦合的同时,也为上层用户构建 Flink 应用提供了丰富且友好的接口。Flink 分层架构,从上到下依次是:API & Libraries 层、Runtime 核心层 和 物理部署层1 API & Libraries 层作为分布式数据处理框架,Flink 同时提供了支撑流计算和批计算的接口,同时在此基础上抽象出不同的应用类型的组件库,如基于流处理的 CEP (复原创 2020-12-06 12:40:06 · 853 阅读 · 0 评论 -
实时计算数据架构的演变
01 传统数据基础架构传统单体数据架构最大的特点便是集中式数据存储,大多数分为计算层和存储层。存储层,主要是负责存储企业各种系统产生的数据,如 Web 业务系统、订单系统、CRM 系统,ERP 系统、监控系统,数据比如系统的订单交易量,网站的活跃用户数,每个用户的交易额。所有的操作均需要借助于同一套数据库实现。单体架构初期效率很高,但是随着时间的推移,业务越来越多,上线迭代很快。但随着后期业务越来越多,系统逐渐变的臃肿。数据库变成了唯一准确的数据源,每个应用都需要访问数据库来获取对应的数据,如果数原创 2020-12-06 12:38:16 · 268 阅读 · 0 评论 -
Apache Flink 如何处理实时场景中的乱序数据
一、流式计算的未来在谷歌发表了 GFS、BigTable、Google MapReduce 三篇论文后,大数据技术真正有了第一次飞跃,Hadoop 生态系统逐渐发展起来。Hadoop 在处理大批量数据时表现非常好,主要有以下特点:计算开始之前,数据必须提前准备好,然后才可以开始计算;当大量数据计算完成之后,会输出最后计算结果,完成计算;时效性比较低,不适用于实时计算;而随着实时推荐、风控等业务的发展,数据处理时延要求越来越高,实时性要求也越来越高,Flink 开始在社区崭露头角。Apach原创 2020-12-01 07:04:26 · 1208 阅读 · 0 评论 -
Flink 如何让数据延迟 10 分钟输出
可以使用 ProcessFunction 的 定时器实现这里我们直接上代码核心代码是,水位 + 10 分钟,然后注册定时器在 OnTimer 方法里,时间到了的时候,就输出package com.dsj361.flinksqlimport java.sql.Timestampimport java.util.Propertiesimport com.dsj361.common.e...原创 2020-04-25 20:13:42 · 2848 阅读 · 3 评论 -
Flink Kafka Connector(连接器)、exactly-once 语义保证、自动发现kafka分区
Flink Source & Sink在 Flink 中,Source 代表从外部获取数据源,Transfromation 代表了对数据进行转换操作,Sink 代表将内部数据写到外部数据源一个 Flink Job 一般由 Source,Transformation,Sink 组成Flink 提供了 Kafka Connector 用于消费/生产 Apache Kafka Top...原创 2019-12-16 11:11:15 · 1290 阅读 · 0 评论 -
Flink Session Window 应用问题与解决方案
什么是flink 的 session window与翻滚窗口(Tumbling Window)和滑动窗口(Sliding Window)相比,会话窗口(Session Window)不重叠并且没有固定的开始和结束时间。当会话窗口在一段时间内没有接收到元素时,即当发生不活动的间隙时,会话窗口关闭会话窗口分配器可以设置静态会话间隙和动态会话间隙实际应用问题每个用户在一个独立的session...原创 2019-11-15 09:49:27 · 1492 阅读 · 0 评论 -
Flink 理解流式计算中的窗口概念
一、描述Window 是处理无限流的核心。Flink 认为 Batch 是 Streaming 的一个特例,所以 Flink 底层的引擎是一个流式引擎,在上面实现了流处理和批处理。而窗口(Window)就是从Streaming 到 batch 的一个桥梁。Flink 提供了非常完善的窗口机制,这是 Flink 最大的亮点之一(其他的亮点包括消息乱序处理和 Checkpoint 机制)二、窗口...原创 2019-11-14 10:04:53 · 1548 阅读 · 0 评论 -
实战理解 flink watermark 和 window 的关系
翻阅了很多的 水位和窗口 的博客文章,由于本来概念就很晦涩,光看很难一下子理解,所以本文用实际数据,做了比较详尽的梳理。可以跟着步骤一步步操作,亲自体会水位在处理乱序数据的时候发挥的重要作用,文末有代码地址,下载下来在idea中跑起来运行。一、数据乱序的现象实时计算中,对数据时间比较敏感,有 EventTime 和 ProcessTime 之分,一般来说 EventTime 是从原始消息中...原创 2019-11-12 18:04:35 · 1922 阅读 · 1 评论 -
Flink 编程接口
欢迎来 kk大数据,今天分享的是 Flink 提供了哪些编程接口可以给我们开发。一、数据集类型现实世界中,所有的数据都是以流式的形态产生的,不管是哪里产生的数据,在产生的过程中都是一条条地生成,最后经过了存储和转换处理,形成了各种类型的数据集。根据现实世界中,数据产生方式和数据产生是否含有边界(具有起始点和终止点)角度,将数据分为两种类型的数据集,一种是有界数据集,另外一种是无界数据集。(...原创 2019-09-22 21:53:09 · 275 阅读 · 2 评论 -
Flink JobManager 和 TaskManager 原理
一、概述Flink 整个系统主要由两个组件组成,分别为 JobManager 和 TaskManager,Flink 架构也遵循 Master - Slave 架构设计原则,JobManager 为 Master 节点,TaskManager 为 Worker (Slave)节点。所有组件之间的通信都是借助于 Akka Framework,包括任务的状态以及 Checkpoin...原创 2019-09-21 10:50:08 · 4905 阅读 · 0 评论 -
一文带你了解 Flink 的基本组件栈
作为实时计算领域的佼佼者,Flink 的基本组件同样值得我们仔细研究。Flink 同样遵循着分层的架构设计理念,在降低系统耦合的同时,也为上层用户构建 Flink 应用提供了丰富且友好的接口。Flink 分层架构,从上到下依次是:API & Libraries 层、Runtime 核心层 和 物理部署层API & Libraries 层作为分布式数据处理框架,Flink 同...原创 2019-09-19 22:08:35 · 600 阅读 · 0 评论 -
flink有什么优势值得大家这么热衷
flink 通过实现了 Google Dataflow 流式计算模型实现了高吞吐、低延迟、高性能兼具实时流式计算框架。同时 flink 支持高度容错的状态管理,防止状态在计算过程中因为系统异常而丢失,flink 周期性地通过分布式快照技术 Checkpoints 实现状态的持久化维护,使得即使在系统停机或者异常情况下都能计算出正确的结果。具体的优势有以下几点(1) 同时支持高吞吐、低延迟、高...原创 2019-09-19 00:09:28 · 1667 阅读 · 0 评论 -
实时计算数据架构的演变
传统数据基础架构传统单体数据架构最大的特点便是集中式数据存储,大多数分为计算层和存储层。存储层,主要是负责存储企业各种系统产生的数据,如 Web 业务系统、订单系统、CRM 系统,ERP 系统、监控系统,数据比如系统的订单交易量,网站的活跃用户数,每个用户的交易额。所有的操作均需要借助于同一套数据库实现。单体架构初期效率很高,但是随着时间的推移,业务越来越多,上线迭代很快。但随着后期业务越来越多...原创 2019-09-18 17:07:45 · 1022 阅读 · 0 评论