首页 > 其他分享 >flink入门学习

flink入门学习

时间:2022-10-21 23:33:46浏览次数:60  
标签:入门 stream flink VideoOrder 学习 org new 数据

一:为什么使用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.有界流和无界流

  任何类型的数据都可以形成一种事件流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流。

  数据可以被作为 无界 或者 有界 流来处理。

  1. 无界流 有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。

  2. 有界流 有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理

  

 

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

相关文章

  • 2022-2023-1 20221408《计算机基础与程序设计》第八周学习总结
    第八周学习总结作业信息这个作业属于哪个课程:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作业的要求在哪里:https://www.cnblogs.com/rocedu/p/9577842......
  • nodeJS入门
    目录NodeJs介绍NodeJs运行使用模块化模块组成require函数exports导出对象module模块对象npm和package.json文件npmpackage.jsonNodejs作用域Nodejs异步编程实现的三......
  • Python学习:列表和字典练习题
    找出列表list中大于100的值,给字典dic的k1键,小于等于100的值,给字典dic的k2键'''提示:创建字典的两种方式ex:'''v1=[2,3,4,5,]v2=88dic1={'k1':v1,'k2':v2,}......
  • 自然语言处理学习笔记-lecture07-句法分析01
    句法分析(syntacticparsing)的任务就是识别句子的句法结构(syntacticstructure)。包含短语结构分析(Phraseparsing)和依存句法分析(Dependencyparsing)短语结构分析......
  • kubernete学习1-基础环境部署
    一、环境信息:操作系统:ubuntu18.04serveramd64docker:docker19.03.cekubernetes:v1.19IP地址主机名  角色172.29.9.1k8s-masterk8s-master.ilinux.iok8s......
  • 一起学习 Go 语言设计模式之建造者模式
    前言你去买车,你不会只买一个轮胎、一个发动机、一个方向盘,你买的是一辆包括轮胎、方向盘、发动机、底盘、电气系统和车身等多个部件组成的完整骑车。在设计模式中,建造者模式......
  • 《计算机网络》第五章学习随笔
    5.1传输层1.传输层是主机才有的层次,为应用层提供通信服务,使用网络层的服务2.功能(1)传输层提供进程与进程之间的逻辑通信(2)复用与分用(3)传输层对收到的报文进行差错检测......
  • 嵌入式软件开发方向上的权衡(包含学习内容)
    1.第一篇嵌入式开发门槛高,涉及的知识面广,既要求懂硬件,又必须能写软件,而软硬件涉及的知识体系却又是异常的庞大;并且学习这些短期内看不到成绩,需要坚持数年,执着在一个领域......
  • 【学习笔记】JSP标签、JSTL标签、EL表达式
    JSP标签、JSTL标签、EL表达式EL表达式${}作用:获取数据执行运算获取web开发的常用对象 JSP标签拼接页面<jsp:includepage="jsp1.jsp"/>转......
  • 09-JS函数入门总结
    JS函数简单入门知识点总结1.1函数的概念函数:为完成一个操作任务而组合在一起的的语句组,实现了程序的三大逻辑(顺序、分支和循环)1.2函数的作用减少重复的代码,方便......