首页 > 其他分享 >Flink

Flink

时间:2024-08-02 21:50:13浏览次数:7  
标签:处理 Flink 并行度 任务 设置 数据

Flink

基础

实时计算与离线计算的区别

1、根据处理时间

实时计算数据实时处理,结果实时存储

离线计算数据延迟处理,N+1

2.根据处理方式

实时计算流式处理:一次处理一条或少量,状态小

离线计算批量处理:处理大量数据,处理完返回结果

实时计算是一种持续、低时延、事件触发的计算任务

离线计算是一种批量、高时延、主动发起的计算任务

特性

支持高吞吐、低延迟、高性能的流处理
支持带有事件时间的窗口(Window)操作
支持有状态计算的Exactly-once语义
支持高度灵活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作
支持具有反压功能的持续流模型
支持基于轻量级分布式快照(Snapshot)实现的容错
一个运行时同时支持Batch on Streaming处理和Streaming处理
Flink在JVM内部实现了自己的内存管理,避免了出现oom
支持迭代计算
支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存

Source:数据源

Flink 在流处理和批处理上的 source 大概有 4 类:
基于本地集合的 source
基于文件的 source、
基于网络套接字的 source、
自定义的 source。自定义的 source 常见的有 Apache kafka、Amazon Kinesis Streams、RabbitMQ、Twitter Streaming API、Apache NiFi 等,当然你也可以定义自己的 source。

Sink: 接收器

Flink 将转换计算后的数据发送的地点 。
Flink 常见的 Sink 大概有如下几类:

写入文件
打印出来
写入 socket 、
自定义的 sink 。自定义的 sink 常见的有 Apache kafka、RabbitMQ、MySQL、ElasticSearch、Apache Cassandra、Hadoop FileSystem 等,同理你也可以定义自己的 sink。

Flink架构

Client(作业客户端)

JobManager(作业管理器)

TaskManager(任务管理器)

Flink集群搭建

在YAERN上运行

Application mode

1、相当于spark的 cluster
2、在本地没有详细的错误日志
3、一般用于生产
4、直接提交任务,每一个任务单独启动一个JobManager和多个taskManager

3、Per-Job Cluster Mode

1、相当于spark 的client模式
2、在本地可以看到错误日志
3、一般用于测试
4、直接提交任务,每一个任务单独启动一个JobManager和多个taskManager

4、Session Mode

1、会话模式是先在yarn启动启动一个JobManager,再提交任务,提交任务时动态申请taskmanager
2、任务共享同一个JobManager

core

Flink程序处理的三种方式

/*
 * BATCH:批处理,只能处理有界流,底层是MR模型,可以进行预聚合
 * STREAMING:流处理,可以处理无界流,也可以处理有界流,底层是持续流模型,数据一条一条处理
 * AUTOMATIC:自动判断,当所有的Source都是有界流则使用BATCH模式,当Source中有一个是无界流则会使用STREAMING模式
 */

Flink处理逻辑传入的方式

        // new XXXFunction 使用匿名内部类
//        DataStream<String> wordsDS = wordsFileDS.flatMap(new FlatMapFunction<String, String>() {
//            /**
//             *
//             * @param line DS中的一条数据
//             * @param out 通过collect方法将数据发送到下游
//             * @throws Exception
//             */
//            @Override
//            public void flatMap(String line, Collector<String> out) throws Exception {
//                for (String word : line.split(",")) {
//                    // 将每个单词发送到下游
//                    out.collect(word);
//                }
//            }
//        });
// 使用Lambda表达式
/*
 * ()->{}
 *  通过 -> 分隔,左边是函数的参数,右边是函数实现的具体逻辑
 */
        // 使用自定类实现接口中抽象的方法
//        wordsFileDS.flatMap(new MyFunction()).print();

如何设置并行度

/*
 * 如何设置并行度?
 * 1、考虑吞吐量
 *      有聚合操作的任务:1w条/s 一个并行度
 *      无聚合操作的任务:10w条/s 一个并行度
 * 2、考虑集群本身的资源
 *
 * Task的数量由并行度以及有无Shuffle一起决定
 *
 * Task Slot数量 是由任务中最大的并行度决定
 *
 * TaskManager的数量由配置文件中每个TaskManager设置的Slot数量及任务所需的Slot数量一起决定
 *
 */
 
 // 1、通过env设置,不推荐,如果需要台调整并行度得修改代码重新打包提交任务
//        env.setParallelism(3);

 // 2、每个算子可以单独设置并行度,视实际情况决定,一般不常用
SingleOutputStreamOperator<Tuple2<String, Integer>> kvDS = ds
         .map(word -> Tuple2.of(word, 1), Types.TUPLE(Types.STRING, Types.INT))
         .setParallelism(4);
         
// 3、还可以在提交任务的时候指定并行度,最常用 比较推荐的方式
// 命令行:flink run 可以通过 -p 参数设置全局并行度
// web UI:填写parallelism输入框即可设置,优先级:算子本身的设置 > env做的全局设置 > 提交任务时指定的 > 配置文件flink-conf.yaml

事件时间

// 事件时间:数据本身自带的时间
// 水位线:某个线程中所接收到的数据中最大的时间戳

Source

Sink

Function

process
/*
 * 每进来一条数据就会执行一次
 * value :一条数据
 * ctx:可以获取任务执行时的信息
 * out:用于输出数据
 */

Window

TimeWindow

/*
 * 时间窗口:滚动、滑动
 * 时间类型:处理时间、事件时间
 */

Session

// 会话窗口:当一段时间没有数据,那么就认定此次会话结束并触发窗口的执行
基于处理时间
基于时间时间

CountWindow

