Apache Filnk----入门

Flink 概述

Flink 是什么

在这里插入图片描述

有界流和无界流

  • 无界数据流:
    • 有定义流的开始,但没有定义流的结束;
    • 它们会无休止的产生数据:
    • 无界流的数据必须持续处理,即数据被摄取后需要立刻处理我们不能等到所有数据都到达再处理,因为输入是无限的。
  • 有界数据流:
    • 有定义流的开始,也有定义流的结束:
    • 有界流可以在摄取所有数据后再进行计算:
    • 有界流所有数据可以被排序,所以并不需要有序摄取:
    • 有界流处理通常被称为批处理

有状态流处理

把流处理需要的额外数据保存成一个状态,然后针对这条数据进行处理,并且更新状态。这就是所谓的"有状态的流处理"

在这里插入图片描述

  • 状态在内存中:优点:速度快 ;缺点:可靠性差
  • 状态在分布式系统中:优点:可靠性高;缺点:速度慢

Flink 特点

  • 高吞吐和低延迟。每秒处理数百万个事件,毫秒级延迟。
  • 结果的准确性。Flink提供了事件时间(event-time)和处理时间(processing-time)语义对于乱序事件流,事件时间语义仍然能提供一致且准确的结果。
  • 精确一次(exactly-once)的状态一致性保证。
  • 可以连接到最常用的外部系统,如Kata、Hive、JDBC、HDFS、Redis等
  • 高可用。本身高可用的设置,加上与K8S,YARN和Mesos的紧密集成,再加上从故障中快速恢复和动态扩展任务的能力,Fhnk能做到以极少的停机时间7x24全天候运行。

Flink vs SparkStreaming

在这里插入图片描述

Flink 分层API

在这里插入图片描述

  • 有状态流处理:通过底层API(处理函数),对最原始数据加工处理。底层API与DataSstrea API相集成,可以处理复杂的计算。
  • DataStream API(流处理)和DataSet API(批处理)封装了底层处理函数,提供了通用的模块,比如转换(transormations,包括map、flatmap等),连接(joms),聚合(aggregations),窗口(windows)操作等。注意:Flimk1.12以后,DataStream API已经实现真正的流批一体,所以DataSet API已经过时
  • Table API 是以表为中心的声明式编程,其中表可能会动态变化。Ible API遵循关系模型:表有二维数据结构,类似于关系数据库中的表;同时API提供可比较的操作,例如select、project、jomn、group-by、aggregate等。我们可以在表与 DataStream/Dataset 之间无缝切换,以允许程序将 Table AP与DataStream 以及 DataSet 混合使用。
  • SOL这一层在语法与表达能力上与 Table API类似,但是是以SOL查询表达式的形式表现程序。SOL抽象与Table API交互密切,同上心能有难区的时SOL查询可以直接在Table API定义的表上执行。

Flink 快速上手

  • 在IDEA中创建Maven项目

  • 添加项目依赖

    <properties>
            <flink.version>1.17.0</flink.version>
    </properties>
    
    
        <dependencies>
            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-streaming-java</artifactId>
                <version>${
         
         flink.version}</version>
            </dependency>
    
         <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-clients</artifactId>
                <version>${
         
         flink.version}</version>
         </dependency>
    </dependencies>
    

WordCount 代码编写

批处理

批处理基本思路:先逐行读入文件数据,然后将每一行文字拆分成单词;接着按照单词分组,统计每组数据的个数,就是对应单词的频次。

1)数据准备
(1)在工程根目录下新建一个input文件夹,并在下面创建文本文件words.txt
(2)在words.txt中输入一些文字,例如:

hello flink
hello world
hello java

2)代码编写
(1)在com.yudan.wc包下新建Java类BatchWordCount,在静态main方法中编写代码。具体代码实现如下:

import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值