206.Flink(一):flink概述,flink集群搭建,flink中执行任务,单节点、yarn运行模式,三种部署模式的具体实现

2023-11-16

一、Flink概述

1.基本描述

Flink官网地址:Apache Flink® — Stateful Computations over Data Streams | Apache Flink

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

 2.有界流和无界流

  • 无界流(流):
    • 有定义流的开始,没有定义结束。会无休止产生数据
    • 无界流数据必须持续处理
  • 有界流(批):
    • 有定义流的开始,也有定义流的结束
    • 可以拿到所有数据后再进行处理,并且做排序
    • 有界流通常被称为批处理

3.有状态

flink中除了流之外还会有额外的数据,用来对这些流做一些状态统计。

比如流是路上的汽车,我们是路边的人,数过去了多少车。过去一辆我们可以记一个,再过去就2个。也可以通过画正字的方式记录,最后通过统计正字来得到过去多少车。这里的数字以及正字,就是车以外的额外数据,用作统计。我们每来一个车统计一下,统计完之后可以对外输出。同时,每过一段时间会持久化一下,以防丢失。 

4.flink的特点

低延迟、高吞吐、结果准确、良好的容错

  • 高吞吐、低延迟:每秒可以处理数百万个事件,毫秒级延迟
  • 结果准确:flink提供事件事件(event_time)和处理时间(processing_time)语义。对于乱序事件流,事件事件语序仍然能提供一致且精确的结果
  • 精确一次(exactly-once)的状态一致性保证
  • 可以连接到常见的存储系统:kafka,hive,jdbc,hdfs,redis等
  • 高可用:本身就是高可用,配合k8s,yarn和mesos的紧密集成,再加上从故障中快速恢复和动态扩展的能力,可以以极少的停机时间实现7*24小时运行

5.flink和spark的区别

  • spark以批处理为根本
    • spark采用rdd模型,所谓rdd就是每3秒看做的一个批次,spark引擎处理这三秒的数据。spark streaming的Dstream实际上就是一组组rdd的集合
    • spark是批计算,将DAG划分为不同的stage,一个完成才计算下一个
  • Flink以流处理为根本
    • flink基本模型是数据流,以及事件序列
    • flink是标准的流执行模式,一个事件在一个节点处理完之后可以直接下发下一个节点处理

spark:

flink:

flink spark
计算模型 流计算 微批计算
时间语序 事件事件、处理时间 处理时间
窗口 多、灵活 少、不灵活
窗口必须是批次的整数倍
状态        没有
流式sql 没有

6.flink应用场景

电商、市场营销

物联网(IOT)

物流配送,服务业

银行,金融

7.flink分层api

  • 有状态流处理:通过底层api (处理函数),对最原始的数据加工处理。与DataStream api集成,可以处理复杂计算
  • DataStream(流处理)/DataSet(批处理) api:封装了底层api,提供转换、连接、聚合、窗口等通用模块。在flink1.12之后,DataSet被合到DataStream里面去了,即DataStream是批流都可以处理的api
  • Table api:以表为中心的声明式编程。可以与DataStream无缝切换
  • sql:以sql查询表达式的形式表现程序,可以在table api的表上执行

简单来说,就是flink的一层层封装。

二、Flink快速上手

1.创建项目

新建一个maven项目:

2.导入依赖

<?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>com.atguigu</groupId>
    <artifactId>FlinkTutorial-1.17</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <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>
</project>

3.创建文件夹

新建一个input文件夹,里面一个txt,随便输入一些单词

4.批处理形式的word count编写(已过时)

注:此种方式使用的是DataSet API。我们新的版本已经将批和流都统一到DataStream API中了,因此这种方式的代码编写看一看就好,已过时。

package com.atguigu.wc;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.AggregateOperator;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.api.java.operators.FlatMapOperator;
import org.apache.flink.api.java.operators.UnsortedGrouping;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;

/**
 * TODO DataSet API 实现 wordcount(不推荐)
 */
