Flink(一)Flink基础

目录

    • 1、Flink是什么
    • 2、Flink的特性、优点
    • 2.1、流式模型,高吞吐、低延时
    • 2.2、丰富的时间语义,支持 Event Time
    • 2.3、良好的乱序数据处理能力
    • 2.4、高度灵活的窗口
    • 2.5、exactly-once 语义
    • 2.6、带反压的连续流模型
    • 3、标题

1、Flink是什么

Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。此外,Flink的运行时本身也支持迭代算法的执行。从部署上讲,Flink支持local模式、集群模式(standalone集群或者Yarn集群)、云端部署。
-----------------Flink官网
Flink提供了多种抽象数据Api:
DataSet API, 对静态数据进行批处理操作,将静态数据抽象成分布式的数据集,用户可以方便地使用Flink提供的各种操作符对分布式数据集进行处理,支持Java、Scala和Python。

DataStream API,对数据流进行流处理操作,将流式的数据抽象成分布式的数据流,用户可以方便地对分布式数据流进行各种操作,支持Java和Scala。

Table API,对结构化数据进行查询操作,将结构化数据抽象成关系表,并通过类SQL的DSL对关系表进行各种查询操作。Flink 与 Hive 集成的功能会在 1.9.0 版本中作为试用功能发布,用户可以通过 Table API 或者 SQL Client 的模式与 Hive 进行交互。10版本在写这篇文章时发布不久,完善了hive的部分,但是大多数公司生产中使用hive还是sparksql更加稳妥,期待未来Flink这方面做得更好。

2、Flink的特性、优点

  • 流式模型,高吞吐、低延时
  • 丰富的时间语义,支持 Event Time
  • 良好的乱序数据处理能力
  • 高度灵活的窗口,Flink 支持滚动窗口,滑动窗口,统计窗口,session 窗口,以及数据驱动的窗口
  • exactly-once 语义
  • 带反压的连续流模型,Flink streaming 在运行时有着天然的流控:慢的数据 sink 节点会反压(backpressure)快的数据源(sources)
  • 完善的容错机制
  • 批流api统一,且Api设计合理功能强大
  • 完善的状态编程
  • 内存管理,Flink在 JVM 中实现了自己的内存管理。

2.1、流式模型,高吞吐、低延时

我们知道spark所有的高级api都是基于RDD的,而RDD本质上是批处理,SparkStreaming严格上来说是微批处理更合适,而Flink是严格的流式处理,基于事件驱动的,理论上来说可以每个event都触发逻辑计算;因此它具有更高的吞吐和更低的延迟,在反欺诈、异常检测、金融风控防盗刷等要求延时极低的业务场景非常适用。

2.2、丰富的时间语义,支持 Event Time

在流处理中,时间是一个非常核心的概念,是整个系统的基石。事件发生时有触发时间、该事件到达Flink时有数据到达的时间、数据被真正处理时有处理时间。这几个时间往往都是有延时的不可能是同一个时间点。
Flink支持三种时间语义:

  • Event Time:事件发生的时间,如用户点击某个按钮时的时间
  • Processing Time:事件被真正处理的时间,Flink的Task线程处理该数据的时间
  • Ingestion Time:事件到达Flink Souce的时间,用户点击行为发送到kafka,kafka数据到达Flink的时间
    Flink默认是ProcessingTime,如果想使用eventTime可以进行如下设置:
val env = StreamExecutionEnvironment.getExecutionEnvironment
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)

2.3、良好的乱序数据处理能力

这一部分请参考我之前的博客:Flink之watermark和allowedLateness区别

2.4、高度灵活的窗口

Flink 中 Window 可以将无限流切分成有限流,是处理有限流的核心组件,现在Flink 中 Window 可以是时间驱动的(Time Window),也可以是数据驱动的(Count Window)

  1. 滚动窗口:
    翻滚时间窗口的窗口是固定的,比如设定一个1分钟的时间窗口,该时间窗口将只计算当前1分钟内的数据,而不会管前1分钟或后1分钟的数据。
    Flink(一)Flink基础_第1张图片
  2. 滑动窗口
    滑动窗口,顾名思义,该时间窗口是滑动的Flink(一)Flink基础_第2张图片
  3. 计数窗口
    Apache Flink 还提供计数窗口功能。如果计数窗口设置的为 100 ,那么将会在窗口中收集 100 个事件,并在添加第 100 个元素时计算窗口的值。
  4. session窗口
    主要是根据活动的事件进行窗口化,他们通常不重叠,也没有一个固定的开始和结束时间。一个session window关闭通常是由于一段时间没有收到元素。在这种用户交互事件流中,我们首先想到的是将事件聚合到会话窗口中(一段用户持续活跃的周期),由非活跃的间隙分隔开。

2.5、exactly-once 语义

这一部分内容较多,请参考我得下面两篇博客
Flink状态一致性保证 checkpoint
Flink 状态一致性 exactly-once

2.6、带反压的连续流模型

Flink 背压

3、标题

友情链接:
Flink之slot、并行度、graph优化
Flink之ProcessFunction API
Flink之聚合、WindowFunction
Flink之Trigger与Evictor
Flink之侧输出流和流的拆分

你可能感兴趣的:(flink,大数据)