本文简述通过 maven 和 gradle 快速构建的 Flink 工程. 建议安装好 Flink 以后构建自己的 Flink 项目, 安装与示例运行请查看: Flink 快速入门 -- 安装与示例运行 https://mp.weixin.qq.com/s/4TA98WySKvv1ck_qCPyDOw .
在安装好 Flink 以后, 只要快速构建 Flink 工程, 并完成相关代码开发, 就可以轻松入手 Flink.
构建工具
Flink 项目可以使用不同的构建工具进行构建. 为了能够快速入门, Flink 为以下构建工具提供了项目模版:
Maven
Gradle
这些模版可以帮助你搭建项目结构并创建初始构建文件.
Maven
环境要求
唯一的要求是使用 Maven 3.0.4 (或更高版本) 和安装 Java 8.x.
创建项目
使用以下命令之一来 创建项目:
使用 Maven archetypes
- $ mvn archetype:generate \
- -DarchetypeGroupId=org.apache.flink \
- -DarchetypeArtifactId=flink-quickstart-java \
- -DarchetypeVersion=1.9.0
运行 quickstart 脚本
curl https://flink.apache.org/q/quickstart.sh | bash -s 1.9.0
下载完成后, 查看项目目录结构:
- tree quickstart/
- quickstart/
├── pom.xml
└── src
└── main
├── java
│ └── org
│ └── myorg
│ └── quickstart
│ ├── BatchJob.java
│ └── StreamingJob.java
└── resources
└── log4j.properties
示例项目是一个 Maven project, 它包含了两个类: StreamingJob 和 BatchJob 分别是 DataStream and DataSet 程序的基础骨架程序.
main 方法是程序的入口, 既可用于 IDE 测试 / 执行, 也可用于部署.
我们建议你将 此项目导入 IDE 来开发和测试它.
IntelliJ IDEA 支持 Maven 项目开箱即用. 如果你使用的是 Eclipse, 使用 m2e 插件 http://www.eclipse.org/m2e/ 可以
导入 Maven 项目.
一些 Eclipse 捆绑包默认包含该插件, 其他情况需要你手动安装.
请注意: 对 Flink 来说, 默认的 JVM 堆内存可能太小, 你应当手动增加堆内存.
在 Eclipse 中, 选择 Run Configurations -> Arguments 并在 VM Arguments 对应的输入框中写入:-Xmx800m.
在 IntelliJ IDEA 中, 推荐从菜单 Help | Edit Custom VM Options 来修改 JVM 选项.
构建项目
如果你想要 构建 / 打包你的项目, 请在项目目录下运行'mvn clean package' 命令. 命令执行后, 你将 找到一个 JAR 文件, 里面包含了你的应用程序, 以及已作为依赖项添加到应用程序的连接器和库: target/-.jar.
注意: 如果你使用其他类而不是 StreamingJob 作为应用程序的主类 / 入口, 我们建议你相应地修改 pom.xml 文件中的 mainClass 配置. 这样, Flink 可以从 JAR 文件运行应用程序, 而无需另外指定主类.
Gradle
环境要求
唯一的要求是使用 Gradle 3.x (或更高版本) 和安装 Java 8.x .
创建项目
使用以下命令之一来 创建项目:
Gradle 示例:
- build.gradle
- buildscript {
- repositories {
- jcenter() // this applies only to the Gradle 'Shadow' plugin
- }
- dependencies {
- classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4'
- }
- }
- plugins {
- id 'java'
- id 'application'
- // shadow plugin to produce fat JARs
- id 'com.github.johnrengelman.shadow' version '2.0.4'
- }
- // artifact properties
- group = 'org.myorg.quickstart'
- version = '0.1-SNAPSHOT'
- mainClassName = 'org.myorg.quickstart.StreamingJob'
- description = """Flink Quickstart Job"""
- ext {
- javaVersion = '1.8'
- flinkVersion = '1.9.0'
- scalaBinaryVersion = '2.11'
- slf4jVersion = '1.7.7'
- log4jVersion = '1.2.17'
- }
- sourceCompatibility = javaVersion
- targetCompatibility = javaVersion
- tasks.withType(JavaCompile) {
- options.encoding = 'UTF-8'
- }
- applicationDefaultJvmArgs = ["-Dlog4j.configuration=log4j.properties"]
- task wrapper(type: Wrapper) {
- gradleVersion = '3.1'
- }
- // declare where to find the dependencies of your project
- repositories {
- mavenCentral()
- maven { url "https://repository.apache.org/content/repositories/snapshots/" }
- }
- // 注意: 我们不能使用 "compileOnly" 或者 "shadow" 配置, 这会使我们无法在 IDE 中或通过使用 "gradle run" 命令运行代码.
- // 我们也不能从 shadowJar 中排除传递依赖 (请查看 https://github.com/johnrengelman/shadow/issues/159).
- // -> 显式定义我们想要包含在 "flinkShadowJar" 配置中的类库!
- configurations {
- flinkShadowJar // dependencies which go into the shadowJar
- // 总是排除这些依赖 (也来自传递依赖), 因为 Flink 会提供这些依赖.
- flinkShadowJar.exclude group: 'org.apache.flink', module: 'force-shading'
- flinkShadowJar.exclude group: 'com.google.code.findbugs', module: 'jsr305'
- flinkShadowJar.exclude group: 'org.slf4j'
- flinkShadowJar.exclude group: 'log4j'
- }
- // declare the dependencies for your production and test code
- dependencies {
- // --------------------------------------------------------------
- // 编译时依赖不应该包含在 shadow jar 中,
- // 这些依赖会在 Flink 的 lib 目录中提供.
- // --------------------------------------------------------------
- compile "org.apache.flink:flink-java:${flinkVersion}"
- compile "org.apache.flink:flink-streaming-java_${scalaBinaryVersion}:${flinkVersion}"
- // --------------------------------------------------------------
- // 应该包含在 shadow jar 中的依赖, 例如: 连接器.
- // 它们必须在 flinkShadowJar 的配置中!
- // --------------------------------------------------------------
- //flinkShadowJar "org.apache.flink:flink-connector-kafka-0.11_${scalaBinaryVersion}:${flinkVersion}"
- compile "log4j:log4j:${log4jVersion}"
- compile "org.slf4j:slf4j-log4j12:${slf4jVersion}"
- // Add test dependencies here.
- // testCompile "junit:junit:4.12"
- }
- // make compileOnly dependencies available for tests:
- sourceSets {
- main.compileClasspath += configurations.flinkShadowJar
- main.runtimeClasspath += configurations.flinkShadowJar
- test.compileClasspath += configurations.flinkShadowJar
- test.runtimeClasspath += configurations.flinkShadowJar
- javadoc.classpath += configurations.flinkShadowJar
- }
- run.classpath = sourceSets.main.runtimeClasspath
- jar {
- manifest {
- attributes 'Built-By': System.getProperty('user.name'),
- 'Build-Jdk': System.getProperty('java.version')
- }
- }
- shadowJar {
- configurations = [project.configurations.flinkShadowJar]
- }
- setting.gradle
- rootProject.name = 'quickstart'
或者运行 quickstart 脚本
bash -c "$(curl https://flink.apache.org/q/gradle-quickstart.sh)" -- 1.9.0 2.11
查看目录结构:
- tree quickstart/
- quickstart/
├── README
├── build.gradle
├── settings.gradle
└── src
└── main
├── java
│ └── org
│ └── myorg
│ └── quickstart
│ ├── BatchJob.java
│ └── StreamingJob.java
└── resources
└── log4j.properties
示例项目是一个 Gradle 项目, 它包含了两个类: StreamingJob 和 BatchJob 是 DataStream 和 DataSet 程序的基础骨架程序. main 方法是程序的入口, 即可用于 IDE 测试 / 执行, 也可用于部署.
我们建议你将 此项目导入你的 IDE 来开发和测试它. IntelliJ IDEA 在安装 Gradle 插件后支持 Gradle 项目. Eclipse 则通过 Eclipse Buildship 插件支持 Gradle 项目 (鉴于 shadow 插件对 Gradle 版本有要求, 请确保在导入向导的最后一步指定 Gradle 版本 >= 3.0). 你也可以使用 Gradle's IDE integration 从 Gradle 创建项目文件.
构建项目
如果你想要 构建 / 打包项目, 请在项目目录下运行'gradle clean shadowJar' 命令. 命令执行后, 你将 找到一个 JAR 文件, 里面包含了你的应用程序, 以及已作为依赖项添加到应用程序的连接器和库: build/libs/--all.jar.
注意: 如果你使用其他类而不是 StreamingJob 作为应用程序的主类 / 入口, 我们建议你相应地修改 build.gradle 文件中的 mainClassName 配置. 这样, Flink 可以从 JAR 文件运行应用程序, 而无需另外指定主类.
未来, 我们将分别介绍: Flink 流处理应用程序, Flink 批处理应用程序.
更多 Flink 原理知识:
穿梭时空的实时计算框架 --Flink 对时间的处理 https://mp.weixin.qq.com/s/u8apKfSitrHlmpBJ5v4rUQ
大数据实时处理的王者 - Flink https://mp.weixin.qq.com/s/OHLULye2GdmqgWdiaiw1bA
统一批处理流处理 --Flink 批流一体实现原理 https://mp.weixin.qq.com/s/o8ZIinTSeGZvfT19gyU2Eg
更多实时计算, Flink,Kafka 等相关技术博文, 欢迎关注实时流式计算:
来源: https://www.cnblogs.com/tree1123/p/11495964.html