和其他所有的计算框架一样,flink也有一些基础的开发步骤以及基础,核心的API,从开发步骤的角度来讲,主要分为四大部分
1.Environment
Flink Job在提交执行计算时,需要首先建立和Flink框架之间的联系,也就指的是当前的flink运行环境,只有获取了环境信息,才能将task调度到不同的taskManager执行。而这个环境对象的获取方式相对比较简单
2.Source
Flink框架可以从不同的来源获取数据,将数据提交给框架进行处理, 我们将获取数据的来源称之为数据源.
3.Transform
算子对数据进行操作后面我会详细介绍
4.Sink
在Flink中所谓的Sink其实可以表示为将数据存储起来的意思,也可以将范围扩大,表示将处理完的数据发送到指定的存储系统的输出操作
之前我们一直在使用的print方法其实就是一种Sink。
简单书写一个flink的应用工程
这里新建一个maven工程项目myflink刚开始学习的话我现在本地window下玩flink flink有多种写法 可以用java书写 也可以用scala书写 相比较java,scala书写对于flink来说更符合
//flink包
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-scala_2.11</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
//flink streaming包
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-scala_2.11</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
//flink 连接hadoop包
<groupId>org.apache.flink</groupId>
<artifactId>flink-shaded-hadoop-2-uber</artifactId>
<version>2.7.5-9.0</version>
</dependency>
//flink 连接kafka包
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-kafka_2.11</artifactId>
<version>1.10.1</version>
</dependency>
import org.apache.flink.streaming.api.scala._
case class WaterSensor(id:String,ts:Long,high:Double)
object MyExp1{
def main(args: Array[String]): Unit = {
// 流式数据处理环境
val env = StreamExecutionEnvironment.getExecutionEnvironment
//这个数组是自己造的先简单的查看一下
// val ds = env.fromCollection(Seq(
// WaterSensor("ws_001", 1577844001, 45.0),
// WaterSensor("ws_002", 1577844015, 43.0),
// WaterSensor("ws_003", 1577844020, 42.0)
// ))
//
//读hdfs上的文件 如果是本地的修改地址即可 注意要导入连接hdfs的包 不然会报错
val ds = env.readTextFile("hdfs://192.168.80.181:9000/data/userbehavior/UserBehavior.csv")
ds.print()
env.execute("one")
}
}
文件就全部读取到了
第二步 连接kafka上读取文件
启动kafka kafka-server-start.sh /opt/soft/kafka200/config/server.properties
创建一个mydemo消费者
kafka-topics.sh --zookeeper 192.168.80.181:2181 --create --topic demo --partitions 1 --replication-factor 1
开启消费
kafka-console-producer.sh --broker-list 192.168.80.181:9092 --topic demo
开启监听