![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
flink
哥伦布112
Apache IoTDB contributor
https://github.com/WilliamSong11/iotdb
展开
-
Flink 源码分析之 Flink startupMode 是如何起作用的
之前一直有个疑问,如果consumer.setStartFromLatest()以及kafkaProperties.put("auto.offset.reset", "earliest")同时存在,究竟哪一个会起作用,答案肯定是consumer.setStartFromLatest(),为什么呢?我们一起来看一下@Overridepublic void open(Configuration configuration) throws Exception {// determine th.原创 2020-07-31 00:40:18 · 1079 阅读 · 1 评论 -
Flink 源码分析之 Flink 是如何 kafka 读取数据的
首先来看一下 FlinkKafkaConsumerBase.run方法,相当于是Flink 从kafka中拉取数据的入口方法://入口方法 start a sourcepublic void run(SourceContext<T> sourceContext) throws Exception {......// from this point forward:// - 'snapshotState' will draw offsets from the f.原创 2020-07-31 00:39:36 · 631 阅读 · 0 评论 -
Flink 源码分析之 FlinkConsumer 是如何保证一个 partition 对应一个 thread 的
我们都知道flink 连接kafka时,默认是一个partition对应一个thread,它究竟是怎么实现的呢?以及到我们自己定义 RichParallelSourceFunction 的时候如何借鉴这部分代码呢?我们一起来看一下(基于flink-1.8)看过flink kafka连接器源码的同学对 FlinkKafkaConsumerBase 应该不陌生(没有看过的也无所谓,我们一起来看就好)一起来看一下 FlinkKafkaConsumerBase 的 open 方法中关键的部分.原创 2020-07-31 00:38:49 · 206 阅读 · 0 评论 -
Flink 源码分析之 Flink 自定义 source、sink 是如何起作用的
自从学会自定义source之后,一直都比较好奇,为什么我实现一个 *SourceFunction,我自己定义的代码就可以跟 Flink很好的整合在一起?下面以 RichParallelSourceFunction 为例,来具体看一下究竟是自定义 source 是如何执行的首先看一下 Flink中的抽象类 AbstractUdfStreamOperator,专门负责Rich*Function的 open 和close方法......// flink 提供的 Rich*Funct.原创 2020-07-31 00:38:09 · 391 阅读 · 0 评论 -
Flink 源码分析之一文搞懂 Flink 消息全流程
我们以下面代码为例:FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<>("canal_monitor_order_astable", new SimpleStringSchema(), properties);consumer.setStartFromEarliest();env.addSource(consumer).flatMap(...).print()当 Flink.原创 2020-07-31 00:37:14 · 482 阅读 · 0 评论 -
Flink 源码分析之写给大忙人看的 Flink Window 原理
Window 可以说是 Flink 中必不可少的 operator 之一,在很多场合都有很非凡的表现。今天呢,我们就一起来看一下 window 是如何实现的。window 分类Tumbling WindowSliding WindowSession WindowGlobal Windowwindow operatorevictorevictor 主要用于做一些数据的自定义操作,可以在执行用户代码之前,也可以在执行用户代码之后,更详细的描原创 2020-07-31 00:35:25 · 382 阅读 · 0 评论 -
Flink 源码分析之 - 如何保存 offset
Flink对Offset的管理,有两种方式:1.Checkpointing disabled 完全依赖于kafka自身的API2.Checkpointing enabled 当checkpoint做完的时候,会将offset提交给kafka or zk本文只针对于第二种,Checkpointing enabledFlinkKafkaConsumerBase中的 notifyCheckpointComplete@Override//当checkpoint完成的时候,此方.原创 2020-07-31 00:33:36 · 1087 阅读 · 0 评论 -
Flink 1.11 SQL 使用攻略
7 月 6 日,Apache Flink 1.11 正式发布。从 3 月初进行功能规划到 7 月初正式发版,1.11 用将近 4 个月的时间重点优化了 Flink 的易用性问题,提升用户的生产使用体验。SQL 作为 Flink 中公认的核心模块之一,对推动 Flink 流批一体功能的完善至关重要。在 1.11 中,Flink SQL 也进行了大量的增强与完善,开发大功能 10 余项,不仅扩大了应用场景,还简化了流程,上手操作更简单。其中,值得注意的改动包括: 默认 Plann...原创 2020-07-27 23:00:49 · 6732 阅读 · 0 评论 -
向量化与编译执行浅析
向量化执行和编译执行是目前主流的两种数据库执行引擎优化手段,本文从以下几个方面对向量化执行和编译执行进行浅析。一、以当代CPU主要特性为背景,引出数据库执行引擎的主要优化方向。二、分别解析向量化执行和编译执行的原理,并进行对比(结论主要来自2018VLDB论文[1])。三、介绍了以ROF[2]为代表的向量化与编译执行融合的技术。当代CPU特性 了解CPU特性可以让我们真正理解各种数据库执行引擎优化技术的动机。影响数据库执行引擎执行效率的CPU特性主要有以下几点:超标量流水线与乱序执行、分支原创 2020-07-25 20:07:30 · 486 阅读 · 0 评论 -
Prometheus 问题
问题一 :context deadline exceededGet http://192.168.90.177:9100/metrics: context deadline exceeded解决办法:有可能端口未开放,指定其他端口[root@localhost ~]#./node_exporter--web.listen-address=":8080" &问题二:read: connection reset by peerGet http://192.168.110.85:...原创 2020-07-21 17:21:45 · 5376 阅读 · 0 评论 -
自定义 Data Source
准备工作我们先来看下 Flink 从 Kafka topic 中获取数据的 demo,首先你需要安装好了 FLink 和 Kafka 。运行启动 Flink、Zookepeer、Kafka,好了,都启动了!maven 依赖 1234567891011121314151617181920212223242526272829303132333435363738 <!--f原创 2020-07-15 23:30:12 · 379 阅读 · 0 评论 -
flink自定义 sink
准备工作我们先来看下 Flink 从 Kafka topic 中获取数据的 demo,首先你需要安装好了 FLink 和 Kafka 。运行启动 Flink、Zookepeer、Kafka,好了,都启动了!数据库建表 12345678 DROP TABLE IF EXISTS `student`;CREATE TABLE `student` ( `id` int(11) unsigned NOT NULL AUTO_INCRE原创 2020-07-15 23:28:18 · 1352 阅读 · 0 评论 -
Flink 1.11 新特性详解:【非对齐】Unaligned Checkpoint 优化高反压
问题导读1.Barrier 对齐会造成什么问题?2.Barrier 对齐是否会造成反压?3.如何理解Unaligned Checkpoint ?作为 Flink 最基础也是最关键的容错机制,Checkpoint 快照机制很好地保证了 Flink 应用从异常状态恢复后的数据准确性。同时 Checkpoint 相关的 metrics 也是诊断 Flink 应用健康状态最为重要的指标,成功且耗时较短的 Checkpoint 表明作业运行状况良好,没有异常或反压。然而,由于 Checkpoint 与反压的耦原创 2020-07-15 23:18:37 · 954 阅读 · 0 评论 -
flink table parse模块中,LPAREN RPAREM
在看 flink table parse模块的时候出现一些常量词,词典也搜不到原创 2020-07-09 18:21:02 · 214 阅读 · 0 评论 -
查找两个链表相同部分
给定两个有序单向链表,链表的头指针分别为head1和head2,请您找出两个链表的公共部分并输出。参考答案:思路这道理其实挺简单的,因为两个链表都是有序的,所以咱们不放可以从两个链表的头开始,步骤如下:如果head1的值小于head2,则head1往下移动;如果head2的值小于head1,则head2往下移动;如果head1和head2的值相等,则打印这个值,然后head1和head2都往下移动;head1或者head2有任何一个节点移动到null,则整个过程就结束了。...原创 2020-07-06 17:38:17 · 1493 阅读 · 0 评论 -
idea 看源码关系uml插件推荐 code iris
最近看源码就想找个uml的类图工具,网上看了一些,发现都是一些单个类的继承关系图,如果不知道的朋友,可以用uml插件工具搜索uml即可(uml support),然后每次点击右键后在菜单下面找Diagrams,但是我们今天介绍的不是这个,而是另外一个不错的插件,叫code iris。这个是可以显示整个工程所有类关系图的插件。插件中心查找我的是已经安装过了,没有安装的可以浏览所有的,并查找用法:这个工具用法比较独特,在点击右键中找不到对应的菜单进行操作。而是在右边有一个菜单,如下.原创 2020-07-02 16:32:43 · 3314 阅读 · 0 评论 -
Flink架构,源码及debug
工作中用Flink做批量和流式处理有段时间了,感觉只看Flink文档是对Flink ProgramRuntime的细节描述不是很多, 程序员还是看代码最简单和有效。所以想写点东西,记录一下,如果能对别人有所帮助,善莫大焉。 说一下我的工作,在一个项目里我们在Flink-SQL基础上构建了一个SQL Engine, 使懂SQL非技术人员能够使用SQL代替程序员直接实现Application, 然后在此基础上在加上一些拖拽的界面,使不懂SQL非技术人员利用拖拽实现批量或流式数据处理的Appl...原创 2020-07-02 01:12:16 · 1804 阅读 · 1 评论 -
Flink的窗口算子 WindowOperator的实现原理
窗口算子WindowOperator是窗口机制的底层实现,它几乎会牵扯到所有窗口相关的知识点,因此相对复杂。本文将以由面及点的方式来分析WindowOperator的实现。首先,我们来看一下对于最常见的时间窗口(包含处理时间和事件时间)其执行示意图:上图中,左侧从左往右为事件流的方向。方框代表事件,事件流中夹杂着的竖直虚线代表水印,Flink通过水印分配器(TimestampsAndPeriodicWatermarksOperator和TimestampsAndPunctuatedWatermark原创 2020-07-02 01:11:00 · 448 阅读 · 0 评论 -
Flink WindowOperator 源码分析
0x1 摘要WindowOperator可以说是Flink窗口功能非常核心核心的类,是窗口功能源码的一条主线,延着这条主线去慢慢看源码会轻松很多。注:此文基于Flink 1.4.2 版本源码。0x2 WindowOperator 类结构分析先来看一下类结构图,可以使用idea来生成类图,下图经过稍微加工,去掉一些不重要类的结构图:我们核心重点关注以下一个接口:OneInputStreamOperatorpublic interface OneInputStreamOperator<转载 2020-07-02 01:10:14 · 253 阅读 · 0 评论 -
Flink 原理与实现:Window 机制
Flink 认为 Batch 是 Streaming 的一个特例,所以 Flink 底层引擎是一个流式引擎,在上面实现了流处理和批处理。而窗口(window)就是从 Streaming 到 Batch 的一个桥梁。Flink 提供了非常完善的窗口机制,这是我认为的 Flink 最大的亮点之一(其他的亮点包括消息乱序处理,和 checkpoint 机制)。本文我们将介绍流式处理中的窗口概念,介绍 Flink 内建的一些窗口和 Window API,最后讨论下窗口在底层是如何实现的。什么是 Window原创 2020-07-02 01:09:27 · 147 阅读 · 0 评论 -
Flink 之 KeyedState 的使用
场景:不使用 Flink 提供的 sum() 方法,使用 KeyedState 完成对单词分组求和计算操作。代码:/*** TODO 不使用 Flink 提供的sum()方法,对单词进行分组求和计算。** @author liuzebiao* @Date 2020-2-17 11:42*/public class KeyedStateDemo { public static void main(String[] args) throws Excepti...原创 2020-07-02 01:08:29 · 1005 阅读 · 0 评论 -
【数据仓库】元数据血缘分析
现在数据仓库基本上采用Hadoop平台了,那么数据仓库里面元数据的血缘分析的思路有哪些呢基本上有下面这两种思路:1、解析hql脚本,通过正则表达式去匹配每一行字符串2、采用Hadoop自带的语法分析类解析这里比较建议采用第二种,比较直接简单,因为第一种方式比较复杂,需要考虑场景比较多,容易出现遗漏Hadoop 自带的类 org.apache.hadoop.hive.ql.tools.LineageInfo将hql语句通过解析语法tree,获取hive表的源表和目标表,达到血缘.原创 2020-07-02 01:07:01 · 2533 阅读 · 0 评论 -
【源码解析】Flink 滑动窗口数据分配到多个窗口
之前一直用翻滚窗口,每条数据都只属于一个窗口,所有不需要考虑数据需要在多个窗口存的事情。刚好有个需求,要用到滑动窗口,来翻翻 flink 在滑动窗口中,数据是怎么分配到多个窗口的一段简单的测试代码:val input = env.addSource(kafkaSource) val stream = input .map(node => { Event(node.get("id").asText(), node.get("createTime").原创 2020-07-02 01:05:18 · 770 阅读 · 1 评论 -
Flink自定义Window----自定义Evictor(驱逐者)
在看flink Window 机制的相关博客时,看到有个同学的需求很有趣,"如何让一个DataStream中的某个字段与21天前的该字段做比较?"该同学给定了一个大小21天,每一天滑动一次的window解决方案:在其TimeWindow上进行修改,挖空中间不需要的20天,整出来一个门字形的TimeWindow,这样只剩下第一天和最后一天的两个门脚数据,以进行后续的操作,如比较具体实现依靠自定义Evictor实现,这样只需要应用该GantryTimeEvictor 即可keyed原创 2020-07-02 01:01:15 · 822 阅读 · 0 评论 -
深入理解Flink中的状态实现
state的层次结构 keyedState => windowState OperatorState => kafkaOffset stateBackend snapshot/restore internalTimerService RocksDB操作的初探 state ttL state local recovery QueryableState increamental checkpoint state redistribution broadcasting stat原创 2020-07-01 17:35:20 · 317 阅读 · 1 评论 -
Flink原理与实现:Flink中的状态管理,keygroup,namespace
namespace维护每个subtask的状态上面Flink原理与实现的文章中,有引用word count的例子,但是都没有包含状态管理。也就是说,如果一个task在处理过程中挂掉了,那么它在内存中的状态都会丢失,所有的数据都需要重新计算。从容错和消息处理的语义上(at least once, exactly once),Flink引入了state和checkpoint。首先区分一下两个概念,state一般指一个具体的task/operator的状态。而checkpoint则表示了一个Flin.原创 2020-07-01 17:34:23 · 1973 阅读 · 1 评论 -
flink维表关联系列之Hbase维表关联:LRU策略
维表关联系列目录:一、维表服务与Flink异步IO二、Mysql维表关联:全量加载三、Hbase维表关联:LRU策略四、Redis维表关联:实时查询五、kafka维表关联:广播方式六、自定义异步查询LRULRU(Least Recently Used),最近最少使用缓存淘汰算法,认为最近访问过的数据在将来被访问的概率也比较大,当内存达到上限去淘汰那些最近访问较少的数据。在Flink中做维表关联时,如果维表的数据比较大,无法一次性全部加载到内存中,而在业务上也允许一定数据的延时,那么就可以转载 2020-06-30 01:45:39 · 1703 阅读 · 0 评论 -
Flink通过异步IO实现redis维表join
使用flink做实时数仓的公司越来越多了,浪尖这边也是很早就开发了一个flink 全sql平台来实现实时数仓的功能。说到实时数仓,两个表的概念大家一定会知道的:事实表和维表。在实时数仓中,事实表就是flink消费的kafka的topic数据流,而维表和离线数仓一样,就是mysql等外部存储的维表。当flink 事实表需要 使用维表来进行染色的时候,就需要flink 与维表进行join,这是需要注意与外部系统的通信延迟不会影响流应用程序的整体工作。直接访问外部数据库中的数据,例如在MapFunct原创 2020-06-30 01:41:57 · 1599 阅读 · 0 评论 -
Flink基于RocksDB的增量检查点机制
Flink之所以能够做到高效而准确的有状态流式处理,核心是依赖于检查点(checkpoint)机制。当流式程序运行出现异常时,能够从最近的一个检查点恢复,从而最大限度地保证数据不丢失也不重复。Flink检查点本质上是通过异步屏障快照(asychronous barrier snapshot, ABS)算法产生的全局状态快照,一般是存储在分布式文件系统(如HDFS)上。但是,如果状态空间超大(比如key非常多或者窗口区间很长),检查点数据可能会达到GB甚至TB级别,每次做checkpoint都会非常耗时。原创 2020-06-30 01:39:43 · 1035 阅读 · 0 评论 -
RocksDB介绍
RocksDB简介RocksDB是基于C++语言编写的嵌入式KV存储引擎,它不是一个分布式的DB,而是一个高效、高性能、单点的数据库引擎。它是由Facebook基于Google开源的kv存储LevelDB开发开发。RocksDB使用LSM存储引擎。它针对不同的生产环境进行调优,可以直接使用内存、也可以使用Flash、或者用硬盘或者HDFS。而且支持不同的压缩算法,有一整套的工具用于生产、调试使用。RocksDB是一种嵌入式、KV型、持久化的存储。使用嵌入式的数据存储原因有很多,当数据频繁访问内存、或原创 2020-06-30 01:33:25 · 3148 阅读 · 3 评论 -
Flink - RocksDBStateBackend
如果要考虑易用性和效率,使用rocksDB来替代普通内存的kv是有必要的有了rocksdb,可以range查询,可以支持columnfamily,可以各种压缩但是rocksdb本身是一个库,是跑在RocksDBStateBackend中的所以taskmanager挂掉后,数据还是没了,所以RocksDBStateBackend仍然需要类似HDFS这样的分布式存储来存储snapshotkv state需要由rockdb来管理,这是和内存或file backend最大的不同Abs.原创 2020-06-30 01:32:09 · 434 阅读 · 0 评论 -
「Flink」RocksDB介绍以及Flink对RocksDB的支持
RocksDB介绍RocksDB简介RocksDB是基于C++语言编写的嵌入式KV存储引擎,它不是一个分布式的DB,而是一个高效、高性能、单点的数据库引擎。它是由Facebook基于Google开源的kv存储LevelDB开发开发。RocksDB使用LSM存储引擎。它针对不同的生产环境进行调优,可以直接使用内存、也可以使用Flash、或者用硬盘或者HDFS。而且支持不同的压缩算法,有一整套的工具用于生产、调试使用。RocksDB是一种嵌入式、KV型、持久化的存储。使用嵌入式的数据存储原因有很多,原创 2020-06-30 01:30:12 · 4083 阅读 · 1 评论 -
Flink调度
从提交来一步一步分析,本文源码基于Apache社区 1.8-release 版本REST提交作业流程:1.集群启动后 通过 /jars/upload 向集群提交可执行jar文件2.通过 /jars/:jarid/run 来启动一个job1.构建并提交JobGraph我们直接找到WebSubmissionExtension这个类,在StandaloneSession 集群模式下集群初始化DispatcherRestEndpoint的时候会从WebSubmissionExtension里加载原创 2020-06-30 01:28:35 · 812 阅读 · 1 评论 -
Flink分区策略
目前Flink支持8种分区策略:GlobalPartitioner:数据会被分发到下游算子的第一个实例中进行处理。ShufflePartitioner :数据会被随机分发到下游算子的每一个实例中进行。RebalancePartitioner:数据会被循环发送到下游的每一个实例中进行处理。RescalePartitioner :这种分区器会根据上下游算子的并行度,循环的方式输出到下游算子的每个实例。这里有点难以理解,假设上游并行度为 2,编号为 A 和 B。下游并行度为 4,编号为 1,2,3,4..原创 2020-06-30 01:03:26 · 4466 阅读 · 0 评论 -
Flink【优质】面试
一、概念和基础篇1. 简单介绍一下FlinkFlink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任务:DataSet API, 对静态数据进行批处理操作,将静态数据抽象成分布式的数据集,用户可以方便地使用Flink提供的各种操作符对分布式数据集进行处理,支持Java、Scala和Python。DataStream API,对数据流进行流处理操作,将流式的数据抽象成分.原创 2020-06-30 00:59:04 · 216 阅读 · 0 评论 -
博客地址
Flink - RocksDBStateBackendhttps://yq.aliyun.com/articles/73219/Checkpoint对齐机制源码分析https://blog.csdn.net/u013516966/article/details/104096988原创 2020-06-29 22:00:56 · 160 阅读 · 0 评论 -
Checkpoint对齐源码分析
checkpoint是保证Flink状态容错的重要机制,通过checkpoint可以实现不同的数据语义,也就是我们所说的Exactly-Once与At-Least-Once,通过不同的checkpoint机制实现不同的数据语义,这里所说的机制表示的是checkpoint对齐机制:对齐,实现Exactly-Once语义,不对齐,实现At-Least-Once语义。官方文档解释:对齐通常发生在需要接受上游多个输入流的操作中,例如keyBy、join等操作,接下来将会从源码角度分析对齐机制的实现。ch原创 2020-06-29 21:49:05 · 241 阅读 · 0 评论 -
Flink - RocksDBStateBackend
如果要考虑易用性和效率,使用rocksDB来替代普通内存的kv是有必要的有了rocksdb,可以range查询,可以支持columnfamily,可以各种压缩但是rocksdb本身是一个库,是跑在RocksDBStateBackend中的所以taskmanager挂掉后,数据还是没了,所以RocksDBStateBackend仍然需要类似HDFS这样的分布式存储来存储snapshotkv state需要由rockdb来管理,这是和内存或file backend最大的不同Abs.原创 2020-06-29 21:47:55 · 1180 阅读 · 0 评论 -
Flink 广播流 跟 MapState 案例
package com.coder.flink.core.aaa_Use_demo;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import org.apache.flink.api.common.state.*;import org.apache.flink.api.common.typeinfo.Types;import org.apache.flink.api.java.funct...原创 2020-06-29 21:40:14 · 2761 阅读 · 0 评论 -
flink table select sqlnode的生成过程
javacc parsejj 这个需要去calcite去找/** * Parses a leaf SELECT expression without ORDER BY. */SqlSelect SqlSelect() :{ final List<SqlLiteral> keywords = new ArrayList<SqlLiteral>(); final SqlNodeList keywordList; List<SqlNode>原创 2020-06-27 18:13:58 · 402 阅读 · 0 评论