admin管理员组文章数量:1566360
Flink流批一体化处理框架
- 一、简介
- 二、框架对比
- 三、编程实现
- 1.流处理
- 2.批处理
- 四、结语
一、简介
Apache Flink 是一个框架和分布式处理引擎,支持实时流数据处理与离线数据批处理计算。用户案例有阿里、腾讯、华为、小米、滴滴、ebay、亚马逊等,比较知名的阿里双十一交易大屏实时展示技术就是建立在该框架之上。
二、框架对比
Spark Streaming是把流转化成一个个小的批来处理,Flink是把批当作一种有界的流。
1、Storm是第一代流处理框架,数据吞吐量和延迟上表现不尽人意,而且在数据准确性方面也存在不足。
2、Spark Streaming是第二代流处理框架,每次只能处理一小批数据,以接近实时处理的效果。
3、Flink是第三代流引擎框架,基于数据有界和无界的思想,可支持流式和批量处理,吞吐量更高,延迟更低。
摘自知乎
三、编程实现
1.流处理
所谓流处理,就是说有条消息通道,不断地有数据过来,然后进行处理。
我们用nc
监听9999端口(TCP服务器),客户端编程连接此服务器,接收消息进行wordcount统计。
创建TCP端口监听,若要创建udp端口加参数-u
即可:
nc -lk 9999
连接:
nc 127.0.0.1 9999
客户端连接后键盘发送消息即可:
客户端代码:
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache/POM/4.0.0"
xmlns:xsi="http://www.w3/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache/POM/4.0.0 http://maven.apache/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>test01</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<mavenpiler.source>8</mavenpiler.source>
<mavenpiler.target>8</mavenpiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-scala_2.11</artifactId>
<version>1.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients_2.11</artifactId>
<version>1.14.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 该插件用于将Scala代码编译成class文件 -->
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.4.6</version>
<executions>
<execution>
<!-- 声明绑定到maven的compile阶段 -->
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
FlinkStreamWordCount.scala
package com.llqqww
import org.apache.flink.streaming.api.scala._
object FlinkStreamWordCount {
def main(args: Array[String]): Unit = {
println("开始")
//初始化流计算环境
val env = StreamExecutionEnvironment.getExecutionEnvironment
//读取数据
val stream = env.socketTextStream("vm.test",9999)
//转换计算
val result = stream.flatMap(_.split(" "))
.map((_, 1))
.keyBy(0)
.sum(1)
//打印结果到控制台
result.print()
//启动流式处理,如果没有该行代码上面的程序不会运行
env.execute("WordCount")
}
}
执行结果:
2.批处理
批处理,即处理离线数据,该数据不会再变化的。我们直接读取resources
目录下的文件进行单词统计。
FlinkBatchWordCount.scala
package com.llqqww
import org.apache.flink.api.scala._
object FlinkBatchWordCount {
def main(args: Array[String]): Unit = {
//初始化流计算环境
val env = ExecutionEnvironment.getExecutionEnvironment
//读取数据
val file= getClass.getResource("/wc.txt");
val data = env.readTextFile(file.getPath)
//转换计算
val result = data.flatMap(_.split(" "))
.map((_, 1))
.groupBy(0)
.sum(1).print()
}
}
执行结果:
四、结语
本文只是在本地进行模拟运行,还没有提交到Flink引擎上运行。
学习资料:尚学堂Flink教程(Apache Flink 从入门到精通)
【转载请注明出处:https://leytton.blog.csdn/article/details/121066066】
版权声明:本文标题:Flink流批一体化处理框架 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1725866790a1045806.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论