Flink
【摘要】 theme: condensed-night-purple Flink携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情目前唯一同时支持高吞吐、低延迟、高性能的分布式流式数据处理框架。像Apache Spark也只能兼顾高吞吐和高性能特性,主要因为在Spark Streaming流式计算中无法做到低延迟保障。优势支持事件事件概念。支持有状态计算,...
theme: condensed-night-purple
Flink
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情
目前唯一同时支持高吞吐、低延迟、高性能的分布式流式数据处理框架。像Apache Spark也只能兼顾高吞吐和高性能特性,主要因为在Spark Streaming流式计算中无法做到低延迟保障。
优势
- 支持事件事件概念。
- 支持有状态计算,保持了事件原本产生的时序性,避免网络传输带来的影响。
- 支持高度灵活的窗口操作,Flink将窗口分为Time、Count、Session以及Data-driven等类型的窗口操作,可以灵活的处罚条件定制化来达到对复杂的流传输模式的支持。
- 基于轻量级分布式快照实现容错,将大型计算任务的流程拆解成小的计算过程,分布到并行节点上处理。并通过 Checkpoints 将执行过程中的状态信息进行持久化存储,可以自动恢复出现异常的任务。
- 基于 JVM 实现独立的内存管理。
运行环境
- JDK 版本必须在 1.8 及以上
- Maven 版本必须在 3.0.4 及以上
- Hadoop 环境支持 hadoop 2.4、2.6、2.7、2.8 等主要版本
Flink 支持使用 Java/Scala 开发,以下示例代码全部使用 Java .
基本组件
-
Flink 架构体系基本上分三层(自顶向下):
- API & Libraries 层: 提供支撑流计算和批计算的接口,,同时在此基础上抽象出不同的应用类型的组件库。
- Runtime 核心层:Flink分布式计算框架的核心实现层,负责分布式作业的执行、映射转换、任务调度等。将 DataStream 和 DataSet 转成同意的可执行的 Task Operator 。
- 物理部署层:目前Flink支持本地、集群、云、容器部署,Flink通过盖层能够支持不同平台的部署,用户可以根据需要选择使用对应的部署模式。
-
Flink 基本架构
- Client 客户端:负责将任务提交到集群,与JobManager构建Akka连接,然后将任务提交到JobManager,通过和JobManager之间进行交互获取任务执行状态。
- JobManager:负责整个Flink集群任务的调度以及资源的管理
- TaskManager:相当于整个集群的Slave节点,负责具体的任务执行和对应任务在每个节点上的资源申请与管理。
编程模型
- BasicTypeInfo 数据类型:支持任意 Java 原生基本类型或 String 类型。
// 直接获取
DataSource<String> inputStream= environment.fromElements("1", "2", "3", "4", "5", "6");
// 从集合获取
ArrayList<String> list = new ArrayList<>(list2);
DataSource<String> inputStream= environment.fromCollection(list);Copy to clipboardErrorCopied
- TupleTypeInfo 数据类型:标识 Tuple 类型数据。
DataSource<Tuple2> inputStreamTuple = environment.fromElements(new Tuple2("fangpc", 1), new Tuple2("fangpengcheng", 2));Copy to clipboardErrorCopied
- PojoTypeInfo 数据类型:描述任意的 POJOs ,字段类型必须是上述基础类型,拥有默认构造方法和 getter/setter 方法
var personStream = environment.fromElements(new Person("fangpc", 24), new Person("fangpengcheng", 25));Copy to clipboardErrorCopied
-
Value 数据类型:实现了org.apache.flink.types.Value,其中包括 read() 和 write() 两个方法完成序列化和反序列化操作,有着比较高效的性能。Flink 提供的内建 Value 类型有 IntValue、DoubleValue、StringValue 等。
-
特殊数据类型:
- Scala中的List、Map、Either、Option、Try数据类型
- Java中Either
- Hadoop的Writable数据类型
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)