快速构建第一个Flink工程

本文简述通过maven和gradle快速构建的Flink工程。建议安装好Flink以后构建自己的Flink项目,安装与示例运行请查看:Flink快速入门--安装与示例运行.
在安装好Flink以后,只要快速构建Flink工程,并完成相关代码开发,就可以轻松入手Flink。
构建工具
Flink项目可以使用不同的构建工具进行构建。为了能够快速入门,Flink 为以下构建工具提供了项目模版:
这些模版可以帮助你搭建项目结构并创建初始构建文件。
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 插件 可以
导入 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,Kafka等相关技术博文,欢迎关注实时流式计算:

快速构建第一个Flink工程的更多相关文章
- Flink从入门到放弃(入门篇2)-本地环境搭建&构建第一个Flink应用
		
戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-DataSteam API 5-集群部署 6-分布式缓存 7-重启策略 8-Fli ...
 - 01构建第一个SpringBoot工程
		
第一篇:构建第一个SpringBoot工程 文章指导 学习笔记 学习代码 创建项目 创建工程:Idea-> new Project ->Spring Initializr ->填写g ...
 - 只需两步!Eclipse+Maven快速构建第一个Spring Boot项目
		
随着使用Spring进行开发的个人和企业越来越多,Spring从一个单一简介的框架变成了一个大而全的开源软件,最直观的变化就是Spring需要引入的配置也越来越多.配置繁琐,容易出错,让人无比头疼, ...
 - 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程(十五)
		
在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...
 - 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程
		
在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...
 - 1. 构建第一个SpringBoot工程
		
1.File - New - Module 2.选项的是Spring Initializr(官方的构建插件,需要联网) ,一定要选择jdk 3.填写项目基本信息 Group:组织ID,一般分为多个段 ...
 - Spring Boot教程(十五)使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程
		
在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...
 - (转) SpringBoot非官方教程 | 第一篇:构建第一个SpringBoot工程
		
简介 spring boot 它的设计目的就是为例简化开发,开启了各种自动装配,你不想写各种配置文件,引入相关的依赖就能迅速搭建起一个web工程.它采用的是建立生产就绪的应用程序观点,优先于配置的惯例 ...
 - 企业级 SpringBoot 教程 (一)构建第一个SpringBoot工程
		
简介 spring boot 它的设计目的就是为例简化开发,开启了各种自动装配,你不想写各种配置文件,引入相关的依赖就能迅速搭建起一个web工程.它采用的是建立生产就绪的应用程序观点,优先于配置的惯例 ...
 
随机推荐
- php 生成随机字符串,数字,大写字母,小写字母,特殊字符可以随意组合
			
* 生成随机字符串* @param int $length 要生成的随机字符串长度* @param string $type 随机码类型:0,数字+大小写字母:1,数字:2, ...
 - SpringMVC学习笔记之---深入使用
			
SpringMVC深入使用 (一)基于XML配置的使用 (1)配置 1.SpringMVC基础配置 2.XML配置Controller,HandlerMapping组件映射 3.XML配置ViewRe ...
 - React Native-安卓环境的搭建
			
最近公司做一个项目,项目中使用React Native(简称RN)来写安卓APP,现在我分享下安卓环境搭建的过程. 我参照https://reactnative.cn/docs/getting-sta ...
 - WebSocket和HTTP协议的区别
			
HTTP: 1,无状态协议. 2,短连接.(Ajax轮询方式或Long poll方式实现“持久连接”状态) 2,被动型. 客户端请求->服务器端响应.服务端不能主动联系客户端,只能有客户端发 ...
 - Example With JdbcDaoSupport
			
By extended the JdbcDaoSupport, set the datasource and JdbcTemplate in your class is no longer requi ...
 - js中更改this指向  以及回顾bind、call和apply
			
1.更改this指向 方法1:对this进行保存 var _this = this; 例: var _this = this; document.onclick = fu ...
 - Nginx + fastcgi + php 的原理与关系
			
CGI:Common Gateway Interface 公共网关接口,web服务器和脚本语言通信的一个标准.接口.协议[协议] FastCGI:CGI协议的升级版[协议] PHP-CGI: 实现了C ...
 - OCP培训 MySQL OCP认证实战培训【低价送OCP考证名额】
			
一.OCP培训 MySQL 5.7 OCP认证全套实战培训[低价送OCP考试名额] 课程目标: 风哥为满足想参加MySQL OCP考证的学员,而设计的一套比较全面OCP实战培训课程. 课程涉及MySQ ...
 - ECMAScript---object对象类型详解
			
普通对象:由大括号包裹起来的,由零到多个属性名和属性值(键值对)组成的 那什么是属性呢? 属性:描述当前对象特征的,属性名是当前具备这个特征,属性值是这个特征的描述(专业语法,属性名称为键[key], ...
 - Java基础之抽象类与接口
			
Java基础之抽象类与接口 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候 ...