Flink基础概念

Apache Flink 用于数据流上的有状态计算, 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。

Flink 应用程序可以消费来自消息队列或分布式日志这类流式数据源(例如 Apache Kafka 或 Kinesis)的实时数据,也可以从各种的数据源中消费有界的历史数据。同样,Flink 应用程序生成的结果流也可以发送到各种数据汇中。

Flink application with sources and sinks

特点:

  • 流批统一
  • 低延时,高吞吐
  • 大规模计算,可以水平扩展
  • 支持Yarn,K8S,单机模式运行
  • 高容错,自动重试,精确一致

2. 批处理与流处理

2.1 有界流

有界流(Bounded Stream)是指具有确定起点和终点的数据流,整个数据集大小是有限且预先可知或在处理前可以一次性加载全部数据。

  • 一个历史订单记录文件,包含过去一年的所有订单详情,文件大小固定,可以在读取时完整加载到内存或分布式存储中进行处理。
  • 一次数据库查询结果,例如查询某个时间范围内的所有用户活动记录,查询结果集合是固定的。

2.2 无界流

无界流(Unbounded Stream)是没有预设结束点的数据流,数据会持续不断地产生,理论上数据量无限大。这类流需要持续不断地被摄取、处理和输出。

  • 实时日志流,服务器每秒都在生成新的访问日志,这些日志会源源不断地流入处理系统,无法预先知道何时会有最后一个日志条目。
  • 社交媒体平台上的用户动态流,用户的点赞、评论、分享等行为持续发生,形成一条不断增长且没有明确终点的数据流。

Bounded and unbounded streams

2.3 批处理

批处理 (Batch Processing)是指一次性处理大量预先收集好的、静态且历史性的数据集,通常在一个确定的时间窗口内完成计算。

  • 每日销售报表生成:假设一个电商公司每天晚上要汇总过去24小时内的所有订单信息,以计算总的销售额、最受欢迎的产品等统计数据。这些数据会在每日凌晨集中批量导入分析系统进行处理,并在早上提供报表结果。
  • 数据仓库ETL作业:企业可能每天或每周从多个数据库或数据源抽取数据,然后转换和加载到数据仓库中,以便进行离线分析。这一过程包含了批量读取、清洗、转化和聚合等多个步骤。

2.4 流处理

流处理 (Stream Processing)实时或近实时地对连续不断的、动态流入的数据流进行即时计算与处理,输出通常是连续更新的。

  • 实时欺诈检测:信用卡公司在交易发生时就对其进行实时分析,判断是否存在欺诈行为。每笔新的交易记录作为一条事件实时发送给流处理引擎,引擎立即执行规则并决定是否拒绝该笔交易。
  • 社交媒体情感分析:每当有用户发布一条新推文时,社交媒体平台可以使用流处理技术对其内容进行实时的情感分析,从而快速了解公众情绪的变化趋势。

2.5 Flink处理方式

在Apache Flink中,针对这两种类型的数据流有不同的处理方式:

  • 对于有界流,Flink可以采用批处理模式高效地执行全量计算,例如全局排序、聚合分析等操作,并能保证计算结果的一致性。
  • 对于无界流,则使用流处理模式,要求系统能够实时地对新到达的数据进行处理,同时提供窗口机制来实现近似实时的聚合统计或其他复杂事件处理功能,以适应数据流无限、连续的特点。

3. Flink角色

3.1 客户端Client

代码呦客户端获取并转换提交给JobManager

3.2 JobManager

JobManager是集群的管理者,对作业进行调度管理。会对作业进行进一步处理转换,然后分发给各个TaskManager

3.3 TaskManager

TaskManager是真正干活的人,对数据进行具体的处理操作