一、介绍


Apache Flink is an open source platform for distributed stream and batch data processing. Flink’s core is a streaming dataflow engine that provides data distribution, communication, and fault tolerance for distributed computations over data streams. Flink builds batch processing on top of the streaming engine, overlaying native iteration support, managed memory, and program optimization.

批处理与实时处理的优缺点

批处理,吞吐量大,但延时高。

实时处理,延时低,但吞吐量小。

以聊天做比喻,实时处理,来一条回一条,批处理,别人说十句,你最后一起回。

Flink的目标

  • 低延迟
  • 高吞吐
  • 容错率高,计算正确率高

流数据处理的应用场景

  • 电商、市场营销

    • 数据报表
  • 金融、银行
    • 实时监测异常行为

OLTP和OLAP

OLTP(on-line transaction processing)联机事务处理,面向的是事务,处理几条数据。

OLAP(on-line analytical processing)面向的是一堆数据的数据分析。

Ad-hoc

即席查询,用户根据自己的需求、灵活地选择查询条件,可以理解为需求不太明确的查询,由用户自定义的查询。

流处理的演变

从起初单纯的流处理,转变为后来的流处理和批处理结合的lambda架构。

特点就是流处理的数据可能不准确,但延迟低,批处理的数据准确性高,但延迟高,将将两者结合起来。

这就好比是两个人做同一件事,一个人是慢性子做事非常仔细,另一个人是急性子,做事快。急性子的人提前把事情做好,例如得出100,200,300的结果。慢性子也去做同样的事,得出100,250,300,等慢性子把事情做好,最终的结果就会由100,200,300,变为100,250,300。

第一性思考:本质就是优劣势互补。

第三代流式处理,Flink,在lambda架构上又做了改进。

Flink整合了Storm与SparkStreaming的优点。SparkStreaming的逻辑是,将批拆分成更小的批处理,在保证低延时的情况下,还能保证高吞吐。

特点

  1. 事件驱动

  2. 基于流的世界观,所有东西都是流,批就是有界的流,实时数据就是无界的流。而Spark呢,则是所有东西都是批,SparkStreaming处理的则是更小的批。

  3. 分层的API

架构


Apache Flink is a framework and distributed processing engine for stateful computations (状态计算) over unbounded and bounded data streams. Flink has been designed to run in all common cluster environments, perform computations at in-memory speed and at any scale.

lambda架构

将离线计算和实时计算结合在一起,发挥离线计算准确率高、实时计算响应速度快的优势。缺点是,同一套逻辑要分别在两个模式下实现,存在代码冗余的问题。

Flink特点

(1)批流一体化

Flink中的思想是,一切都是流。离线计算是有界限的流,实时计算是无界限的流。

(2)事件驱动型应用

二、基本使用

WordCount

(1)引入依赖


<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-scala_2.11</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-scala_2.11</artifactId>
<version>1.7.2</version>
</dependency>

(2)准备数据

hello kafka
hello bigdata
hello flink
hello hbase
hbase
kafka

(3)Flink批处理实现


package flink
import org.apache.flink.api.scala._ object wordcount { def main(args: Array[String]): Unit = {
//创建一个执行环境
val env = ExecutionEnvironment.getExecutionEnvironment val inputPath = "word.txt";
val inputDataSet = env.readTextFile(inputPath) //切分数据,得到word
val wordCountDataSet = inputDataSet.flatMap(_.split(" "))
.map((_,1))
.groupBy(0)
.sum(1) wordCountDataSet.print() } }

运行结果

(4)Flink流处理实现

/**
* 流式 WordCount程序
*/
object StreamWordCount { def main(args: Array[String]): Unit = { // 创建流处理的执行环境
val env = StreamExecutionEnvironment.getExecutionEnvironment // 创建一个文本socket
val dataStream = env.socketTextStream("localhost",7777) val wordCountDataStream = dataStream.flatMap(_.split(" "))
.map((_,1))
.keyBy(0)
.sum(1) wordCountDataStream.print() // 启动executor
env.execute("stream word count") } }

在终端使用nc -lk 7777打开一个socket连接,运行程序,得到结果

参考文档

Flink官方文档

Flink 实时数仓的应用

Apache Flink 零基础入门(一&二):基础概念解析

企业级数据仓库

大数据工程师 Flink技术与实战

