什么能被转化成流?


Flink 的 Java 和 Scala DataStream API 可以将任何可序列化的对象转化为流。Flink自带的序列化器有

  • 基本类型:即 String、Long、Integer、Boolean、Array
  • 复合类型:Tuples、POJOS、和 Scala case classes

而且 Flink 会交给 Kryo 序列化其他类型。也可以将其他序列化器和 Flink 一起使用。特别是有良好支持的 Avro。

Java tuples 和 POJOS


Fink 的原生序列化器可以高效地操作 tuples 和 POJOs

Tuples

对于java,Flink 自带有 Tuple0 到 Tuple25 类型。

Tuple2<String, Integer> person = Tuple2.of("Fred", 35);// zero based index!
String name = person.f0;
Integer age = person.f1;

POJOs

如果满足一下条件,Flink 将数据类型识别为 POJO类型(并允许"按名称"字段引用):

  • 该类是公有且独立的(没有非静态内部类)
  • 该类有公有的无参构造函数
  • 该类(及父类) 中所有的所有不被 static、transient 修饰的属性要么是公有的(且不被 final 修饰),要么是包含公有的 getter 和 setter 方法,这些方法遵循 Java Bean 命名规范。

示例:

public class Person{public String name;public Integer age;public Person(){};public Person(String name,Integer age){....};}
Person person = new Person("Fred Flintstone",35);

Flink 的序列化器支持的 POJO 类型数据结构升级。

Scala tuples 和 case classes
如果你了解 Scala , 那一定知道 tuple 和 case class。

一个完整的示例


该示例将关于人的记录流作为输入,并且过滤后只包含成年人。

