首页 > 编程语言 >Java版Flink(一)概述和入门案例

Java版Flink(一)概述和入门案例

时间:2023-12-26 15:02:01浏览次数:29  
标签:Flink Java 入门 flink api import apache org String

一、概述

1、Flink 是什么

Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams.

Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数
据流进行状态计算。

官网地址

2 、Flink 特点

2.1、事件驱动(Event-driver)

在这里插入图片描述

2.2、有界流和无界流

有界流:相对于离线数据集
无界流:相对于实时数据
在这里插入图片描述

2.3、分层 API

越顶层越抽象,表达含义越简明,使用越方便
越底层越具体,表达能力越丰富,使用越灵活
在这里插入图片描述

2.4、支持事件时间(Event-time)

事件时间:数据产生的时间

2.5、支持处理时间(Processing-time)

处理时间:程序处理数据的时间

2.6、精准一次性的状态保证(Exactly-once)

2.7、低延迟、高吞吐

2.8、高可用、动态扩展

3、区别SparkStreaming

Flink是真正意义上的流式计算框架,基本数据模式是数据流,以及事件序列。
SparkStreaming是微批次的,通常都要设置批次大小,几百毫秒或者几秒,这一小批数据是 RDD集合,并且DAG引擎把job分为不同的Stage。
在这里插入图片描述

二、入口 wordcount

1、 pom依赖

 <dependencies>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>1.10.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_2.12</artifactId>
            <version>1.10.1</version>
        </dependency>
    </dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2、有界数据 wordcount

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;
public class DataSetWordcount {
    public static void main(String[] args) throws Exception {
        // 1、创建执行环境
        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
        // 2、读取数据
        String path = "D:\\project\\flink\\src\\main\\resources\\wordcount.txt";
        // DataSet -> Operator -> DataSource
        DataSet<String> inputDataSet = env.readTextFile(path);
        // 3、扁平化 + 分组 + sum
        DataSet<Tuple2<String, Integer>> resultDataSet = inputDataSet.flatMap(new MyFlatMapFunction())
                .groupBy(0) // (word, 1) -> 0 表示 word
                .sum(1);
        resultDataSet.print();
    }
    public static class MyFlatMapFunction implements FlatMapFunction<String, Tuple2<String, Integer>> {
        @Override
        public void flatMap(String input, Collector<Tuple2<String, Integer>> collector) throws Exception {
            String[] words = input.split(" ");
            for (String word : words) {
                collector.collect(new Tuple2<>(word, 1));
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

3、无界数据 wordcount

在 192.168.200.102 主机启动 nc -lk 9999

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;
public class StreamWordcount {
    public static void main(String[] args) throws Exception {
        // 1、创建执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        // 2、读取 socket 数据
        DataStreamSource<String> inputDataStream = env.socketTextStream("192.168.200.102", 9999);
        // 3、计算
        SingleOutputStreamOperator<Tuple2<String, Integer>> resultDataStream = inputDataStream.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
            @Override
            public void flatMap(String input, Collector<Tuple2<String, Integer>> collector) throws Exception {
                String[] words = input.split(" ");
                for (String word : words) {
                    collector.collect(new Tuple2<>(word, 1));
                }
            }
        }).keyBy(0)
                .sum(1);
        // 4、输出
        resultDataStream.print();
        // 5、启动 env
        env.execute();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
原文链接:https://blog.csdn.net/qq_41311979/article/details/114731835

标签:Flink,Java,入门,flink,api,import,apache,org,String
From: https://www.cnblogs.com/sunny3158/p/17928142.html

相关文章

  • JDBC快速入门:从环境搭建到代码编写,轻松实现数据库增删改查操作!
    通过上篇文章我们已经对JDBC的基本概念和工作原理都有了一定的了解,本篇文章我们继续来探索如何从零开始,一步步搭建开发环境,编写代码,最后实现数据库的增删改查操作。一、开发环境搭建首先,我们需要准备的开发环境有:Java开发工具包(JDK)、数据库(如MySQL)、数据库驱动(如MySQLConnector......
  • Linux CentOS7安装chrome和chromedriver,用于Selenium爬虫(java代码演示)
    ......
  • Java多线程​(五)练习题7道
    练习多线程练习1(卖电影票)一共有1000张电影票,可以在两个窗口领取,假设每次领取的时间为3000毫秒,要求:请用多线程模拟卖票过程并打印剩余电影票的数量线程类实现:publicclassTicketWindowextendsThread{publicTicketWindow(){}publicTicketWindow(Stringname){super(nam......
  • 《Kubernetes从入门到进阶》之一: 认识Kubernetes
    01容器技术在早期的传统架构中,应用程序是直接部署在物理机上的。在这种场景下,由于无法对程序的资源使用进行限制,容易出现不同程序争抢资源的问题,并且程序之间还可能互相影响。这使得往往需要按照应用来划分机器,并造成了较大的资源浪费。 后来,虚拟机(VM)的出现改变了这种现状。......
  • Java与线程
    实现线程的主要方式:1) 使用内核实现(1:1实现,JDK线程模型采用方式)内核线程(KLT)就是直接由操作系统内核支持的线程,由内核完成线程切换,内核通过操纵调度器对线程进行调度,并负责将线程的任务映射到各个处理器上.程序一般使用内核线程的一种高级接口-轻量级进程(LWP),由于每个轻......
  • 在 Python 中,​​?:​​​ 符号并不是一个有效的运算符。这个符号在其他一些编程语言
    在Python中,?:符号并不是一个有效的运算符。这个符号在其他一些编程语言中,如JavaScript或C,被称为条件(三元)运算符。然而,在Python中,我们使用if-else表达式来达到相同的目的。例如:x=10y=20print("xisgreater")ifx>yelseprint("yisgreater")在上述代码中,如果......
  • 鸿蒙开发入门:多HAP的开发调试与发布部署流程
    多HAP的开发调试与发布部署流程多HAP的开发调试与发布部署流程如下图所示。图1多HAP的开发调试与发布部署流程开发开发者通过DevEcoStudio工具按照业务的需要创建多个Module,在相应的Module中完成自身业务的开发。调试通过DevEcoStudio编译打包,生成单个或者多个HAP,即可基于HAP进......
  • 基于JAVA的汽车售票系统网站
    互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对汽车售票信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用汽车售票网站可以有效管理,使信息管理能够更加......
  • Java多线程:锁机制深入剖析
    在并发编程中,正确地管理资源的访问至关重要。Java提供了多种锁机制来协调多个线程之间对共享资源的访问。本文将深入探讨Java多线程中的锁机制,包括内置锁(synchronized关键字)、显式锁(java.util.concurrent.locks.Lock)以及并发集合(java.util.concurrent)提供的锁机制。1.内置锁(Synchr......
  • 【flink番外篇】6、flink的WaterMark(介绍、基本使用、kafka的水印以及超出最大允许延
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......