Flink技术内幕:架构设计与实现原理
上QQ阅读APP看书,第一时间看更新

1.3 Flink源代码的目录结构

Flink源代码的目录主体结构如图1-7所示。

018-1

图1-7 Flink源代码目录结构

接下来对Flink目录下的模块进行简单介绍。

(1)Flink主体模块

  • flink-annotations:主要提供定义文档方面的注解,以及类、方法使用范围的注解。
  • flink-clients:提供本地模式和Standalone模式的启动方式的提交实现,并提供其他模式的启动接口;提供作业的编译、提交以及对已运行作业进行查看等功能。
  • flink-core:提供通用的API、通用的工具包、各种配置相关的实现、各种数据类型及解析;提供核心文件系统的抽象接口和通用方法,以及内存管理部分和Flink I/O部分的接口。
  • flink-dist:提供Flink构建打包的配置和相关脚本。
  • flink-java:提供Flink批处理DataSet的Java API。
  • flink-metrics:提供Flink Metric注册的核心实现以及各种Metric Reporter。
  • flink-ml-parent:提供机器学习的基本抽象模型与接口。原来的版本中有基本的机器学习库,不过该库在Flink 1.9版本中被移除。
  • flink-optimizer:主要提供编译作业,生成优化后的执行计划(Plan)。
  • flink-python:提供Flink Python的运行支持,以及Python DataStream、DataSet和Table API。
  • flink-queryable-state:提供查询状态的Client API和查询状态的服务。
  • flink-runtime:提供运行时各个通信组件的实现、数据传输、HA服务、blob服务、检查点等(后文会详细介绍)。
  • flink-runtime-web:Flink Web部分,提供外部的REST API及Web UI。
  • flink-scala:提供Flink批处理DataSet的Scala API。
  • flink-state-backends:在flink-state-backends中只有RocksDB backend(RocksDB后端处理组件)的实现模块,file backend(文件后端处理组件)、memory backend(内存状态后端处理组件)等其他状态后端处理组件的实现都在flink-runtime模块中。
  • flink-streaming-java:提供Flink流处理DataStream的Java API。
  • flink-streaming-scala:提供Flink流处理DataStream的Scala API。
  • flink-table:提供Flink Table的Java API、Scala API、SQL解析、SQL客户端以及关于Table的运行时。

(2)Flink部署模块

  • flink-container:提供构建Flink镜像的Docker配置和Flink on Kubernetes的相关YAML的模板(如taskmanager.deployments.yaml.template)。
  • flink-mesos:Flink on Mesos的部署模式的启动和集群的管理。
  • flink-yarn:Flink on YARN的部署模式的启动和集群的管理。

(3)Flink测试模块

  • flink-end-to-end-tests:Flink端到端的测试。
  • flink-fs-tests:Flink文件系统的测试。
  • flink-jepsen:基于Jepsen的测试,通过模拟异常来验证Flink引擎的健壮性。
  • flink-test-utils-parent:Flink测试的一些基本工具类。
  • flink-tests:Flink重要模块的集成测试。
  • flink-yarn-tests:Flink on YARN的集成测试。

(4)Flink其他模块

  • flink-contrib:提供Docker启动Flink的方式和Wikipedia的connector。
  • flink-connectors:多种Flink connector的实现和API。
  • flink-docs:Flink文档的生成方式的实现。
  • flink-examples:一些Flink的应用实例。
  • flink-filesystems:Flink对HDFS、S3、Azure等多种文件系统的支持和实现。
  • flink-formats:Flink对Avro、Parquet、CSV、JSON等格式的支持。
  • flink-libraries:CEP、Gelly的实现,Scala、Java API和状态操作的API。
  • flink-quickstart:两个分别使用Scala和Java实现的完整Flink应用实例。对应官网quick start的应用源代码。
  • flink-scala-shell:实现类似于Spark shell、支持交互式的Scala shell。
  • flink-shaded-curator:Flink curator的Shade实现。
  • tools:支持Shade、CheckStyle、Releasing等项目代码管理的工具。