IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Flink-数据局流DataStream -> 正文阅读

[大数据]Flink-数据局流DataStream

?

扫码关注系列文章

?Flink主要用来处理数据流,所以从抽象上来看就是对数据流的处理,正如前面大数据开发-Flink-体系结构?&& 运行架构提到写Flink程序实际上就是在写DataSource、Transformation、Sink。

  • DataSource是程序的数据源输入,可以通过StreamExecutionEnvironment.addSource(sourceFuntion)为程序
    添加一个数据源

  • Transformation是具体的操作,它对一个或多个输入数据源进行计算处理,比如Map、FlatMap和Filter等操作

  • Sink是程序的输出,它可以把Transformation处理之后的数据输出到指定的存储介质中

Flink针对DataStream提供了实现数据源的方式,可以归纳为以下几种:

  • 基于文件readTextFile(path)?读取文本文件,文件遵循TextInputFormat逐行读取规则并返回

  • 基于SocketsocketTextStream?从Socket中读取数据,元素可以通过一个分隔符分开

  • 基于集合fromCollection(Collection)?通过Java的Collection集合创建一个数据流,集合中的所有元素必须是相同类型的,需要注意的是,如果集合里面的元素要识别为POJO,需要满足下面的条件

总结:上面的要求其实就是为了让Flink可以方便地序列化和反序列化这些对象为数据流

  • 该类有共有的无参构造方法

  • 该类是共有且独立的(没有非静态内部类)

  • 类(及父类)中所有的不被static、transient修饰的属性要么有公有的(且不被final修饰),要么是包含公有的getter和setter方法,这些方法遵循java bean命名规范

自定义Source

使用StreamExecutionEnvironment.addSource(sourceFunction)将一个流式数据源加到程序中,具体这个sourceFunction?是为非并行源implements SourceFunction,或者为并行源?implements ParallelSourceFunction接口,或者extends RichParallelSourceFunction,对于自定义Source,Sink, Flink内置了下面几种Connector

连接器是否提供Source支持是否提供Sink支持
Apache Kafka
ElasticSearch
HDFS
Twitter Streaming PI

? ?对于Source的使用,其实较简单,这里给一个较常用的自定义Source的KafaSource的使用例子。更多相关源码可以查看

Source数据源

  1. 从已有集合读取数据

  2. List<Tuple3<String, String, Integer>> tuple3List = Arrays.asList(Tuple3.of("zs", "532101xxx", 1),Tuple3.of("ls", "532102xxx", 2),Tuple3.of("ww", "532103xxx", 2));
    DataStream<Tuple2<String, Integer>> dataStream = env.fromCollection(tuple3List)

? ?2.读取任意类型的数据

env.fromElements(1, 2, "date")

? 3.从文件读取数据

env.readTextFile("D:\\test.txt")

? 4.从kafka中读取

pom.xml引入

<dependency>    <groupId>org.apache.flink</groupId>    <artifactId>flink-connector-kafka_2.11</artifactId>    <version>1.13.0</version></dependency>

Kafka Consumer 代码如下

Properties properties = new Properties();properties.setProperty("bootstrap.servers", "localhost:9092");properties.setProperty("group.id", "test");DataStream<String> stream = env??.addSource(new?FlinkKafkaConsumer<>("topic",?new?SimpleStringSchema(),?properties));

Transfromation转换

? ? 对于Transformation ,Flink提供了很多的算子,map、flatMap...

map

????DataStream → DataStream Takes one element and produces one element. A map function that doubles the values of the input stream:

flatMap

DataStream → DataStream Takes one element and produces zero, one, or more elements. A flatmap function that splits sentences to words:

Sink

Flink针对DataStream提供了大量的已经实现的数据目的地(Sink),具体如下所示

  • writeAsText():讲元素以字符串形式逐行写入,这些字符串通过调用每个元素的toString()方法来获取

  • print()/printToErr():打印每个元素的toString()方法的值到标准输出或者标准错误输出流中

  • 自定义输出:addSink可以实现把数据输出到第三方存储介质中, Flink提供了一批内置的Connector,其中有的Connector会提供对应的Sink支持

FlinkKafkaProducer producer = new FlinkKafkaProducer(brokerList, topic, new SimpleStringSchema());
data.addSink(producer);

? ?当然sink也可以自定义,自定义Sink需要建议继承RichSinkFunction类。

? ?如果觉得文章能帮到您,欢迎关注微信公众号:“蓝天Java大数据” ,共同进步!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-05 20:22:40  更:2021-07-05 20:23:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 9:05:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码