- 博客(85)
- 资源 (43)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Flink实战教程系列
前言这个flink实战教程系列把我在工作和学习中遇到的一些例子整理一下,从入门,原理,然后到源码都有所涉及,并提供大家可以正常运行的代码。同时也是给自己做一个笔记,有时候稍微时间长一点不用,就会忘了,所以好记性不如烂笔头。如果大家觉得有帮助,请扫描文章末尾的二维码,关注我的公众号,因为刚刚开始,先列出来一些目录,后续会持续更新相关内容,由于笔者水平有限,也难免有不足,还请大家不吝赐教。1.大数据流处理-我为什么选择Apache Flink2. 应用开发 2.1 常用算子 2.2 窗口 2.2
2020-06-28 14:25:36
2414
1
原创 基于streamx闲聊flink在k8s上的部署实战
文章目录自定义构造镜像部署配置flink sql的编写k8s 模板的配置查看日志后续自定义构造镜像由于容器化易管理、易扩容等优点,越来越多的组件都开始迁移到容器上,k8s作为容器化的事实标准,受到了越来越多的人的青睐,由于我们目前很多web开发的组件也是部署到k8s上的,为了后续运维更加方便,我把我们用到的一些大数据组件都迁移到了k8s,包括hive、trino、flink、clickhouse等等。我们要做的第一步就是针对这些我们的需求构建docker镜像,hdfs是作为公共的存储,是直接部署到物理
2022-01-30 15:22:10
4520
原创 flink 写入hudi和iceberg数据湖选型对比
COW表写入的时候会有写放大的问题,所以hudi的话生产我个人觉得还是选用MOR表,针对flink写入hudi和iceberg我做了一些选型的对比。更多信息,欢迎关注我的公众号,加WX
2021-06-22 16:44:00
2224
原创 Flink集成iceberg在生产环境中的实践
文章目录背景flink流式数据写入iceberg压缩小文件快照过期处理数据管理ddlDml移除孤立的文件定时任务删除踩坑使用presto进行查询批任务处理手工执行sql批任务定时任务优化数据迁移总结背景在大数据处理领域,有一个非常常见但是很麻烦的问题,即hdfs小文件问题,我们也被这个问题困扰了很久。开始的时候我们是自己写的一个小文件压缩工具,定期的去合并,原理就是把待压缩数据写入一个新的临时的文件夹,压缩完,和原来的数据进行检验,数据一致之后,用压缩的数据覆盖原来的数据,但是由于无法保证事务,所以出现
2020-12-30 21:35:07
1837
2
原创 Flink集成iceberg数据湖之合并小文件
传统的流式数据入库的过程中对小文件进行合并会产生很多问题,比如流式数据不断的往hive表进行写入,如果同时有一个合并程序进行小文件的合并,那么这时候对同一份数据进行读写。会不会产生问题。如何保证事务,出错了怎么回滚呢,这些都是很棘手的问题。我们的流任务以flink为主,查询引擎是presto,所以调研以后,我决定引入iceberg来解决小文件合并的问题。
2020-11-24 18:38:41
2226
原创 Flink集成数据湖之实时数据写入iceberg
文章目录背景iceberg简介flink实时写入准备sql client环境创建catalog创建db创建table插入数据查询代码版本总结背景随着大数据处理结果的实时性要求越来越高,越来越多的大数据处理从离线转到了实时,其中以flink为主的实时计算在大数据处理中占有重要地位。Flink消费kafka等实时数据流。然后实时写入hive,在大数据处理方面有着广泛的应用。此外由于列式存储格式如parquet或者orc在查询性能方面有着显著的提高,所以大家都会优先选择列式存储作为我们的存储格式。传统的这
2020-09-30 10:09:24
4813
8
原创 flink sql实时计算当天pv写入mysql
今天我们主要来讲一个很简单但是很常见的需求,实时计算出网站当天的pv值,然后将结果实时更新到mysql数据库,以供前端查询显示。接下来我们看看如何用flink sql来实现这个简单的功能。首先我们还是使用datagen生成测试数据,随机生成一些用户id String sourceSql = "CREATE TABLE datagen (\n" + " userid int,\n" + " proctime as PROCTIME
2020-09-23 09:26:03
2940
原创 深入解读flink sql cdc的使用以及源码分析
DC,Change Data Capture,变更数据获取的简称,使用CDC我们可以从数据库中获取已提交的更改并将这些更改发送到下游,供下游使用。这些变更可以包括INSERT,DELETE,UPDATE等.用户可以在如下的场景使用cdc:实时数据同步:比如我们将mysql库中的数据同步到我们的数仓中。数据库的实时物化视图。flink提供了两种方式来处理cdc的数据,一种是直接消费kafka中cdc的数据,一种是直接读取数据库的日志然后进行处理
2020-09-14 10:14:23
1885
2
原创 flink实战-使用自定义聚合函数统计网站TP指标
文章目录背景自定义聚合函数实例讲解背景在网站性能测试中,我们经常会选择 TP50、TP95 或者 TP99 等作为性能指标。接下来我们讲讲这些指标的含义、以及在flink中如何实时统计:TP50,top percent 50,即 50% 的数据都满足某一条件;TP95,top percent 95,即 95% 的数据都满足某一条件;TP99,top percent 99,即 99% 的数据都满足某一条件;我们举一个例子,我们要统计网站一分钟之内的的响应时间的TP90,正常的处理逻辑就是把这一
2020-09-09 09:58:22
756
原创 详解flink中Look up维表的使用
在流式计算中,维表是一个很常见的概念,一般用于sql的join中,对流式数据进行数据补全,比如我们的source stream是来自日志的订单数据,但是日志中我们只是记录了订单商品的id,并没有其他的信息,但是我们把数据存入数仓进行数据分析的时候,却需要商品名称、价格等等其他的信息,这种问题我们可以在进行流处理的时候通过查询维表的方式对数据进行数据补全。维表一般存储在外部存储中,比如mysql、hbase、redis等等,今天我们以mysql为例,讲讲flink中维表的使用。
2020-09-03 17:03:49
3839
1
原创 聊聊flink 1.11 中的随机数据生成器- DataGen connector
在flink 1.11中,内置提供了一个DataGen 连接器,主要是用于生成一些随机数,用于在没有数据源的时候,进行流任务的测试以及性能测试等。下面我们简单的聊聊如何来使用以及底层源码是如何实现的。
2020-09-02 18:02:37
3857
1
原创 Flink源码分析之深度解读流式数据写入hive
其实我们可以想一下这个工作大概是什么流程,首先要写入hive,我们首先要从hive的元数据里拿到相关的hive表的信息,比如存储的路径是哪里,以便往那个目录写数据,还有存储的格式是什么,orc还是parquet,这样我们需要调用对应的实现类来进行写入,其次这个表是否是分区表,写入数据是动态分区还是静态分区,这些都会根据场景的不同而选择不同的写入策略。写入数据的时候肯定不会把所有数据写入一个文件,那么文件的滚动策略是什么呢?写完了数据我们如何更新hive的元数据信息,以便我们可以及时读取到相应的数据呢?
2020-08-28 09:36:26
1466
1
原创 Flink教程-keyby 窗口数据倾斜的优化
在大数据处理领域,数据倾斜是一个非常常见的问题,今天我们就简单讲讲在flink中如何处理流式数据倾斜问题。我们先来看一个可能产生数据倾斜的sql.select TUMBLE_END(proc_time, INTERVAL '1' MINUTE) as winEnd,plat,count(*) as pv from source_kafka_table group by TUMBLE(proc_time, INTERVAL '1' MINUTE) ,plat在这个sql里,我们统计一个网站各个
2020-08-25 09:22:45
2486
6
原创 Flink教程-将流式数据写入redis
redis作为一个高吞吐的存储系统,在生产中有着广泛的应用,今天我们主要讲一下如何将流式数据写入redis,以及遇到的一些问题 解决。官方并没有提供写入redis的connector,所以我们采用apache的另一个项目bahir-flink [1]中提供的连接器来实现。
2020-08-19 10:15:36
1687
1
原创 flink教程-flink modules详解之使用hive函数
flink 提供了一个module的概念,使用户能扩展flink的内置对象,比如内置函数。这个功能是插件化的,用户可以方便的加载或者移除相应的module。flink内置了CoreModule,并且提供了一个hive module,允许用户在加载了hive module之后使用hive的函数,包括内置函数、自定义hive函数等等。如果多个module里有重名的函数,则以先加载的函数为准。用户还可以自定义module,只需要实现Module接口即可。如果是在sql 客户端使用,还需要实现ModuleF
2020-08-17 18:46:19
1487
3
原创 flink教程-详解flink 1.11 中的JDBC Catalog
1.11.0 版本后,用户使用 Flink SQL 时可以自动获取表的 schema 而不再需要输入 DDL。除此之外,任何 schema 不匹配的错误都会在编译阶段提前进行检查报错,避免了之前运行时报错造成的作业失败。
2020-08-05 21:47:01
2910
1
原创 flink教程-基于flink 1.11 使 sql客户端支持执行sql文件
目前flink的sql客户端提供了一种交互式的sql查询服务,用户可以使用sql客户端执行一些sql的批任务或者流任务。但是当我想执行一些sql的定时任务时,flink却没有提供一个合适的方式,所以综合考虑了一下,我决定在sql的客户端基础上给加一个 ‘-filename (-f)’ 参数,就像类似’hive -f abc.sql’ 一样,可以执行一批sql任务。
2020-08-02 22:15:41
1963
原创 flink教程-详解flink 1.11 中的CDC (Change Data Capture)
文章目录CDC简介CanalCanalJson反序列化源码解析CDC简介CDC,Change Data Capture,变更数据获取的简称,使用CDC我们可以从数据库中获取已提交的更改并将这些更改发送到下游,供下游使用。这些变更可以包括INSERT,DELETE,UPDATE等,用户可以在以下的场景下使用CDC:使用flink sql进行数据同步,可以将数据从一个数据同步到其他的地方,比如mysql、elasticsearch等。可以在源数据库上实时的物化一个聚合视图因为只是增量同步,所以可以
2020-07-27 10:01:03
31034
1
原创 flink教程-flink 1.11 集成zeppelin实现简易实时计算平台
我们在生产环境中,对于一些flink的流式任务,我们一般会采用per job的模式提交任务,主要是为了任务资源的隔离,每个任务互不影响。目前zeppelin是不支持这种模式的。所以很多公司都会开发一个自己的实时流式任务计算平台,但是开发一个平台周期较长,既然zeppelin已经提供了我们做一个实时平台的很多的功能,比如写sql的页面、前后端交互、提交任务、获取任务的状态等等,那么我们是不是可以用zeppelin来开发一个简化版的实时计算平台,用于提交sql和jar任务呢?
2020-07-26 17:49:02
1294
原创 flink 1.11 application模式提交hive任务遇到的坑
flink在1.11 版本提供了一个新的Applicaton模式,使用该模式将会在集群的master节点提交任务,减少per job模式客户端和服务器之间的网络传输。hive是一个非常重要的仓库,flink也提供了与hive的集成.在构造HiveCatalog的时候,需要提供一个本地的hive配置路径,也就是hiveC onfDir变量,当用applicatio模式提交的时候,程序是在集群的master提交,无法提供本地路径,给现有的HiveCatalog类添加一个带有HiveConf对象的构造方法
2020-07-25 19:39:56
673
转载 阿里巴巴大规模应用 Flink 的实战经验:常见问题诊断思路
文章转载自Flink中文社区,侵删。1.常见运维问题1.1 作业运行环境本文中介绍的作业运行环境主要是在阿里巴巴集团内,构建在 Hadoop 生态之上的 Flink 集群,包含 Yarn、HDFS、ZK 等组件;作业提交模式采用 yarn per-job Detached 模式。第1步,作业提交是通过 Flink Yarn Client,将用户所写的作业代码以及编译好的 jar 包上传到 HDFS 上; 第2步 Flink Client 与 Yarn ResourceMan..
2020-07-24 21:57:59
317
原创 flink教程-详解flink 1.11中的新部署模式-Application模式
目前对于flink来说,生产环境一般有两个部署模式,一个是 session模式,一个是per job模式。session模式共享资源,如果一个任务出现了问题,会影响其他的任务,per job模式需要有大量的jar和资源拷贝,并且生成JobGraph都是在本地做的,如果任务多的话,会给服务器造成很大的压力,所以flink引入了application模式。Yarn Application 模式会在客户端将运行任务需要的依赖都上传到 Flink Master,然后在 Master 端进行任务的提交
2020-07-22 13:37:57
6917
5
原创 flink教程-聊聊 flink 1.11 中新的水印策略
在flink 1.11之前的,提供了两种生成水印(Watermark)的策略,用户想使用不同的水印生成方式,则需要实现不同的接口,但是这样引发了一个问题,对于想给水印添加一些通用的、公共的功能则变得复杂,因为我们需要给这两个接口都同时添加新的功能,这样还造成了代码的重复。所以为了避免代码的重复,在flink 1.11 中对flink的水印生成接口进行了重构,提供了统一的生成接口WatermarkGenerator ,并支持空闲数据源的处理,在配置的时间内(即超时时间内)没有记录到达时将一个流标记为空闲
2020-07-17 17:58:40
2296
6
原创 如何成为apache开源社区的贡献者
作为一个程序员,给世界上顶级的apache社区贡献一下自己的代码,成为一个apache contributer,把这个写到简历里,是不是觉得很爽,下面我结合apache flink来简单讲讲如何给apache 贡献你的第一行代码。
2020-07-13 19:32:25
706
1
原创 flink教程-在IntelliJ IDEA 中玩转 checkstyle
文章目录前言安装插件配置插件选择版本添加配置文件在项目中应用checkstyle插件具体使用前言当我们想给flink贡献自己的代码的时候,就需要把代码下载下来,然后导入自己的IDE,其中有一个很重要的环节就是对代码规范的检查,也就是flink的checkstyle,如果我们只是靠在用maven编译的时候的出错信息来对flink进行调试,那么就太费事了,所以我们可以利用flink的checkstyle文件对修改过的代码做检查,这样可以省去很多事情。其实除了flink,我们做其他java项目,也是一样的,
2020-07-11 13:54:52
986
原创 工作中遇到的git命令总结
远程仓库添加远程仓库查看当前的仓库拉取远程分支到本地rebase删除指定commit提交到远程仓库用仓库代码强制覆盖本地代码拉取远程的tag
2020-07-09 09:05:39
265
原创 Flink教程--flink 1.11 使用sql将流式数据写入hive
flink 1.11 支持用户直接使用sql将流式数据写入hive,并且可以自动的创建和刷新hive的分区,支持的数据格式包括json、csv、parquet、csv。底层是使用了写入文件系统的功能,所以具体的配置可以参考写入文件系统的配置。
2020-07-08 11:12:34
11816
28
原创 Flink教程-flink 1.11使用sql将流式数据写入文件系统
flink 1.11 开始提供了一个file system connector,可以使用DDL创建一个table sink,然后使用sql的方法写入数据,文件系统可以是本地local file,hdfs等,支持的写入格式包括json、csv、avro、parquet、orc。此外还可以支持文件大小、写入时间等不同的文件滚动策略。写完分区文件之后,自动提交分区信息。
2020-07-06 16:52:38
7238
1
原创 Flink教程-flink 1.11 流式数据ORC格式写入file
在flink中,StreamingFileSink是一个很重要的把流式数据写入文件系统的sink,可以支持写入行格式(json,csv等)的数据,以及列格式(orc、parquet)的数据。hive作为一个广泛的数据存储,而ORC作为hive经过特殊优化的列式存储格式,在hive的存储格式中占有很重要的地位。今天我们主要讲一下使用StreamingFileSink将流式数据以ORC的格式写入hdfs、file等文件系统,这个功能是flink 1.11版本开始支持的。
2020-07-05 20:02:00
5109
4
原创 Flink实战教程-自定义函数之TableFunction
文章目录自定义函数单个eval方法多个eval方法不固定参数通过注解指定返回类型注册函数构造数据源查询left joinjoin多种类型参数不固定参数类型今天我们来聊聊flink sql中另外一种自定义函数-TableFuntion.TableFuntion 可以有0个、一个、多个输入参数,他的返回值可以是任意行,每行可以有多列数据.实现自定义TableFunction需要继承TableFunction类,然后定义一个public类型的eval方法。结合官网的例子具体来讲解一下。自定义函数单个ev
2020-06-30 22:21:16
4122
原创 Flink实战教程-自定义函数之标量函数
文章目录背景实例讲解定义函数通过程序注册函数通过sql注册函数背景flink本身给我们提供了大量的内置函数,已经能满足我们绝大部分的需求,但是如果确实是碰到了一些特殊的场景,无法满足我们的需求的时候,我们可以自定义函数来解决,今天我们主要讲一下最简单的自定义函数-ScalarFunction。实例讲解定义函数首先我们来实现一个最简单的标量函数,主要功能就是对两个数加和操作,实现标量函数需要继承抽象类ScalarFunction,然后实现eval方法,代码如下: public static cla
2020-06-29 22:07:37
1154
原创 flink实战教程-集群的部署
文章目录MiniClusterStandaloneyarnyarn sessionyarn per jobapplication模式k8s其他MiniCluster这种模式我们一般是在用IDE调试程序的时候用到,当我们在本地用IDE开发程序的时候,执行main方法,flink会在本地启动一个包含jobmanager和taskmanager的进程的minicluster,程序运行完成之后,这个cluster进程退出。Standalone这种模式就是直接在物理机上启动flink集群。我们可以通过 FLI
2020-06-28 23:02:55
718
1
原创 大数据流处理-我为什么选择Apache Flink
文章目录真正的流处理低延迟高吞吐多种窗口自带状态(state)精确一次传输语义时间管理水印复杂事件处理随着这几年大数据技术的迅猛发展,人们对于处理数据的要求也越来越高,由最早的MapReduce,到后来的hive、再到后来的spark,为了获取更快、更及时的结果,计算模型也在由以前的T+1的离线数据慢慢向流处理转变,比如每年双十一阿里的实时大屏,要求秒级的输出结果;再比如当我们以100迈的速度开车的时候,我们希望地图导航软件能给我们毫秒级延迟的导航信息。那么对于已经有了storm、spark strea
2020-06-26 18:14:28
285
原创 聊聊AWK命令的那些事
文章目录切割文件内置变量的使用正则匹配类sql功能作为一个大数据开发,先来一个我比较喜欢的面试题。对于下面的nginx日志access.log,用脚本分析出访问ip的Top 10。其实这个题不难,但是考察了几个常用的shell 命令,awk、uniq、sort、head,我觉得对于做大数据开发、运维、数仓等来说都是应该必备的。2018-11-20T23:37:40+08:00 119.15.90.30 - "GET /free.php?proxy=out_hp&sort=&page
2020-06-25 12:50:41
287
转载 Flink 新场景:OLAP 引擎性能优化及应用案例
摘要:本文由阿里巴巴技术专家贺小令(晓令)分享,主要介绍 Apache Flink 新场景 OLAP 引擎,内容分为以下四部分:背景介绍Flink OLAP 引擎案例介绍未来计划背景介绍OLAP 及其分类OLAP 是一种让用户可以用从不同视角方便快捷的分析数据的计算方法。主流的 OLAP 可以分为3类:多维 OLAP ( Multi-dimensional OLAP )、关系型 OLAP ( Relational OLAP ) 和混合 OLAP ( Hybrid OLAP ) 三大类。(1)多维 OLAP
2020-06-23 09:39:03
591
原创 放弃fastjson,拥抱Jackson
文章目录背景常用操作json object操作序列化操作反序列化日期类型反序列化自定义反序列化枚举类型反序列化背景最近由于阿里的fastjson频繁爆出安全漏洞,为了避免后续升级上线的烦恼,决定弃用fastjson,使用Jackson,把现有项目中的fastjson都换成了Jackson,由于很多写法上有些不同,所以在这里把这些改过的东西做一下笔记。常用操作首先引入相关的pom <properties> <jackson.version>2.11.0
2020-06-22 21:38:15
425
原创 flink实战教程-使用set实时计算当天网站uv
文章目录背景案例讲解模拟source定义窗口自定义聚合算子处理输出结果背景对于web网站,我们一般会有这样的需求,实时的计算出来当天网站的uv,尽可能快的展示出来。今天我们就讲一下基于java的set集合做一下实时uv的统计。简易需求:实时计算出当天零点截止到当前时间各个端(android,ios,h5)下的uv每秒钟更新一次统计结果案例讲解模拟source首先我们模拟生成一下最简单的数据,生成一个flink的二元组Tuple2.分别表示分类和用户id public static c
2020-06-21 19:47:10
1412
6
原创 flink实战教程-flink streaming sql 初体验
文章目录背景实例讲解构造StreamTableEnvironment对象注册table使用Tuple使用Row使用java的Pojo类使用外部存储背景SQL,Structured Query Language:结构化查询语言,作为一个通用、流行的查询语言,不仅仅是在传统的数据库,在大数据领域也变得越来越流行,hive、spark、kafka、flink等大数据组件都支持sql的查询,使用sql可以让一些不懂这些组件原理的人,轻松的来操作,大大的降低了使用的门槛,今天我们先来简单的讲讲在flink的流处理
2020-06-21 10:28:53
682
原创 flink实战-实时计算平台通过api停止流任务
文章目录背景案例详解命令行停止api实现背景随着flink在流计算领域越来越火,很多公司基于flink搭建了自己的实时计算平台,用户可以在实时平台通过jar或者sql的方式来开发、上线、下线、运维flink任务,避免了构建flink任务的复杂性,使更多不会flink的人能够使用flink。平时我们自己开发一个flink任务之后,都是通过脚本的方式提交到集群的,但是我们搭建了一个实时计算之后,就不能通过命令行来管理任务了,我们今天就主要讲一下如何通过api的方式来和yarn集群交互。目前生产环境部署
2020-06-17 23:15:43
1228
原创 flink实战-定时器实现已完成订单自动五星好评
文章目录背景需求案例详解自定义source定时处理逻辑背景需求在电商领域会有这么一个场景,如果用户买了商品,在订单完成之后,24小时之内没有做出评价,系统自动给与五星好评,我们今天主要使用flink的定时器来简单实现这一功能。案例详解自定义source首先我们还是通过自定义source来模拟生成一些订单数据.在这里,我们生了一个最简单的二元组Tuple2,包含订单id和订单完成时间两个字段. public static class MySource implements SourceFunc
2020-06-16 22:02:15
750
SQLExplorer.exe
2009-08-05
jQuery 1.6 API 中文版
2011-11-18
java web 标签大全
2011-11-14
高性能MySQL(第2版)英文版
2011-10-20
《C语言程序设计教程》课后习题答案 吕凤翥
2011-04-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人