Flink 学习(一)
摘自Flink官网https://flink.apache.org/
最近看到公司有Flink平台,正好做过storm和spark streaming上的业务,借着这个机会把flink也学了。正好比较下他们之间的优缺点。
一、流式处理平台
1.Storm

Topology为处理拓扑图
组成:
(1)Spout. 数据分发中心。
(2)Bolt. 数据处理中心
数据单元为Tuple。在Bolt处理完的数据可以发射给下一个Bolt。此时接收到的为Tuple。
缺点:
(1)消息传输保证为At least once. 但是可能出现重复发消息的情况。对每一条数据都做ack,所以容错的开销很大。
(2)延迟比flink大。
(3)吞吐量不如flink
(4)不支持批处理
2.Spark Streaming

(1)比较主流的实时计算引擎。但是是居于micro batch处理,并不是纯正的流式处理。
(2)支持处理时间,Structured streaming 支持处理时间和事件时间,同时支持 watermark 机制处理滞后数据。
(3)与Hadoop家族组件交互良好,例如Hbase等。
(4)容错机制,checkpoint。
(5)Spark Streaming 跟 kafka 结合是存在背压机制的,目标是根据当前 job 的处理情况来调节后续批次的获取 kafka 消息的条数.
(6)数据单元是RDD,新增了Dstream.直接度kafka获得。
(7)处理过程大致是transformation和action。
3.Flink

(1)数据形式DataStream(Streaming),DataSet(Batch)。
(2)处理过程是Source,Transformation 和 sink。
(3)时间。创建时间EventTime, 进入Flink DataFlow的时间。IngestionTime,对事件进行处理的本地系统时间Processing Time。
(4)窗口。按分割标准划分:timeWindow、countWindow。按窗口行为划分:Tumbling Window、Sliding Window、自定义窗口。
(5)轻量级容错机制。保证Execatly once执行。使用stream replay 和 checkpointing容错。
二、各个组件的介绍

1.JobManager用来分配任务,也就是常说的master
2.TaskManager用来分发task,缓存和交换数据流
3.Slot,把TaskManager根据task把内存抽象很多个slot,用来执行task。
三、Mac系统下安装Flink
Mac下很方便,mac装东西确实是方便。------brew install apache-flink
四、启动
1.启动本地集群环境,很快就能启动起来。在/usr/local/Cellar/apache-flink/1.7.0/libexec目录下。
./bin/start-cluster.sh
2.然后在 http://localhost:8081/#/overview 就可以看见Flink的监控平台。

可以看到Task Managers是1个。Slots也是一个。
下面还有好几个选项,可以看到你的集群配置环境。
五、Example
WordCount
(1)Code分析
package flinkjob; import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.ReduceFunction;
import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector; /**
* Created by adrian.wu on 2018/12/17.
*/
public class SocketWindowWordCount {
public static class WordWithCount { public String word;
public long count; public WordWithCount() {} public WordWithCount(String word, long count) {
this.word = word;
this.count = count;
} @Override
public String toString() {
return word + " : " + count;
}
} public static void main(String[] args) throws Exception{
final int port;
try {
//得到提交时候的参数
final ParameterTool params = ParameterTool.fromArgs(args);
//得到端口号,因为这个例子是监听9000端口的例子
port = params.getInt("port");
} catch (Exception e) {
System.err.println("No port specified. Please run 'SocketWindowWordCount --port <port>'");
return;
}
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); //数据单元 DataStream
DataStream<String> text = env.socketTextStream("localhost", port, "\n");
DataStream<WordWithCount> windowCounts = text
.flatMap(new FlatMapFunction<String, WordWithCount>() { //map
@Override
public void flatMap(String value, Collector<WordWithCount> out) {
for (String word : value.split("\\s")) {
out.collect(new WordWithCount(word, 1L));
}
}
})
.keyBy("word")
.timeWindow(Time.seconds(5), Time.seconds(1)) //Window function, 5秒一个window,间隔1
.reduce(new ReduceFunction<WordWithCount>() {
@Override
public WordWithCount reduce(WordWithCount a, WordWithCount b) { //reduce
return new WordWithCount(a.word, a.count + b.count);
}
});
windowCounts.print().setParallelism(1); env.execute("Socket Window WordCount"); }
}
(2)打包提交代码
./bin/flink run examples/streaming/SocketWindowWordCount.jar --port 9000 #提交job
nc -l 9000 #监听端口
tail -f log/flink-*-taskexecutor-*.out #查看log
(3)在监控平台可以看到你的job情况

Flink 学习(一)的更多相关文章
- Apache Flink学习笔记
Apache Flink学习笔记 简介 大数据的计算引擎分为4代 第一代:Hadoop承载的MapReduce.它将计算分为两个阶段,分别为Map和Reduce.对于上层应用来说,就要想办法去拆分算法 ...
- 准备数据集用于flink学习
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Flink学习笔记-新一代Flink计算引擎
说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...
- Flink学习笔记:Flink Runtime
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...
- Flink学习笔记:Flink开发环境搭建
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...
- Flink学习笔记:Flink API 通用基本概念
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...
- flink学习笔记:DataSream API
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...
- Flink学习笔记:Operators串烧
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...
- Flink学习笔记:Time的故事
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...
- Flink学习笔记:Operators之CoGroup及Join操作
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...
随机推荐
- CodeForces - 589J(DFS)
题目链接:http://codeforces.com/problemset/problem/589/J 题目大意:一个机器人打扫一个密闭的房间,房间由一个矩形构成,'*'表示家具,'.'表示该位置为空 ...
- gradle配置统一管理
配置全局参数 根目录build.gradle文件: 主要关注ext部分 // Top-level build file where you can add configuration options ...
- 【Asia Yokohama Regional Contest 2018】Arithmetic Progressions
题目大意:给定 N(1<N<=5000) 个不同元素组成的集合,求从中选出若干数字组成的等差数列最长是多少. 题解:直接暴力有 \(O(n^3)\) 的算法,即:枚举等差数列的前两个值,再 ...
- [luogu4018][Roy&October之取石子]
题目链接 思路 这个题思路挺巧妙的. 情况一: 首先如果这堆石子的数量是1~5,那么肯定是先手赢.因为先手可以直接拿走这些石子.如果石子数量恰好是6,那么肯定是后手赢.因为先手无论怎样拿也无法直接拿走 ...
- Linux常用基本命令(less)
转: Linux常用基本命令(less) LESS:跟more命令的功能类似,都是用于分页显示内容,但是他的性能比more更高,功能比more更丰富,他读取文件是按需加载 格式: less [opti ...
- CodeForces1051E EXKMP + 线段树dp
http://codeforces.com/problemset/problem/1051/E 题意:给你一个很大的数字,然后你可以把这个数字拆分成为任意多个部分,要求每一个部分的数字大小要在一个区间 ...
- BashOnWindow安装mysql
1.下载mysql 服务器和客户端 sudo apt-get install mysql-server mysql-client 其中过程会让输入用户名和密码 2.启动mysql服务 sudo ser ...
- 《老梁四大名著情商课》笔记-学学TA,你就是聚会的万人迷
<老梁四大名著情商课>笔记-学学TA,你就是聚会的万人迷 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 现在社会学家有一个统计,说中国处在单身状态大概有2个亿.这些人中 ...
- 【.NET】VS 本地调试 无法加载Json文件
1.如果要是发布到iis,还加载不出来,那就要配置一下MIME类型: 2.本地调试时,无法加载json文件: 解决方案: 在web.config中添加如下配置:mimeMap <system.w ...
- JDBC-DbUtils
依赖 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...