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 ...
随机推荐
- JavaWeb基础之Servlet简单实现用户登陆
学习javaweb遇到了一些坑,一些问题总结下来,记个笔记. 学习servlet遇到的一些坑: servlet实现用户登陆遇到的坑解决办法: https://www.cnblogs.com/swxj/ ...
- [luogu1341][无序字母对]
luogu1341 思路 欧拉回路和欧拉路的裸题,首先判断是否存在欧拉路或者欧拉回路.当且仅当途中每个点的度数都为偶数时,存在欧拉回路.当且仅当图中度数为奇数的点的个数为2时,存在欧拉路.如果存在欧拉 ...
- 数据库之sql语句汇总20180616
/*******************************************************************************************/ 一.SQL简 ...
- Tomcat内存监控及调优
JDK(1.6版本以上)自带有个jvisualvm工具.该工具是用来监控java运行程序的cpu.内存.线程等的使用情况.并且使用图表的方式监控java程序.还具有远程监控能力. 界面如下: 1.JD ...
- 怎么自行HTTP的POST包头,需要使用json
http://bbs.csdn.net/topics/390674431 不理解你为什么这么传 post的格式如下:POST / HTTP/1.1Host: www.wrox.comUser-Agen ...
- request 对于cookie,session, json的处理
一.cookie是存放在客户端,session是存放在服务端. 因为http是无状态的,当客户端发送请求给服务端的时候,服务端为了区分下一次发送请求的是不是同一个客户,那么就需要用一种方式记录下这个客 ...
- windows远程桌面无法粘贴复制的问题解决方法
这两天遇到一个困扰我很久的问题,每次通过winodws远程桌面,本地的数据无法通过复制粘贴到远程服务器上.现把我找到的解决方案记录下来分享给大家 一般出现问题可能性比较大的原因就是rdpclip.ex ...
- 关于python类变量和实例变量
今天在看python的类和实例的时候,突然发现了一个以前遗漏的点,也就是类变量和实例变量.首先需要理解一下类变量和实例变量的概念. 类全局变量:在类中定义,对类和由类生成的实例生效,如果通过方法对类变 ...
- 数据库MySQL
--IN 关键字 在.....里 SELECT * FROM zhangwu WHERE money IN (66,666,700); 1.主键约束 特点非空 只用于表示當前的记录 primary k ...
- Emgu.CV 播放视频-本地文件/RTSP流
using Emgu.CV; using System; using System.Drawing; using System.Threading; using System.Windows.Form ...