Flink从无到有
文章平均质量分 84
我先森
资深大数据架构师,负责过分布式大数据系统底层研发,在游戏领域,城市数字化领域有一定经验。
展开
-
32.flink sql 语法大全
flink table api 之 time Attributes, which supports standard ANSI SQL(ANSI SQL是sql语言标准).Calcite 是什么?如果用一句话形容 Calcite,Calcite 是一个用于优化异构数据源的查询处理的基础框架。最近十几年来,出现了很多专门的数据处理引擎。例如列式存储 (HBase)、流处理引擎 (Flink)、文档搜索引擎 (Elasticsearch) 等等。原创 2022-10-09 18:31:31 · 4243 阅读 · 0 评论 -
28.flink table API 动态表的概念
但是,如果未注册的用户分配了唯一的用户名,则要维护的计数数将随着时间的推移而增长,最终可能在某天查询失败。一般我们会加上窗口来计算,比如一天,这样的话对每个用户会维护一天的状态,窗口触发计算的时候会清除状态,下次该用户再来的时候会形成新的一天的窗口。这也是可以理解的, 毕竟flink本身只适合实时处理实时展示某段时间的结果,而不是缓存所有的历史状态,这不是flink设计的初衷。在任何时间点,连续查询的结果在语义上等同于在输入表的快照上以批处理模式得到的查询的结果。并不是所有的查询都能以流查询的格式执行的。原创 2022-09-30 16:22:22 · 682 阅读 · 0 评论 -
30.flink table 中的数据类型映射
flinkTable中的所有数据类型都是class封装的,在这之中有一个基类: org.apache.flink.table.types.DataType, 所有的类型都是该类的实现类。除此之外Flink table还提供了一个final类型的类,该类提供了大量的静态方法可以指定访问实现了 org.apache.flink.table.types.DataType接口的真正实现类, 这个final类型的类是: org.apache.flink.table.api.DataTypes。原创 2022-10-02 01:02:34 · 2926 阅读 · 0 评论 -
29.flink table api 之 time Attributes
time Attributes主要分为:processing time 和event time这个概念相比大家并不陌生。time Attributes翻译成时间属性是不合适的,容易对初入门的人产生误导,我个人觉得翻译成时间特性比较好,也刚方便理解。时间特性是一种特殊的时间属性,并不是所有的时间属性都是时间特性。or aDataStream翻译:时间属性可以是每个表shcema的一部分。它们在从CREATE table DDL或DataStream创建表时定义。原创 2022-10-01 01:08:17 · 1572 阅读 · 3 评论 -
27.flink table api 和DataStream Api 互相转换
核心的英文并未删除,方便读者甄别我的理解和翻译。DataStream 中的水位线,如果DataStream 中的水位线没读懂,建议不要往下看了,以防走火入魔。原创 2022-09-20 21:10:10 · 2148 阅读 · 0 评论 -
25.flink上下游算子之间数据是如何流动的(重要)
flink在处理数据的时候,一个重要的特性是并行处理。flink上游的数据源不管是hdfs还是kafka或者是读取文件系统,在大多数时候都是逻辑上把数据划分为多分分区,然后处理的时候每个分区会对应一个线程去处理。当数据由上游算子到下游算子的时候,其本质上是上游线程到下游线程之间的数据传输。而这个线程在flink官方的描述中被称为task任务。...原创 2022-08-27 23:20:34 · 972 阅读 · 0 评论 -
24.flink windows 窗口,彻底站起来。
本文的主要目的是学会flink window窗口编程,本文章不会对:滑动窗口,滚动窗口,sessoin窗口作深入的讲解,那不是本文的目的。本文在假设你对窗口有一定了解的基础的前提下,带你看看flink窗口编程。flink 水位线彻底站起来。.........原创 2022-08-23 01:15:23 · 2422 阅读 · 5 评论 -
23.flink processFunction(高级报警功能必会)
flink的processFunction是实现高级功能的重要模块,所以flink也是单独列出了一节来讲解,不仅如此市面上的flink开发的书籍基本上也是会把processFunction单独列出一个小节来讲解。另外理解本小节的代码,需要读者理解状态,以及flink三种时间:event time,ingestion time,processing time.下面的例子用的是process time. 本节内容不适合新手小白,适合对flink有一定了解以及有一定编程经验的人。}}}}原创 2022-08-21 15:49:58 · 1201 阅读 · 0 评论 -
22.flink参数工具 ParameterTool
参数很重要,有时候参数被配置在配置文件中, 有时候我们可能会通过控制台传递参数,可以说参数很多地方都会用到,基于此,flink提供了一个工具可以很方便的读取参数,可以通过配置文件,也可以通过控制台,甚至我们可以把参数广播到全局,乃至于每个算子内部都可以访问到此参数。原创 2022-08-19 20:55:44 · 1550 阅读 · 0 评论 -
21.flink 水位线,彻底站起来
flink从1.12版本开始水位线分配做了不小的改动,以前的老代码需要改变,今天通过阅读源码,正好做个整理。首先现在的版本默认情况下使用event time。原创 2022-08-18 19:00:19 · 2327 阅读 · 1 评论 -
20.flink流处理和批处理的一些思考(对新手来说很重要)
流处理和批处理很多算子基本都是一样的,比如reduce,map,flatMap等等。但是有些时候流处理和批处理同样的算子输出结果是不同的,这一点对于新手有时候难以理解,这篇文将就来谈谈这个问题,我们以reduce这个算了为例子来做展示。综上所述,同样的算子,在批处理和流处理的行为本质上是一样的,产生的结果是不同的。......原创 2022-08-14 17:23:11 · 3126 阅读 · 1 评论 -
19.flink task数量,slot数量和taskManage数量
读者必须明白flink 任务的划分是怎么来的,如果不明白建议去查看相关资料,否则这篇文章对你而言没有任何意义。原创 2022-08-12 16:42:46 · 3429 阅读 · 0 评论 -
17.flink Table Api基础概念讲解
注册桥接的catlogs在内部catlog注册table加载可插拔模块执行SQL查询注册用户定义的(标量、表或聚合)函数DataStream和Table的流转换。原创 2022-07-20 21:38:53 · 1332 阅读 · 0 评论 -
16.flink 自定义KeySelector
flink 根据对象的字段进行分组, flink KeySelector的三种写法,flink KeySelector原创 2022-07-16 22:56:22 · 1651 阅读 · 0 评论 -
flink.15 DataSet模块 算子大全
聚合操作,这个聚合的意思不是分组的意思,大家要理解聚合和分组的区别,分组只是单独的分组,聚合指的是对所有的数据做逻辑计算操作。常用场景有聚合起来的数据的最大值,聚合起来的数据的最小值,聚合起来的数据的求和。根据指定的元素的某个字段进行数据分组,然后对组内的数据做操作,所以一般groupby都是结合其他算子使用,常用场景有分组求和,分组求最大值,分组求最小值。定义前后元素处理逻辑发出新的元素,然后新的元素和下一个元素以同样的逻辑处理,依次往后,直到最后生成一个元素。field字段的位置。...........原创 2022-07-14 20:41:09 · 1113 阅读 · 0 评论 -
flink.14 DataStream模块 source底层是怎么实现的?
本页描述了Flink的数据源API及其背后的概念和架构,不涉及代码。source有三个核心的组件组成: Splits, SplitEnumerator,SourceReader.****有界source读取的时候,由SplitEnumerator生成数据分片集合,集合的分片数量是有限的。无解的source读取的时候,由SplitEnumerator生成数据分片的集合也是无限的,但是SplitEnumerator会源源不断生成分片,并将分片放入集合。sourceReader去分片集合中读取数据,读取是并原创 2022-07-14 08:02:38 · 1180 阅读 · 0 评论 -
flink.13 DataStream模块 算子大全
算子大全摘要1.map2.flatMap3.filter4.keyBy摘要首先不得不提一点,每一个算子都是有状态的,算子的状态也是flink能够从错误中恢复的基础. 算子的执行状态称为状态后端,状态是可以被程序访问,甚至我们可以自己及写代码访问状态.比如广播就利用了这个特性,首先将流广播出去,然后通过状态句柄去访问广播出去的流.可以说理解算子状态是学习flink的核心. 状态的存储见我的其他的文章.多说一句, flink运行过程中真正有意义的数据就是状态数据,状态数据就是中间结果. 每个算原创 2022-03-25 18:55:17 · 4239 阅读 · 0 评论 -
flink.12 序列化
Tuples and Case Classes对java来说Tuples是flink自带的一种类, 对于scala来说flink没有提供类似Tuples的类, 因为scala天生自带了一种特殊类 case class.主要说说java版的Tuples, Java API 提供从Tuple1最高到Tuple25. 元组的每个字段都可以是任意 Flink 类型, 1 25这个数字的意思是参数的个数.Tuple1 t1;Tuple2<String,String> t2;Tuple3原创 2022-03-21 14:44:18 · 2659 阅读 · 0 评论 -
flink.11 DataStream api之广播
概念广播意思就是将变量发送到每一个并行运行的task所在的机器上,这样可以避免数据在涉及到聚合之时的跨网传输,提高流运行的速度,正因为广播是提前将需要的公共数据发送到各个集群的节点上,所以来说,广播不适合广播大量的数据.实现广播的步骤构造数据流A, B 这里假设B为要被广播的流数据,A为普通数据流,A需要用B流做一些逻辑运算为广播流构造描述符对象> MapStateDescriptor<String, Rule> ruleStateDescriptor = new>原创 2022-03-14 15:38:15 · 4320 阅读 · 0 评论 -
flink.9 水位线
flink为每个分区维持一个水位线,流入该分区的数据流中会附带新的水位线,新的水位线和分区中已经存在的水位线比较,保存最大的那个,因为水位线是递增的.如上图,一个任务会为它的每个分区都维护一个分区水位线(partition watermark),当收到每个分区传来的水位线时,任务首先会让当前分区水位线的值与接收的水位线值相比较,如果新接收的水位线值大于当前分区水位线值,则会将对应的分区水位线值更新为较大的水位线值(如上图中的2步骤),接着,任务会把事件时钟调整为当前分区水位线值的最小值,如上图步骤2 ,原创 2022-03-09 18:12:24 · 1443 阅读 · 0 评论 -
flink 实战例子 createRemoteEnvironment
createRemoteEnvironment(host: String, port: Int, jarFiles: String*)意思是将你本地的代码打的jar包,远程提交到已经存在的flink集群上.注意此程序再idea运行的时候,idea上不会有任何输出的.在这种模式下idea就是相当于一个传输所需jar文件的客户端,程序一旦执行之后,就和idea无关了.1.代码如下:package com.flinkimport org.apache.flink.streaming.api.scal原创 2022-03-03 19:17:10 · 2477 阅读 · 0 评论 -
flink.9 DataStream API总览
概念Flink 中的 DataStream 程序是对数据流进行转换(例如过滤、更新状态、定义窗口、聚合)的常规程序。数据流最初是从各种来源(例如,消息队列、套接字流、文件)创建的。结果通过接收器返回,例如可以将数据写入文件或标准输出(例如命令行终端)。Flink 程序可以在各种上下文中运行,可以独立运行,也可以嵌入到其他程序中。执行可以在本地 JVM 中发生,也可以在许多机器的集群上发生。DataStream API 既可以处理无解流数据, 也可以处理有界的批量数据. 意思是既支持流处理,也支持离线的批原创 2022-03-03 17:48:04 · 1477 阅读 · 0 评论 -
flink实战例子 DataStream api Side Outputs 分流
分流 Side Outputs除了DataStream操作产生的主流外,还可以生成任意数量的附加流 。附加流中的数据类型不必与主流中的数据类型相匹配,不同流端输出的类型也可以不同。当您想要分割数据流时,这个操作可能很有用,通常您必须复制数据流,然后从每个流中过滤出您不想拥有的数据。上面的话,是官网的介绍,有些拗口,其实更通俗的说法就是,对于源数据流可以通过处理后生成新的复制流, 此操作可以多次进行. 比如你相对源数据做不同的处理,一份处理后存入mysql,一份处理后存入kafka,一份处理后存入hdfs原创 2021-09-10 15:30:31 · 248 阅读 · 0 评论 -
flink.8 Flink state backends和 checkpoint配置
用Data Stream API编写的程序通常以各种形式保存状态:Windows 收集元素或聚合,直到它们被触发转换函数可以使用键/值状态接口来存储值转换函数可以实现CheckpointedFunction接口以使其局部变量容错当检查点被激活时,这种状态会在检查点上持久化,以防止数据丢失并持续恢复。状态如何在内部表示,以及它在检查点上的持久化方式和位置取决于所选的状态后端。 这里简单说下**状态state **Flink中的 state是程序历史数据的记忆叠加,state使用检查点checkp原创 2022-03-09 18:10:34 · 1019 阅读 · 0 评论 -
flink.10 DataStream api execute mode(很重要)
一.概述在此之前你需要了解:DataStream api 概述DataStream API 支持不同的运行时执行模式(streaming/batch),您可以根据用例的要求和作业的特征从中进行选择。STREAMINGDataStream API 有“经典”的执行行为,我们称之为STREAMING执行模式。这应该用于需要连续增量处理并预计无限期保持在线的无限制作业,这是默认的执行模式.BATCH这以一种更让人联想到 MapReduce 等批处理框架的方式执行作业。这应该用于您具有已原创 2021-09-06 16:01:02 · 553 阅读 · 0 评论 -
flink.7 状态
1. 什么是状态虽然数据流中的许多操作一次只查看一个单独的事件(例如事件解析器),但有些操作会记住多个事件的信息(例如窗口操作符)。这些操作称为有状态的。这句话读起来有点拗口,简单说一下,所谓的状态就是数据的历史情况,比如你从八点到九点之间吃了二十个包子,然后你在小本本上写上(我在九点到十点吃了十个包子), 等到了第二天,你早上吃了五个包子,于是你打开你的小本本写上(从昨天到今天共吃了10+5=15 个包子),这个小本本上记录的包子的数量就是你的状态信息. 所以说状态是历史信息的叠加, 没看懂的小伙伴建原创 2021-08-18 10:53:15 · 424 阅读 · 0 评论 -
flink.6 api预览
这篇文章主要介绍flink提供的API,为了后面的内容,这一片算是概要.原创 2021-08-18 09:27:47 · 104 阅读 · 0 评论 -
flink.5 在yarn上运行
一:Session Mode 运行任务Session Mode运行jar有两个过程,一是在yarn建立一个flink集群.二:集群建立成功之后,提交任务.1.1Session Mode 建立一个flink集群 有两种模式:附加模式attached mode (default):client提交任务到flink-cluster上,之后客户端会继续运 行,并且会追踪集群状态.如果集群失败,则客户端会显示错误信息,如果客户端关闭,也会向flink-cluster发送关闭的信号,关闭集群.下面原创 2021-08-05 17:04:22 · 1306 阅读 · 3 评论 -
flink.4 Deployment Modes (调度模式)
这几天查了很多调度模式,大多说的不全面,趁着学习,正好记录一下..这篇文章着重讲解flink 程序的调度模式,关于jobmanager,taskmanager扽分其他知识,请读者自行查询,也许我后面的文章会讲解,但是这里只讲解flink的三种部署(调度)模式.clent的概念下图显示了Flink集群的构建块。flink程序的运行始于clien也就是你提交程序的代码。client获取Flink应用程序的代码,将其转换为JobGraph并提交给JobManager。JobManager将工作分发到tas原创 2021-08-05 15:15:11 · 670 阅读 · 0 评论 -
flink.3-入门wordcount(java scala双版本代码)
1.代码/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this fi.原创 2021-05-11 10:17:23 · 481 阅读 · 0 评论 -
flink.2- 单机安装
目录1:准备一台linux ,一般都是安装在虚拟机中的。我这里用的是centos72.在此linux安装java ,具体安装这里不做赘述。3.下载flink 并且解压4.启动flink5.关闭防火墙6.浏览器访问【 ip:8081 】1:准备一台linux ,一般都是安装在虚拟机中的。我这里用的是centos72.在此linux安装java ,具体安装这里不做赘述。3.下载flink 并且解压wget https://mirrors.bfsu.edu...原创 2021-05-10 16:44:13 · 183 阅读 · 4 评论 -
flink.1-项目构建
因为项目需要 ,将spark项目改成flink版本,这里记录整个flink的学习过程原创 2021-01-22 18:51:03 · 514 阅读 · 0 评论