package com.bigdata;import org.apache.flink.api.common.functions.*;
import org.apache.flink.streaming.api.datastream.*;
import org.apache.flink.streaming.api.environment.*;public class Examle {public static void main(String[] args) throws Exception {// TODO 1. 创建流环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();// TODO 2. 读取数据流DataStream<Person> flintstones = env.fromElements(new Person("Fred", 35),new Person("Wilma", 35),new Person("Pebbles", 2));// TODO 3. 操作数据路DataStream<Person> adults = flintstones.filter(new FilterFunction<Person>() {public boolean filter(Person person) throws Exception {return person.age > 18;}});// TODO 4. 打印输出结果adults.print();// TODO 5. 懒执行env.execute();}public static class Person{public String name;public Integer age;public Person() {};public Person(String name,Integer age) {this.name = name;this.age = age;};public String toString(){return this.name.toString() + ":age" + this.age.toString();}}
}

Stream 执行环境

每个 Flink应用都需要有执行环境,在该示例中为 env。流式应用需要用到 StreamExecutionEnvironment。

DataStream API 将你的应用构建为一个 Job graph, 并附加到 StreamExecutionEnvironment。当调用 env.execute()时此graph 就被打包并发送到 JobManager 上,后者对作业并行处理并将其子任务分发给

Task Manager 来执行。 每个作业的并行子任务将在 task slot 中执行。

注意,如果没有调用 execute(),应用就不会运行。

此分布式运行时取决于你的应用是否是可序列化的。它还要求所有依赖对集群中的每个节点均可用。

基本的 stream source


上述示例用 env.fromElements(...)方法构造 DataStream<Person>。这样将简单的流放在一起是为了方便用于原型或测试。
SreamExecuteEnvironment 上还有一个 fromCollection(Collection) 方法。因此, 你可以这样做:

List<Person> people = new ArrayList<Person>();people.add(new Person("Fred", 35));
people.add(new Person("Wilma", 35));
people.add(new Person("Pebbles", 2));DataStream<Person> flintstones = env.fromCollection(people);

另一个获取数据到流中的便捷方法是用 socket

DataStream<String> lines = env.socketTextStream("localhost", 9999)

或读取文件

DataStream<String> lines = env.readTextFile("file:///path");

在真实的应用中,最常用的数据源是那些支持低延迟,高吞吐并行读取以及重复 (高性能 和 容错能力为先决条件) 的数据源,例如 Apache Kafka,Kinesis 和各种文件系统。REST API 和数据库也经常用于增强流处理的能力 (Stream enrichment)。

基本的 streaming sink

上述示例用 adults.print() 打印其结果到 task manager 的日志中 (如果运行在 IDE中时,将会追加到你的 IDE 控制台)。它会对流中的每个元素都调用 toString() 方法。

输出看起来类似于

1> Fred: age 35
2> Wilma: age 35

1> 和 2> 指出输出来自哪个 sub-task (即 thread)

Flink学习笔记之DataStream API 简介相关推荐

  1. OPENMP学习笔记(1)——简介,模型,运行

    OPENMP学习笔记(1)--简介,模型,运行 简介: OpenMP的英文全称是Open Multiprocessing,一种应用程序接口(API,即Application Program Inter ...

  2. Redis学习笔记 - 数据类型与API(1)Key

    Redis学习笔记 - 数据类型与API(1)Key Key相关命令 1. 常用命令 命令 含义 时间复杂度 keys 查找所有符合给定模式 pattern 的 key O(N), N 为数据库中 k ...

  3. JavaScript学习笔记01【基础——简介、基础语法、运算符、特殊语法、流程控制语句】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  4. HoloLens开发学习笔记(一):HoloLens简介

    HoloLens开发学习笔记(一):HoloLens简介 一.HoloLens简介 Microsoft HoloLens是Windows Holographic的使用主要设备.HoloLens是一个W ...

  5. JavaWeb学习笔记2 —— Web服务器简介

    JavaWeb学习笔记2 -- Web服务器简介 参考教程B站狂神https://www.bilibili.com/video/BV12J411M7Sj 相关技术 ASP: 微软:国内最早流行的就是A ...

  6. 小猫爪:S32K3学习笔记09-S32K3之Safety简介

    小猫爪:S32K3学习笔记09-S32K3之Safety简介 1 前言 2 Safety相关硬件介绍 3 Safety相关软件介绍 4 Safety文章目录 END 1 前言   接下来,就要开始进学 ...

  7. 数据湖(十七):Flink与Iceberg整合DataStream API操作

    文章目录 Flink与Iceberg整合DataStream API操作 一.DataStream API 实时写入Iceberg表 1.首先在Maven中导入以下依赖

  8. Flink学习笔记(十一)Table API 和 SQL

    文章目录 11. Table API 和 SQL 11.1 快速上手 11.1.1 需要依赖 11.1.2 示例 11.2 基本 API 11.2.1 程序架构 11.2.2 创建表环境 11.2.3 ...

  9. Flink学习笔记:Operators之CoGroup及Join操作

    本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...

  10. Flink学习笔记【巨详细!】(二)

    第 3 章 3.1.1 环境配置 Flink 是一个分布式的流处理框架,所以实际应用一般都需要搭建集群环境.我们在进行Flink 安装部署的学习时,需要准备 3 台 Linux 机器.具体要求如下: ...

最新文章

  1. java 提取内容并排序
  2. linux mysql删除root_Linux下误删MySQL的root用户解决方法
  3. 开源 免费 java CMS - FreeCMS-功能说明-用户管理
  4. Linux Container 研究报告
  5. python特征选择pso_粒子群优化算法(PSO)之基于离散化的特征选择(FS)(三)
  6. python安卓自动化实现方法_uiautomator +python 实现安卓UI自动化
  7. python加法例子_第二讲 做加法的例子
  8. python二维分布图怎么画_python3怎样画二维点图
  9. js判断手机端和pc端
  10. gcc/g++参数详解
  11. android 生成车牌号,android 车牌号识别系统app源码
  12. java用正则表达式大全_Java 正则表达式 大全
  13. 计算机网络-试题库(含答案)
  14. 26-TeamBuilding-团队建设
  15. KOF97判定框查看方法
  16. 2022-2027年中国发动机仪表市场规模现状及投资规划建议报告
  17. 纯css实现tooltip文字浮框
  18. Web安全学习day01
  19. 浅谈数学、数学建模与人工智能(机器学习,深度学习)之间的关系?
  20. VR 全景建筑施工,3D可视化全景解决工程进展全视角呈现!

热门文章

  1. 51单片机简易智能温度检测系统
  2. 风力摆控制系统设计经验总结
  3. 使用JS打开word在线编辑,直接编辑在线doc文件
  4. NKOI 3539 移棋子游戏[6月月赛题A]
  5. 在 CentOS 中部署 KMS 服务器(vlmcsd)
  6. 浏览器中使用Github
  7. 为什么正定矩阵等于转置_正定矩阵
  8. Web测试与App测试的区别
  9. overleaf官网登录注册报错:Sorry, we could not verify that you are not a robot.
  10. HTML和JavaScript学习笔记