satyrs

yuqing

  • home
  • leetcode
  • bilibili
  • categories
articles links about me
总字数 168.3k

satyrs

yuqing

  • home
  • leetcode
  • bilibili
  • categories

flink

2021-03-08
字数:1.2k字 | 预计阅读时长:4分钟

flink

state

  • 场景

    • 有状态的逻辑是因为数据之间存在关联,单条数据是没有办法把所有的信息给表现出来。
      • 去重
      • 窗口计算
      • 机器学习参数
      • 访问历史数据
  • 为什么要管理状态

    • 内存
      • 流式作业:24 小时的数据都放到内存,可能会出现内存不足。
    • 高可用
      • 机器若出现故障或者宕机,需要考虑如何备份及从备份中去恢复,
    • 扩展性
      • 单节点无法处理全部访问数据,增加几个节点进行横向扩展,这时数据的状态如何平均分配到新增加的节点。
  • 方案

    • Managed State & Raw State

      • 自定义operator用 raw
      • raw 必须能够转成字节数组
      • managed,flink自动存储和恢复,并进行内存优化
        支持已知的数据结构,如 Value、List、Map
    • Managed State

      • Keyed State

        • 每个 Key 对应一个 State

        • 整个程序中没有 keyBy 的过程就没有办法使用KeyedStream。

        • 并发改变时状态重新分配:内置了 2 种分配方式

        • Keyed State 通过 RuntimeContext 访问,这需要 Operator 是一个 Rich Function。

        • 几种 Keyed State 的差异

          • ReducingState 和 AggregatingState 与 ListState 都是同一个父类,但状态数据类型上是单个值

          • AggregatingState 输入的 IN,输出的是 OUT。

      • Operator State

        • 可以用于所有算子,常用于 Source
        • 一个 Operator 实例对应一个 State
        • Operator State 需要自己实现 CheckpointedFunction 或 ListCheckpointed 接口。
        • 支持的数据结构相对较少
  • 使用示例

    • 写状态机是如何实现

    • 实现的是:首先下订单,订单生成后状态为待付款,当再来一个事件状态付款成功,则事件的状态将会从待付款变为已付款,待发货…

  • 状态的保存和恢复

    • 保存

      • Checkpoint 会定时制作分布式快照
    • 恢复

      • checkpoint

        • 数据源需要支持数据重新发送
        • 两种一致性语义,一种是恰好一次,一种是至少一次
        • 1、把进程或者线程移到 active 的 其他台机器上
          2、整个作业的所有 Task 都回滚到最后一次成功 Checkpoint 中的状态
      • savepoint

        • 手动调整并发,必须要重启作业并会提示 Checkpoint 已经不存在–> 此时savepoint
        • 比较持久,以标准格式存储
        • 允许代码或配置发生改变,恢复需要启动作业手动指定一个路径恢复
    • checkpoint实现

      • 运行环境 env.enableCheckpointing 传入间隔时间。越频繁,恢复时追数据就会相对减少,IO 消耗增加。
      • 设置了 Exactly_Once 语义,并且需要 Barries 对齐,这样可以保证消息不会丢失也不会重复。
      • setMinPauseBetweenCheckpoints 防止 Checkpoint 太过于频繁
      • setCheckpointTimeout 表示做 Checkpoint 多久超时
      • setMaxConcurrentCheckpoints
      • enableExternalizedCheckpoints。默认 Checkpoint 会在整个作业 Cancel 时被删除。Checkpoint 是作业级别的保存点。
    • checkpoint可选的状态存储方式

      • MemoryStateBackend

        • 构造方法是设置最大的 StateSize,选择是否做异步快照
        • 且需要注意 maxStateSize <= akka.framesize 默认 10 M
        • Checkpoint 存储在 JobManager 内存中,因此总大小不超过 JobManager 的内存。- 本地测试、几乎无状态的作业,比如 ETL、JobManager 不容易挂,或挂掉影响不大的情况。不推荐在生产场景使用。
      • FsStateBackend

        • 需要传一个文件路径和是否异步快照
        • State 依然在 TaskManager 内存中- Checkpoint 存储在外部文件系统(本地或 HDFS)
        • 常规使用状态的作业、例如分钟级窗口聚合或 join、需要开启 HA 的作业。
      • RocksDBStateBackend

        • key/value 的内存存储系统
        • 不支持同步的 Checkpoint
        • 支持增量的 Checkpoint
        • 存储在外部文件系统(本地或 HDFS)
        • 单个 TaskManager 上 State 总量不超过它的内存+磁盘,单 Key 最大 2G,总大小不超过配置的文件系统容量即可
        • 超大状态的作业,例如天级窗口聚合、需要开启 HA 的作业、最好是对状态读写性能要求不高的作业。

窗口

  • todo

watermark

  • todo

部署

  • todo

CET

  • todo

概念&角色

  • TaskManager & slot
    • 每一个 TaskManager 都是一个JVM进程
    • 每个task slot表示TaskManager拥有资源的一个固定大小的子集
    • 将其管理的内存均分给各个slot
    • 一个TaskManager一个slot时,那么每个task group运行在独立的JVM中
    • 多个slot时,多个subtask可以共同享有一个JVM
    • 在同一个JVM进程中的task将共享TCP连接和心跳消息,也可能共享数据集和数据结构,从而减少每个task的负载。
  • todo

reference

  • 状态管理及容错机制
本文作者: yuqing wang
本文链接: https://satyrswang.github.io/2021/03/08/flink/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
赏

thanks for tips

支付宝
微信
  • 流处理
  • 大数据

扫一扫,分享到微信

微信分享二维码
微信的GraphTR模型
DeepFm
© 2023 yuqing wang
Hexo Theme Yilia by Litten
  • articles
  • links
  • about me

tag:

  • 随笔
  • 算法
  • ml
  • 编程语言
  • python
  • dl
  • 金融经济
  • tensorflow源码
  • 工程
  • spring
  • c++
  • 论文
  • gpu
  • cuda
  • 训诫
  • dubbo
  • es
  • 流处理
  • 大数据
  • java
  • 并发
  • 英文积累
  • linux
  • mac
  • cheetsheet
  • 数据库
  • 索引
  • redis
  • 金融
  • 读后感
  • 分布式
  • 推荐系统
  • 方法论
  • 股市理论
  • 模型框架
  • 计算机
  • leetcode
  • 英文写作
  • 货银
  • 货币政策
  • 商业银行
  • 零散知识点
  • 破站
  • ky

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • github
  • jianshu
  • cnblogs
  • bilibili
  • youtube
  • uva
关心算法、cs、网络、投资, 闲听历史、看史评 wechat satyrsh