(刚入大数据的大门,让每一篇文章陪伴我的成长,希望看了文章的同学能够共同进步,相互交流,也希望发现错误能够指正,也希望能和大家一同交流讨论QQ:1793655668)
前期配置
- Java 版本至少是Java 8
- 必须使用 Maven 3
- JDK1.8
- SDK2.11(Scala语言)
- Flink版本1.10
- IDE:IntelliJ IDEA
- Windows操作系统
Flink程序
首先,创建一个maven程序,配置好相应的运行环境
创建好程序后,配置程序的依赖,配置文件pom.xml
Flink程序的五个部分:
- 获取执行环境
- 载入数据
- 对数据进行处理/转换
- 设置数据输出方式
- 启动程序,开始执行
其实说简单一些就是三个步骤:
- 获取运行环境,获取数据源(Source)
- 对输出进行处理(算子操作)
- 输出(Sink)
获取执行环境
Scala代码:
val env = StreamExecutionEnvironment.getExecutionEnvironment //搭建运行环境
env.setParallelism(1) //设置并行度(意味着多线程和单线程我的理解)
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
Java代码:
//第一步:获取运行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
载入数据
从文件中读取:
Scala代码:
//从文件中读取
val ReCommentStream = env.readTextFile("F:\\StreamUnion\\src\\main\\resources\\1.csv")
Java代码:
//第二步:从文件中读取
DataStreamSource<String> videoStream = env.readTextFile("F:\\ConnectJavaStream\\src\\main\\resources\\1.csv");
从Kafka源接入:
Scala代码:
//指定kafka的启动集群
properties.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092")
//指定消费者组
properties.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "flinkConsumer")
//指定key的反序列化类型
properties.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, classOf[StringDeserializer].getName)
//指定value的反序列化类型
properties.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, classOf[StringDeserializer].getName)
//指定自动消费的策略
properties.setProperty(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest")
Java代码:
Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "localhost:9092");
// only required for Kafka 0.8
properties.setProperty("zookeeper.connect", "localhost:2181");
properties.setProperty("group.id", "test");
对数据进行处理/转换(算子Transformation)
简单地说,这就是我们数据流操作中的算子,什么叫做算子呢,就是一个对数据进行处理的模块。
这一步骤涉及内容很广,包括窗口函数,两条流Join操作等等,后续会进行慢慢地说明。
设置数据输出方式
Flink也包含两类Sink:
1.常用的sink会在后续的connectors中介绍。
2.自定义Sink
自定义Sink可以实现SinkFunction 接口,也可以继承RichSinkFunction。
数据的输出根据实际场景进行输出,可以直接print输出,也可以接入其他平台。
启动程序,开始执行
env.execute();