// 计数窗口:滚动、滑动
.countWindow(5) // 每同一个key的5条数据会统计一次
.countWindow(10,5) // 每隔同一个key的5条数据统计最近10条数据

Kafka

kafka是一个高吞吐的分布式消息系统

特点

消息系统的特点:生存者消费者模型,FIFO

高性能:单节点支持上千个客户端,百MB/s吞吐

持久性:消息直接持久化在普通磁盘上且性能好

分布式:数据副本冗余、流量负载均衡、可扩展

很灵活:消息长时间持久化+Client维护消费状态

架构

producer:消息生存者
consumer:消息消费者
broker:kafka集群的server,
负责处理消息读、写请求,存储消息
topic:消息队列/分类
broker就是代理,在kafka cluster这一层这里,其实里面是有很多个broker
topic就相当于queue
图里没有画其实还有zookeeper,这个架构里面有些元信息是存在zookeeper上面的,整个集群的管理也和zookeeper有很大的关系

设置偏移量的位置

/*
 * 设置当前消费的偏移量位置:
 * 1、earliest从头开始消费
 * 2、latest 从最后开始消费
 * 3、timestamp 设置从某个时间戳开始
 * 4、offset 设置从哪个偏移量开始
 * ......
 */

设置写入时的语义

/*
设置写入时的语义:
1、AT_LEAST_ONCE:保证数据至少被写入了一次,性能会更好,但是又可能会写入重复的数据
2、EXACTLY_ONCE:保证数据只会写入一次,不多不少,性能会有损耗
 */

Checkpoint

checkpoint可以定时将flink计算过程中的状态持久化到hdfs中,保存状态不丢失

标签:处理,Flink,并行度,任务,设置,数据
From: https://www.cnblogs.com/justice-pro/p/18339670

相关文章

  • flink stream转table POJO对象遇到的坑
    核心代码publicclassTrackLog{privateIntegerentityId;//flink的时间类型,必须使用LocalDateTimeprivateLocalDateTimestatDateTime; publicIntegergetEntityId(){returnentityId;}publicvoidsetEntityId(IntegerentityId){......
  • Flink的DateStream API中的ProcessWindowFunction和AllWindowFunction两种用于窗口处
    目录ProcessWindowFunctionAllWindowFunction具体区别ProcessWindowFunction示例AllWindowFunction示例获取时间不同,一个数据产生的时间一个是数据处理的时间ProcessWindowFunctionAllWindowFunction具体示例ProcessWindowFunction示例AllWindowFunction示例总......
  • 当我尝试在 flink 集群上运行 Beam Pipeline 时,为什么会出现 ERROR:root:java.lang.Nu
    我正在尝试在本地托管的Flink集群上运行一个简单的Beam管道,但在执行此操作时遇到错误。我已经尝试了在互联网上可以找到的所有内容。importapache_beamasbeamfromapache_beam.ioimportReadFromTextfromapache_beam.ioimportWriteToTextfromapache_beam.option......
  • Java中的数据流处理框架:Apache Flink
    Java中的数据流处理框架:ApacheFlink大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨一下Java中的数据流处理框架——ApacheFlink。Flink是一款用于处理数据流和批处理的分布式处理框架。它具有高吞吐量、低延迟和容错的特性,广泛应用于实时......
  • Flink-CDC
    Flink-CDC(FlinkChangeDataCapture)是一个基于Flink计算框架的数据集成工具,它实现了对数据库变更数据的捕获、处理和传输,支持全量和增量数据的一体化读取。下面将从多个方面对Flink-CDC进行详细的解析。一、Flink-CDC概述1.1CDC简介CDC(ChangeDataCapture)是变更数据捕......
  • dedecms友情链接标签flink怎么用
    row='24'表示读取24个,如果row不设置,则默认为24,titlelen="24"表示友情链接为文字形式,网站名称取24字符宽度,网站编码GBK则12个汉字,网站编码为UTF-8则为8个汉字.typeid="0"1综合网站2娱乐类3教育类4计算机类5电子商务6网上信息7论坛类8其它类型如......
  • Flink SQL 的工作机制
    前言FlinkSQL引擎的工作流总结如图所示。 从图中可以看出,一段查询SQL/使用TableAPI编写的程序(以下简称TableAPI代码)从输入到编译为可执行的JobGraph主要经历如下几个阶段:将SQL文本/TableAPI代码转化为逻辑执行计划(LogicalPlan)LogicalPlan通过优化器优......
  • FlinkSQL窗口函数TUMBLE、SESSION 和 HOP的区别
    目录TUMBLE滚动窗口(TumblingWindow)SESSION会话窗口(SessionWindow)HOP滑动窗口(HoppingWindow)小结HOP窗口为什么不需要rowtime(事件时间) PROCTIME()vsrow_time 为什么HOP窗口常用PROCTIME()?总结TUMBLE、SESSION可以使用处理时间嘛TUMBLE窗口(滚动窗口)SESS......
  • 整合Apache Hudi+Mysql+FlinkCDC2.1+CDH6.3.0
    一、环境准备1.环境准备:flink1.13.1+hudi0.10+hive2.1.1+cdh6.3.0+mysql5.7+flinkcdc2.1+flinkweb平台二.编译hudi(这个编译是以前的一个测试版本,编译大同小异)1.使用git命令下载hudi0.10的代码steven@wangyuxiangdeMacBook-Pro~gitclonehttps://github.com/ap......
  • SpringBoot整合Flink CDC,实时追踪mysql数据变动
    ❃博主首页:「码到三十五」,同名公众号:「码到三十五」,wx号:「liwu0213」☠博主专栏:<mysql高手><elasticsearch高手><源码解读><java核心><面试攻关>♝博主的话:搬的每块砖,皆为峰峦之基;公众号搜索「码到三十五」关注这个爱发技术干货的coder,......