大数据 Flink部落3


(刚入大数据的大门,让每一篇文章陪伴我的成长,希望看了文章的同学能够共同进步,相互交流,也希望发现错误能够指正,也希望能和大家一同交流讨论QQ:1793655668)

前期配置

  • Java 版本至少是Java 8
  • 必须使用 Maven 3
  • JDK1.8
  • SDK2.11(Scala语言)
  • Flink版本1.10
  • IDE:IntelliJ IDEA
  • Windows操作系统

Flink程序

首先,创建一个maven程序,配置好相应的运行环境
创建好程序后,配置程序的依赖,配置文件pom.xml

Flink程序的五个部分:

  1. 获取执行环境
  2. 载入数据
  3. 对数据进行处理/转换
  4. 设置数据输出方式
  5. 启动程序,开始执行

其实说简单一些就是三个步骤:

  1. 获取运行环境,获取数据源(Source)
  2. 对输出进行处理(算子操作)
  3. 输出(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源接入:

扫描二维码关注公众号,回复: 10681670 查看本文章

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();  
发布了4 篇原创文章 · 获赞 30 · 访问量 1339

猜你喜欢

转载自blog.csdn.net/weixin_43648214/article/details/105443957