public class BatchWordCount {
	public static void main(String[] args) throws Exception {
		// TODO 1. 创建执行环境
		ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

		// TODO 2.读取数据:从文件中读取
		DataSource<String> lineDS = env.readTextFile("input/word.txt");

		// TODO 3.切分、转换 (word,1)
		FlatMapOperator<String, Tuple2<String, Integer>> wordAndOne = lineDS.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
			@Override
			public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
				// TODO 3.1 按照 空格 切分单词
				String[] wo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

206.Flink(一):flink概述,flink集群搭建,flink中执行任务,单节点、yarn运行模式,三种部署模式的具体实现 的相关文章

  • jmeter获取图片验证码-解密图片并识别

    说明 关于图片验证码的处理方式有三种方法 一是让开发屏蔽验证码 二是让开发后端指定一个万能验证码 三是使用OCR工具进行图片验证码的解密及识别 推荐使用前两种方法最省事 OCRServer工具识别图片验证码 由于没有对图片进行降噪 所以识别

随机推荐

  • 泰迪杯数据挖掘挑战赛C题 通用论坛正文提取

    参与第五届泰迪杯 侥幸获得二等奖 简单记录一下 一 问题的背景 在当今的大数据时代里 伴随着互联网和移动互联网的高速发展 人们产生的数据总量呈现急剧增长的趋势 当前大约每六个月互联网中产生的数据总量就会翻一番 互联网产生的海量数据中蕴含着大
  • 1. VC6.0致命错误 RC1015: 无法打开包含文件 'afxres.h'.解决方案

    引起此错误一般是因为运行库路径设置错误 导致找不到头文件 afxres h 解决方案 1 运行VC 选择 工具 按钮 选择 选项 如图 VC6 0致命错误
  • LS1028使用原生RGMII软件修改方案

    LS1028的网络拓扑结构 forlinx的开发板目前只做了五路网口 原生的RGMII并没有配置出来 默认将相关引脚功能用作了音频信号 若将该引脚功能用作了RGMII 音频功能就不能使用了 本人主要介绍软件上的修改 对于硬件原理部分是有硬件
  • bat删除文本文件每行前几个字符

    echo off set fn a txt for f usebackq delims i in fn do echo i gt con set h i setlocal enabledelayedexpansion echo h 4 en
  • 【预测模型-RBF预测】基于RBF神经网络实现腐蚀失重数据预测附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 信号处理 图像
  • windows版docker安装运行nacos配置连接数据库

    1 docker安装nacos 下载镜像 docker pull nacos nacos server 下载加载完成之后查看本地镜像 看看拉到本地没有 docker images 启动镜像 docker run d p 8849 8848
  • Mybatis学习笔记--1:先跑起来再说

    MyBatis 本是apache的一个开源项目iBatis 2010年这个项目由apache software foundation 迁移到了google code 并且改名为MyBatis 是一个基于Java的持久层框架 无论是Mybat
  • [诗歌] 断章

    你站在桥上看风景 看风景的人在楼上看你 明月装饰了你的窗子 你装饰了别人的梦 转载至 http baike baidu com link url CryedmfRUvN f04J9seKNbNNojxFQ4FmvF2 P7scQmAQWGq
  • 微信小程序静态页面的实现

    项目地址 github 前段时间微信出了个小程序 我也学习了一下 自己实现了一个小程序 当然里面都是静态页面 并无数据的操作 要开发小程序就得用微信的开发工具了 它现在不限制用户是否有Appid都可以下载来使用了 先上这个小程序的效果图 图
  • 随机颜色(微信小程序)

    随机颜色 function getRandomColor let rgb for let i 0 i lt 3 i let color Math floor Math random 256 toString 16 color color l
  • 数据结构静态顺序表

    顺序表 用一段地址连续存储单元依次存储数据元素的线性结构 seqlist h pragma once 防止头文件重复包含 define MAX SIZE 10 include
  • 苹果电脑升降级MacOS 11-13.x系统安装包

    macOS 13 Ventura 具有许多功能 包括 Stage Manager 和更新的 Spotlight 搜索 目前 苹果已经发布了正式版本 支持机型 iMac 2017 及后续机型 iMac Pro MacBook AIr 2018
  • 《九》TypeScript 中的内置工具

    TypeScript 内置了很多类型工具 来辅助进行类型转换 Partial
  • js获取获取上个月、当月、下个月 第一天与最后一天

    开发中的一个小需求 用js获取获取上个月 当月 下个月 第一天与最后一天 直接上代码 获取上个月 当月 下个月 第一天与最后一天 param val 传值 gt 1 2 3 param specificDate 传入日期 gt 2020 1
  • Java不指定具体数据库名,建立Mysql连接

    碰到个需求 即只提供IP地址 需要获取所有的数据库名 以及各个数据库的详细信息 以下内容为转载 感谢作者 本文是答疑文章 有朋友提出 为什么java建立连接 必须要指定数据库 不能像PHP那样连接数据库后再选择数据库吗 答案是肯定的 能 下
  • QML使用loader加载qml文件到QML

    转自 http blog chinaunix net uid 26126915 id 4366840 html QML的Loader元素经常备用来动态加载QML组件 可以使用source属性或者sourceComponent属性加载 这个元
  • 跨vlan通信-----单臂路由技术

    跨vlan通信 单臂路由技术 实验目标 1 实现跨vlan通信 为什么要使用vlan 1 提高性能 同一个广播域发送广播 造成网络堵塞 2 提高安全性 同一广播域中 机器设备过多 安全性降低 实验网络拓扑 pc1 pc2 pc3 pc4 V
  • Elastic Stack简介及es简单操作

    如果你没有听说过 Elastic Stack 那你一定听说过 ELK 实际上 ELK 是三款软件的简称 分别是 Elasticsearch Logstash Kibana 组成 在发展的过程中 又有新成员 Beats 的加入 所以就形成了
  • M2后日谈

    团队成员的简介 按照字母表序 韩佳胤 http www cnblogs com yinee 黄杨 http www cnblogs com skyjoker 林璐 http www cnblogs com linlu1142 刘俊伟 htt
  • 206.Flink(一):flink概述,flink集群搭建,flink中执行任务,单节点、yarn运行模式,三种部署模式的具体实现

    一 Flink概述 1 基本描述 Flink官网地址 Apache Flink Stateful Computations over Data Streams Apache Flink Flink是一个框架和分布式处理引擎 用于对无界和有界