Flink 原理、实战与性能优化 (15):环境准备 2.3.4

阅读数:7 2019 年 12 月 11 日 20:40

Flink原理、实战与性能优化(15):环境准备 2.3.4

(项目配置)

内容简介
这是一部以实战为导向,能指导读者零基础掌握 Flink 并快速完成进阶的著作,从功能、原理、实战和调优等 4 个维度循序渐进地讲解了如何利用 Flink 进行分布式流式应用开发。作者是该领域的资深专家,现就职于第四范式,曾就职于明略数据。
全书一共 10 章,逻辑上可以分为三个部分:
第一部分(第 1~2 章)
主要介绍了 Flink 的核心概念、特性、应用场景、基本架构,开发环境的搭建和配置,以及源代码的编译。
第二部分(第 3~9 章)
详细讲解了 Flink 的编程范式,各种编程接口的功能、应用场景和使用方法,以及核心模块和组件的原理和使用。
第三部分(第 10 章)
重点讲解了 Flink 的监控和优化,参数调优,以及对反压、Checkpoint 和内存的优化。

对于通过项目模板生成的项目,项目中的主要参数配置已被初始化,所以无须额外进行配置,如果用户通过手工进行项目的创建,则需要创建 Flink 项目并进行相应的基础配置,包括 Maven Dependences、Scala 的 Version 等配置信息。

1. Flink 基础依赖库

对于 Java 版本,需要在项目的 pom.xml 文件中配置如代码清单 2-4 所示的依赖库,其中 flink-java 和 flink-streaming-java 分别是批量计算 DataSet API 和流式计算 DataStream API 的依赖库,{flink.version}是官方的发布的版本号,用户可根据自身需要进行选择,本书中所有的实例代码都是基于 Flink 1.7 版本开发。

代码清单 2-4 Flink Java 项目依赖配置库
复制代码
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>{flink.version}</version> <!—指定 flink 版本 -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.11</artifactId>
<version>{flink.version}</version> <!—指定 flink 版本 -->
<scope>provided</scope>
</dependency>

创建 Scala 版本 Flink 项目依赖库配置如下,和 Java 相比需要指定 scala 的版本信息,目前官方建议的是使用 Scala 2.11,如果需要使用特定版本的 Scala,则要将源码下载进行指定 Scala 版本编译,否则 Scala 各大版本之间兼容性较弱会导致应用程序在实际环境中无法运行的问题。Flink 基于 Scala 语言项目依赖配置库如代码清单 2-5 所示:

代码清单 2-5 Flink Scala 项目依赖配置库
复制代码
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-scala_2.11</artifactId>
<version>{flink.version} </version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-scala_2.11</artifactId>
<version>{flink.version} </version>
<scope>provided</scope>
</dependency>

另外在上述 Maven Dependences 配置中,核心的依赖库配置的 Scope 为 provided,主要目的是在编译阶段能够将依赖的 Flink 基础库排除在项目之外,当用户提交应用到 Flink 集群的时候,就避免因为引入 Flink 基础库而导致 Jar 包太大或类冲突等问题。而对于 Scope 配置成 provided 的项目可能出现本地 IDE 中无法运行的问题,可以在 Maven 中通过配置 Profile 的方式,动态指定编译部署包的 scope 为 provided,本地运行过程中的 scope 为 compile,从而解决本地和集群环境编译部署的问题。

注意 由于 Flink 在最新版本中已经不再支持 scala 2.10 的版本,建议读者使用 scala 2.11,同时 Flink 将在未来的新版本中逐渐支持 Scala 2.12。

2. Flink Connector 和 Lib 依赖库

除了上述 Flink 项目中应用开发必须依赖的基础库之外,如果用户需要添加其他依赖,例如 Flink 中內建的 Connector,或者其他第三方依赖库,需要在项目中添加相应的 Maven Dependences,并将这些 Dependence 的 Scope 需要配置成 compile。

如果项目中需要引入 Hadoop 相关依赖包,和基础库一样,在打包编译的时候将 Scope 注明为 provided,因为 Flink 集群中已经将 Hadoop 依赖包添加在集群的环境中,用户不需要再将相应的 Jar 包打入应用中,否则容易造成 Jar 包冲突。

注意 对于有些常用的依赖库,为了不必每次都要上传依赖包到集群上,用户可以将依赖的包可以直接上传到 Flink 安装部署路径中的 lib 目录中,这样在集群启动的时候就能够将依赖库加载到集群的 ClassPath 中,无须每次在提交任务的时候上传依赖的 Jar 包。

Flink原理、实战与性能优化(15):环境准备 2.3.4

购书地址 https://item.jd.com/12518733.html?dist=jd

评论

发布