flink开发如何正确引用架包jar
flink架包引用一般涉及到三个部分:一是flink版本、scala版本、各Connnector版本等,二是需要开发的部分,如果正确引用flink集群中已经存在的架包,三是flink集群本身没有,需要引用提交的架包或者提前在集群中上传。
首先,flink的开发可以采用idea+maven的方式来构建项目,其中maven如何打架包就不在此赘述,需要注意的一点,idea的版本和maven版本有不兼容的情况,导致maven依赖引用异常。
第二,flink的版本,可以在apache flink中https://flink.apache.org/zh/downloads.html看到已经发布的版本,一般现在用的比较多的1.7,1.8的版本,1.9和1.10版本出来没多久,生产上直接部署的不是很多,作为个人尝鲜可以使用。
scala版本,如果你是采用scala进行开发,一般在引用flink-scala的架包,需要制定scala的版本,现在用的比较多的有2.11,2.12,scala的版本更新比较大,需要注意。
比如:
将 flink-java 的 artifact id 替换为 flink-scala_2.11,同时将 flink-streaming-java_2.11 替换为 flink-streaming-scala_2.11。
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-scala_2.11</artifactId>
<version>1.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients_2.11</artifactId>
<version>1.10.0</version>
</dependency>
第三,需要引用哪些架包呢,flink的架包一般比较多,需要了解主要架包都是做什么的,那么在使用的时候就可以灵活引入了。其次,maven的架包有scope的概念,就是最终形成的架包是否将依赖打入,如果你在本地测试,那么scope可以不填,默认是打入的。如果是提交到集群去执行任务,那么flink-java等架包在集群环境都是有的,为了避免冲突,一般都是provided。类似这样:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>${flink.version}</version>
<!-- provided在这表示此依赖只在代码编译的时候使用,运行和打包的时候不使用 -->
<!--<scope>provided</scope>-->
</dependency>
一般集群中的架包,以默认的来看,下载了flink1.10版本的安装包,并解压,可以看到有这些
libt目录下的jar:
opt目录下的jar:
编写steam代码的引用架包一般有这些:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>${flink.version}</version>
<!-- provided在这表示此依赖只在代码编译的时候使用,运行和打包的时候不使用 -->
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.11</artifactId>
<version>${flink.version}</version>
<!--<scope>provided</scope>-->
</dependency>
<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>
第四,集群没有的一般都有需要用的,比如常用Connector,kafka client ,statebackend等。
<dependency>
<groupId>org.apache.bahir</groupId>
<artifactId>flink-connector-redis_2.11</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-statebackend-rocksdb_2.11</artifactId>
<version>${flink.version}</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-kafka-0.11_2.11</artifactId>
<version>${flink.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.11.0.3</version>
</dependency>
上述的依赖一般都可以在maven中央仓库搜到或者阿里云maven中搜到
maven中央仓库:https://mvnrepository.com/
aliyun中央仓库:https://maven.aliyun.com/mvn/view
如果觉得对你有帮助,请点个赞。