一:为什么使用flink
1.jdk实现流式处理
package net.xdclass.app; import net.xdclass.model.VideoOrder; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * java实现流式计算 */ public class JdkStreamApp { public static void main(String[] args) { //总价 35 List<VideoOrder> videoOrders1 = Arrays.asList( new VideoOrder("20190242812", "springboot教程", 3), new VideoOrder("20194350812", "微服务SpringCloud", 5), new VideoOrder("20190814232", "Redis教程", 9), new VideoOrder("20190523812", "⽹⻚开发教程", 9), new VideoOrder("201932324", "百万并发实战Netty", 9)); //总价 54 List<VideoOrder> videoOrders2 = Arrays.asList( new VideoOrder("2019024285312", "springboot教程", 3), new VideoOrder("2019081453232", "Redis教程", 9), new VideoOrder("20190522338312", "⽹⻚开发教程", 9), new VideoOrder("2019435230812", "Jmeter压⼒测试", 5), new VideoOrder("2019323542411", "Git+Jenkins持续集成", 7), new VideoOrder("2019323542424", "Idea全套教程", 21)); //平均价格 double videoOrder1Avg1 = videoOrders1.stream().collect(Collectors.averagingInt(VideoOrder::getMoney)); double videoOrder1Avg2 = videoOrders2.stream().collect(Collectors.averagingInt(VideoOrder::getMoney)); System.out.println("videoOrder1Avg1=" + videoOrder1Avg1); System.out.println("videoOrder1Avg2=" + videoOrder1Avg2); //订单总价 int total1 = videoOrders1.stream().mapToInt(VideoOrder::getMoney).sum(); int total2 = videoOrders2.stream().mapToInt(VideoOrder::getMoney).sum(); System.out.println("total1=" + total1); System.out.println("total2=" + total2); } }
2.JDK8 Stream也是流处理,flink也是流处理, 那区别点来
数据来源和输出有多样化怎么处理;
jdk stream -写代码
flink - ⾃带很多组件
海量数据需要进⾏实时处理
jdk stream - 内部jvm单节点处理,单机内部并⾏处理
flink - 节点可以分布在不同机器的JVM上,多机器并⾏处理
统计时间段内数据,但数据达到是⽆序的
jdk stream -写代码
flink - ⾃带窗⼝函数和watermark处理迟到数据
二:常见的知识点
1.官网
https://flink.apache.org/zh/flink-architecture.html
2.用处
⽤来做啥:实时数仓建设、实时数据监控、实时反作弊⻛控、 画像系统等
3.有界流和无界流
任何类型的数据都可以形成一种事件流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流。
数据可以被作为 无界 或者 有界 流来处理。
-
无界流 有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。
-
有界流 有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理
4.operator算子
source、transformation、sink 都是 operator算⼦
三:flink小案例
1.pom
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>net.xdclass</groupId> <artifactId>xdclass-flink</artifactId> <version>1.0-SNAPSHOT</version> <properties> <encoding>UTF-8</encoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <java.version>1.8</java.version> <scala.version>2.12</scala.version> <flink.version>1.13.1</flink.version> </properties> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.16</version> <scope>provided</scope> </dependency> <!--flink客户端--> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-clients_${scala.version}</artifactId> <version>${flink.version}</version> </dependency> <!--java版本--> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>${flink.version}</version> </dependency> <!--streaming的java版本--> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_${scala.version}</artifactId> <version>${flink.version}</version> </dependency> <!--日志输出--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> <scope>runtime</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> <scope>runtime</scope> </dependency> <!--json依赖包--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.44</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>8</source> <target>8</target> </configuration> </plugin> </plugins> </build> </project>
2.
标签:入门,stream,flink,VideoOrder,学习,org,new,数据 From: https://www.cnblogs.com/juncaoit/p/16815077.html