Flink(一) —— 启动与基本使用的更多相关文章

  1. Flink安装启动

    1.下载安装包并解压 下载网址:https://flink.apache.org/ 版本选择可以根据安装的hadoop版本和Scala版本进行选择 我用的是:flink-1.3.3-bin-hadoo ...

  2. flink安装启动(docker)

    参考https://hub.docker.com/_/flink/ 相关端口The Web Client is on port 8081JobManager RPC port 6123TaskMana ...

  3. 一张图轻松掌握 Flink on YARN 应用启动全流程(上)

    Flink 支持 Standalone 独立部署和 YARN.Kubernetes.Mesos 等集群部署模式,其中 YARN 集群部署模式在国内的应用越来越广泛.Flink 社区将推出 Flink ...

  4. Flink集群部署

    部署方式 一般来讲有三种方式: Local Standalone Flink On Yarn/Mesos/K8s… 单机模式 参考上一篇Flink从入门到放弃(入门篇2)-本地环境搭建&构建第 ...

  5. Flink知识点

    1. Flink.Storm.Sparkstreaming对比 Storm只支持流处理任务,数据是一条一条的源源不断地处理,而MapReduce.spark只支持批处理任务,spark-streami ...

  6. 追源索骥:透过源码看懂Flink核心框架的执行流程

    li,ol.inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt, ...

  7. Flink HA

    standalone 模式的高可用 部署 flink 使用zookeeper协调多个运行的jobmanager,所以要启用flink HA 你需要把高可用模式设置成zookeeper,配置zookee ...

  8. Flink学习笔记:Flink开发环境搭建

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

  9. flink学习笔记-各种Time

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

  10. Flink之DataStreamAPI入门

    目录 Types Transformations Defining UDFs 本文API基于Flink 1.4 def main(args: Array[String]) { // 第一种会自动判断用 ...

随机推荐

  1. css列表滑动防止被底部遮住和适配屏幕长一点的机型处理

    1.移动端处理列表滑动的时候,微信底下有自带的返回页面按钮,经常会被遮住,遇到屏幕长一点的,下面会短一大截,以下用此方法可以解决..container{ position:relative; back ...

  2. canvas教程(二) 绘制直线

    经过 canvas 教程(一) 简介 我们知道了 canvas 的一些基本情况 而本次是给大家带来直线的绘制 canvas 中,基本图形有两种,一种是直线,还有一种是曲线 但是无论是直线还是曲线,我们 ...

  3. fastjson反序列化漏洞研究(下)

    之前的文章显示字符太多 拒绝显示  只好分为两篇了 这样我们只需要找到可以利用的类,构造poc链就好了,这个和以前的java反序列化漏洞类似,先不说.网上最早的poc是使用com.sun.org.ap ...

  4. Vue路由传参的几种方式

    原 Vue路由传参的几种方式 2018年07月28日 23:52:40 广积粮缓称王 阅读数 12613   前言:顾名思义,vue路由传参是指嵌套路由时父路由向子路由传递参数,否则操作无效.传参方式 ...

  5. 数据库操作语句类型(DQL、DML、DDL、DCL)

    数据库操作语句类型(DQL.DML.DDL.DCL)简介 SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL 数据查询语 ...

  6. 数据库PDO简介

    php简介,php历史,php后端工程师职业前景,php技术方向,php后端工程师职业体系介绍. php是世界上使用最广泛的web开发语言,是超文本预处理器,是一种通用的开源脚本语言,语法吸收了c语言 ...

  7. python面试总结2(函数常考题和异常处理)

    python函数常考题 可变类型为参数 不能类型为参数 python如何传递参数 传递值还是引用呢?都不是.唯一支持的参数传递是共享穿参 Call by Object(Call by Object R ...

  8. GCC 编译流程简介

    GCC-GCC编译流程 序言 对于大多数程序员而言,大家都知道gcc是什么,但是如果不接触到linux平台下的开发,鲜有人真正了解gcc的编译流程,因为windows+IDE的开发模式简直是一条龙全套 ...

  9. 解决问题:Jupyter Notebook启动不会自动打开浏览器,每次都要自己打开浏览器输入网址

    1.找到anaconda下的anaconda prompt并打开(或者CMD)都可以 2.在anaconda prompt里面输入:jupyter notebook --generate-config ...

  10. jupytext library using in jupyter notebook

    目录 1. jupytext features 2. Way of using 3. usage 4. installation 1. jupytext features Jupytext can s ...