zl程序教程

您现在的位置是:首页 >  其他

当前栏目

2021年最新最全Flink系列教程_Flink原理初探和流批一体API(二.五)

2023-04-18 12:54:50 时间

day02-03_流批一体API

今日目标

  • 流处理原理初探
  • 流处理概念(理解)
  • 程序结构之数据源Source(掌握)
  • 程序结构之数据转换Transformation(掌握)
  • 程序结构之数据落地Sink(掌握)
  • Flink连接器Connectors(理解)

流处理原理初探

  • Flink的角色分配
    1. JobMaster 老大, 主要负责 集群的管理, 故障的恢复, checkpoint 检查点设置
    2. taskmanager worker 小弟, 具体负责任务的执行节点
    3. client 提交任务的界面
  • taskmanager 执行能力
    1. taskslot 静态的概念
    2. parallelism 并行度 动态概念
  • 每个节点就是一个 task 任务 每个任务拆分成多个并行处理的任务, 多个线程就有多个子任务,就叫子任务 subtask
  • 流图 StreamGraph 逻辑执行流图 DataFlow operator chain 操作链
  • JobGraph ExecuteGraph 物理执行计划
  • Event 事件 带有时间戳的
  • Operator 传递模式 : one to one 模式, redistributing模式
  • Flink之执行图

流处理概念

数据的时效性

  • 强调的是数据的处理时效 处理的时间窗口, 按月, 按天, 按小时还是秒级处理

流处理和批处理

  • 批处理是有界的数据
    • 处理完整的数据集, 比如排序数据, 计算全局的状态, 生成最终的输入概述.
    • 批量计算: 统一收集数据->存储到DB->对数据进行批量处理
  • 流处理是无界的数据
    • 窗口操作来划分数据的边界进行计算
    • 流式计算,顾名思义,就是对数据流进行处理
  • 在Flink1.12时支持流批一体 既支持流处理也支持批处理。
  • 流批一体 Flink1.12.x 批处理和流处理
    • 可复用性: 作业在流模式或者批处理两种模式自由切换, 无需重写任何代码.
    • 维护简单: 统一的 API 意味着流和批可以共用同一组 connector,维护同一套代码.

编程模型

  • source - 读取数据源
  • transformation - 数据转换 map flatMap groupBy keyBy sum
  • sink - 落地数据 addSink print

Source

基于集合的Source

合并-拆分

分流 select 和 outputside

数据重平衡 rebalance

Sink

预定义Sink

/**
 * Author itcast
 * Desc
 * 1.ds.print 直接输出到控制台
 * 2.ds.printToErr() 直接输出到控制台,用红色
 * 3.ds.collect 将分布式数据收集为本地集合
 * 4.ds.setParallelism(1).writeAsText("本地/HDFS的path",WriteMode.OVERWRITE)
 */
public class SinkDemo01 {
    public static void main(String[] args) throws Exception {
        //1.env
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        //2.source
        //DataStream ds = env.fromElements("hadoop", "flink");
        DataStream<String> ds = env.readTextFile("data/input/words.txt");

        //3.transformation
        //4.sink
        ds.print();
        ds.printToErr();
        ds.writeAsText("data/output/test", FileSystem.WriteMode.OVERWRITE).setParallelism(2);
        //注意:
        //Parallelism=1为文件
        //Parallelism>1为文件夹

        //5.execute
        env.execute();
    }
}

自定义Sink

Connector

  • Flink官方提供的连接器, 用于连接 JDBC 或者 Kafka ,MQ等

JDBC 连接方式

Kafka 连接方式

从 kafka 集群中消费数据

Flink写入到 Redis 数据库

问题

  • vmware 打开镜像文件 15.5.x 升级为 16.1.0 , 可以升级为
  • fromSequece(1,10) , CPU 12线程, from <= to 设置的并行度大于生成的数据, 并行度为12, 生成数据只有 10 个,报这个。
  • Flink Standalone HA 高可用 jobmanager -> log