- 博客(133)
- 资源 (38)
- 收藏
- 关注
原创 Flink Table & SQL 行列转换
总结Flink Table & SQL 中,如何将一个数组(Array)或对象(Map)展开。测试数据用datagen连接器构造测试数据。DDL如下:CREATE TABLE source_table ( userId INT, eventTime as '2021-10-01 08:08:08', eventType as 'click', productId INT, -- 数组(Array)类型 productImages as ARRAY
2021-12-12 15:55:16
5469
1
原创 Flink Table & SQL 自定义TableSource、TableSink
Flink Table & SQL中提供了非常丰富的接口来让我们自定义TableSource、TableSink。自定义TableSource或TableSink,需要将以下两点结合起来:了解不同TableSource接口、TableSink接口、TableFactory接口提供的功能以及适用的场景。看JDBCTableSource、JDBCUpsertTableSink源码...
2020-04-19 18:22:24
5804
1
原创 Flink Table & SQL: Minibatch、LocalGlobal、Split Distinct、Agg With Filter
总结Flink Table & SQL 流式聚合中的几个优化。MiniBatchLocalGlobalSplit DistinctAgg With FilterMiniBatchMiniBatch优化的核心思想是缓冲输入记录微批处理以减少对状态的访问,进而提升吞吐并减少数据的输出。以如下场景为例,看下开启MiniBatch聚合前后的差异。SELECT k...
2020-04-19 18:08:32
2594
1
原创 Flink Table & SQL ROW_NUMBER Deduplication
在Flink SQL中用ROW_NUMBER进行去重操作。语法SELECT [column_list]FROM ( SELECT [column_list], ROW_NUMBER() OVER ([PARTITION BY col1[, col2...]] ORDER BY time_attr_col [asc|desc]) AS rownum FROM...
2020-04-12 17:18:47
8154
1
原创 Flink Table & SQL 实时TopN
TopN语句用于获取流表中的前N条记录。本文总结Flink Table & SQL 中实时TopN的用法。语法SELECT [column_list]FROM ( SELECT [column_list], ROW_NUMBER() OVER ([PARTITION BY col1[, col2...]] ORDER BY col1 [asc|desc...
2020-04-12 16:55:23
2474
1
原创 Flink Table & SQL 双流Join
本文总结Flink Table & SQL 中的双流Join。Regular JoinInterval JoinWindow JoinRegular JoinRegular Join: 常规Join。在使用时注意以下几点:默认情况下,需要将两个流的输入全部保存在State中。为限制状态无限增长,可通过Query Configuration设置空闲状态保留时...
2020-04-05 22:44:10
4377
1
原创 Flink Table & SQL 维表Join
总结Flink Table & SQL 中的维表Join,包括DataStream中的维表Join。定时加载维度数据Distributed Cache(分布式缓存)Async IO(异步IO)Broadcast State(广播状态)UDTF + LATERAL TABLE语法LookupableTableSource定时加载维度数据实现方式...
2020-04-05 22:39:07
9422
原创 Spark Structured Streaming 监控Kafka Lag
Structured Streaming消费Kafka时并不会将Offset提交到Kafka集群。但可以通过以下3种方式间接实现对Kafka Topic Lag的监控。方式一: Checkpoint先看下Checkpoint目录的结构:checkpoint/├── commits│ ├── 0│ ├── 1│ ├── 2│ └── 3├── metadata├...
2020-03-29 21:43:59
2520
3
原创 Spark Structured Streaming Join
Structured Streaming中的Join操作分两类: 流-静态数据(Stream-Static)Join和流-流(Stream-Stream) Join。本文总结这两类Join操作。Stream-Static Join测试数据// 静态mysqlselect * from t_user_info;+--------+-------+-----+---------+-----...
2020-03-29 21:35:56
2251
原创 Spark Structured Streaming状态操作: mapGroupsWithState、flatMapGroupsWithState
总结Structured Streaming中的状态操作: mapGroupsWithState、flatMapGroupsWithState。mapGroupsWithState每次Trigger后,将给定的Function应用于有数据的每个分组,同时维护每组的状态。先看下mapGroupsWithState Operator,如下:// S: 状态类型 U: 返回类型// func:...
2020-03-22 15:34:14
5755
原创 Spark Structured Streaming去除重复数据Deduplication
Structured Streaming可以使用Deduplication对有无Watermark的流式数据进行去重操作。无Watermark: 对重复记录到达的时间没有限制。查询会保留所有的过去记录作为状态用于去重。有Watermark: 对重复记录到达的时间有限制。查询会根据水印删除旧的状态数据。本文总结Deduplication的使用及注意事项。测试数据// 测试数据,...
2020-03-22 15:32:15
2822
原创 Spark Structured Streaming Output Mode和Trigger
总结Structured Streaming中的输出模式Output Mode和触发器Trigger。输出模式Output ModeStructured Streaming 中有几种类型的输出模式:Append mode: Append模式。默认。只将自上次触发以来添加到结果表中的行输出到接收器。Update mode: Update模式。只将自上次触发以来结果表中更新的行输出到接...
2020-03-08 19:44:58
2681
原创 Spark Structured Streaming EventTime下Watermark生成与Window触发
本文旨在弄清楚Spark Structured Streaming EventTime下Watermark生成与Window触发相关问题。窗口起止时间。水印的生成。对迟到数据的处理。窗口销毁的时机。Watermark与Update/Complete输出模式之间的关系。测试数据// 造的测试数据,如下:// eventTime: 北京时间 {"eventTi...
2020-03-08 19:42:27
1887
2
原创 Spark Structured Streaming Source、Sink
本文总结Spark Structured Streaming Source、Sink。SourceFile Source从目录中读取文件作为数据流。支持csv、json、text、parquet、orc格式。以csv文件为例如下:// 启动自动推断Schemaspark.conf.set("spark.sql.streaming.schemaInference",true)// 读取...
2020-02-23 20:18:46
1813
原创 Spark Structured Streaming 读写Kafka与Exactly-once语义
本文总结Spark Structured Streaming读写Kafka与Exactly-once语义。问题一: 读Kafka的方式// 读取一个Topicval inputTable=spark .readStream .format("kafka") .option("kafka.bootstrap.servers", "kafka01:9092,k...
2020-02-23 20:10:10
2945
1
原创 Spark Structured Streaming 编程模型
从Spark 2.0.0开始,提供了一个用于实时流处理的新组件-Structured Streaming(结构化流)。本文总结Structured Streaming的编程模型,顺带会总结Structured Streaming与Spark Streaming的区别。Structured Streaming 编程模型首先,Structured Streaming有一个Input Tabl...
2020-01-12 18:52:06
961
原创 Flink Table & SQL LookableTableSource
在DataStream中,要实现流维Join,可以用Function,如MapFunction、FlatMapFunction、ProcessFunction等等; 或通过Async I/O实现。从Flink 1.9.0开始,提供了LookableTableSource,只需将Lookup数据源(如Mysql、HBase表)注册成LookableTableSource,即可用SQL的方式,实现流...
2019-12-15 22:37:21
5573
1
原创 Flink Table & SQL 时态表Temporal Table
举个栗子,假设你在Mysql中有两张表: browse_event、product_history_info。browse_event: 事件表,某个用户在某个时刻浏览了某个商品,以及商品的价值。如下:SELECT * FROM browse_event;+--------+---------------------+-----------+-----------+-----------...
2019-12-14 18:20:51
3498
2
原创 Flink Table & SQL 用户自定义函数: UDF、UDAF、UDTF
本文总结Flink Table & SQL中的用户自定义函数: UDF、UDAF、UDTF。UDF: 自定义标量函数(User Defined Scalar Function)。一行输入一行输出。UDAF: 自定义聚合函数。多行输入一行输出。UDTF: 自定义表函数。一行输入多行输出或一列输入多列输出。测试数据// 某个用户在某个时刻浏览了某个商品,以及商品的价...
2019-12-08 14:02:41
15979
2
原创 Flink Table & SQL AppendStreamTableSink、RetractStreamTableSink、UpsertStreamTableSink
Flink Table & SQL StreamTableSink有三类接口: AppendStreamTableSink、UpsertStreamTableSink、RetractStreamTableSink。AppendStreamTableSink: 可将动态表转换为Append流。适用于动态表只有Insert的场景。RetractStreamTableSink: 可将...
2019-11-30 16:55:27
5862
3
原创 Flink Table & SQL Catalog 及DataStream、Table相互转换
Catalog维护了Flink Table和SQL中的元数据,如Database、Table、View、UDF等。Catalog类型GenericInMemoryCatalog: 内置Catalog。名为default_catalog,默认数据库名为default_database。默认,如用TableEnvironment#registerTable注册的表,均会注册到这个Catalog...
2019-11-23 17:46:47
5321
原创 Flink DataStream 基于Interval Join实时Join过去一段时间内的数据
Interval Join: 间隔连接。如下示例:一条流(Left Keyed Stream) 按Key Join另一条流(Right Keyed Stream)过去2分钟内(间隔)的数据。Interval Join语法leftKeyedStream .intervalJoin(rightKeyedStream) // 时间间隔,设定下界和上界 .between(Time.min...
2019-11-17 14:22:51
7194
4
原创 Flink DataStream Window Join: Inner Join、Left Join、Right Join
Flink DataStream中支持双流Join的算子目前已知有4种,如下:Connect: 在之前的文章中已有总结。一般和广播流BroadcastStream(如配置流)结合使用。Join: 连接。语法:// Left DataStreamstream // Right DataStream .join(otherStream) // Left Key .w...
2019-11-16 22:17:47
2019
1
原创 Flink DataStream Window 迟到数据处理
基于EventTime处理数据,先总结下先前得到的结论:EventTime下会有乱序或迟到的问题,需要借助Watermark来解决。Flink中的乱序或迟到: 实际上是一回事, MaxOutOfOrderness或AllowedLateness都是用来解决乱序问题的。具体区别:A. MaxOutOfOrderness: 第一次窗口计算触发前,最多允许乱序或迟到多久。B. Allow...
2019-11-10 17:44:41
1915
2
原创 Flink DataStream Window 剔除器 Evictor
Evictor可在Window Function执行前或后,从原Window中剔除元素。本文总结Flink DataStream Window内置Evictor: 数量剔除器 CountEvictor、阈值剔除器 DeltaEvictor、时间剔除器 TimeEvictor的剔除原理及使用。CountEvictor剔除原理不论是在Window Function之前剔除,或是在Window ...
2019-11-10 12:14:52
2831
3
原创 Flink DataStream Window 触发器 Trigger
Flink DataStream触发器Trigger决定了何时触发WindowFunction计算。本文总结Flink内置触发器并梳理Trigger API。八大内置触发器EventTimeTriggerEventTime Window的默认触发器。基于事件时间,当Watermark>=Window End Time时,触发窗口计算。ContinuousEventTimeTr...
2019-11-09 21:31:13
3017
1
原创 Flink DataStream Window 窗口函数 ReduceFunction、AggregateFunction、ProcessWindowFunction
Window Function在窗口触发后,负责对窗口内的元素进行计算。Window Function分为两类: 增量聚合和全量聚合。增量聚合: 窗口不维护原始数据,只维护中间结果,每次基于中间结果和增量数据进行聚合。如: ReduceFunction、AggregateFunction。全量聚合: 窗口需要维护全部原始数据,窗口触发进行全量聚合。如:ProcessWindowFunctio...
2019-11-09 14:36:00
8388
1
原创 Flink DataStream Window Time Window、Count Window、Session Window
在Flink DataStream中,可以通过Window,将无限的流(Streaming)分割成有限的批(Batch),进而进行各种统计。本文总结Flink DataStream中Window的分类,以及常用Window Time Tumbling Window(基于时间的翻滚窗口)、Time Sliding Window(基于时间的滑动窗口)、Count Tumbling Window(基于...
2019-11-03 16:37:37
1678
原创 Flink DataStream 提取Timestamp与生成Watermark
为了基于事件时间来处理每个元素,Flink需要知道每个元素(即事件)的事件时间(Timestamp)。为了衡量事件时间的处理进度,需要指定水印(Watermark)。本文总结Flink DataStream中提取Timestamp与生成Watermark的两种方式。在Source Function中直接指定Timestamp和生成Watermark在源端(即SourceFunction)中直...
2019-11-03 16:31:13
2544
原创 Flink DataStream EventTime下Watermark生成与Window触发
本文总结Flink DataStream EventTime下Watermark的生成与Window计算的触发时机,旨在弄清楚以下问题:窗口起止时间对MaxOutOfOrderness或AllowedLateness的理解窗口计算第一次触发的时机窗口计算再次触发的时机窗口销毁的时机并行流中多并行度下Watermark的生成与窗口触发的时机Kafka并行流中...
2019-11-03 16:23:40
1130
1
原创 Flink DataStream 算子 Map、FlatMap、Filter、KeyBy、Reduce、Fold、Aggregate
总结Flink DataStream 算子: Map、FlatMap、Filter、KeyBy、Reduce、Fold、Aggregate、Iterate的使用。Map [DataStream->DataStream]Map: 一对一转换,即一条转换成另一条。package com.bigdata.flink.dataStreamMapOperator;import com.big...
2019-09-28 17:26:12
18707
5
原创 Flink DataStream RestAPI使用
文章目录RestAPI端口设置RestAPI使用1. 启动Yarn Session集群2. 关闭集群3. 查看集群概览4. 查看Dastboard页面5. 查看JobManager上的相关配置6. 查看JobManager Metrics7. 查看所有TaskManager8. 查看某个TaskManager9. 查看某个TaskManager Metrics10. 上传Jar包11. 查看所有J...
2019-09-15 14:32:55
4152
1
原创 Flink DataStream 八大分区策略与自定义分区器
分区策略决定了一条数据如何发送给下游。Flink中默认提供了八大分区策略(也叫分区器)。本文基于Flink 1.9.0总结Flink DataStream中的八大分区策略以及手动实现一个自定义分区器。八大分区策略继承关系图ChannelSelector: 接口,决定将记录写入哪个Channel。有3个方法:void setup(int numberOfChannels): 初始化输...
2019-09-08 23:19:47
10294
原创 Flink DataStream 可查询状态(Queryable State)
Flink从1.2.0开始支持可查询状态(Queryable State)服务。可查询状态,允许用户从外部系统(如业务系统)查询Flink作业内部的状态。Queryable State服务架构[外链图片转存失败(img-m4jmzrNi-1567864248721)(https://github.com/wangpei1949/photos/raw/master/bigDataNut/flin...
2019-09-07 21:52:04
4379
4
原创 Flink DataStream基于Broadcast State动态更新配置以实现实时过滤数据并增加字段
Flink从1.5.0开始支持广播状态(Broadcast State)。广播状态可以用来解决如下问题:一条流需要根据规则或配置处理数据,而规则或配置又是随时变化的。此时,就可将规则或配置作为广播流广播出去,并以Broadcast State的形式存储在下游Task中。下游Task根据Broadcast State中的规则或配置来处理常规流中的数据。场景举例:动态更新计算规则: 如事件流...
2019-08-17 22:38:32
10656
7
原创 Flink DataStream分流、合流
本文总结Flink中非常有用的功能,分流和合流。分流(Split/Side)分流可以将一个流拆分成多个流。基于Split...Select...package com.bigdata.flink;import lombok.extern.slf4j.Slf4j;import org.apache.flink.api.java.tuple.Tuple3;import org.apac...
2019-08-17 22:28:14
10937
原创 Flink DataStream写入Elasticsearch与容错
本文基于Flink 1.8 和ES 6.2.4 总结Flink写入Elasticsearch的问题点。在使用ElasticsearchSink时,需要注意以下几点:ElasticsearchSink内部使用RestHighLevelClient(ES >=6.x)或TransportClient(ES <6.x)与Elasticsearch集群进行通信。Elasticse...
2019-08-11 14:58:10
7746
5
原创 Flink DataStream读写Kafka
Flink提供了Kafka连接器,用于从或向Kafka读写数据。本文总结Flink与Kafka集成中的问题,并对一些疑点进行总结和梳理。问题一: 读Kafka的方式## 读取一个TopicFlinkKafkaConsumer010#FlinkKafkaConsumer010(String topic, DeserializationSchema<T> valueDeserial...
2019-08-04 23:40:34
4969
原创 Flink DataStream Checkpoint和Savepoint
针对不同场景,Flink提供了Checkpoint和Savepoint两种容错机制。本文总结Checkpoint和Savepoint的使用。CheckpointCheckpoint存储状态数据,由Flink自己定期触发和清除,轻量快速,主要应用于作业生命周期内故障时恢复。Checkpoint配置StreamExecutionEnvironment env = StreamExecutio...
2019-07-28 15:34:02
2460
原创 Flink DataStream流表与维表Join(Async I/O)
在Flink 流处理过程中,经常需要和外部系统进行交互,如维度补全,用维度表补全事实表中的字段。默认情况下,在MapFunction中,单个并行只能用同步方式去交互: 将请求发送到外部存储,IO阻塞,等待请求返回,然后继续发送下一个请求。这种同步交互的方式往往在网络等待上就耗费了大量时间。为了提高处理效率,可以增加MapFunction的并行度,但增加并行度就意味着更多的资源,并不是一种非常好的解...
2019-07-20 21:36:46
7969
3
Java数据结构和算法PDF带目录
2017-04-01
中文文本分类语料(复旦)-训练集
2017-03-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人