Flink学习(四)-数据管道 & ETL

一、状态转换

map()

只适用于一对一的转换,即对每个进入算子的流元素,map() 将仅输出一个转换后的元素。

flatmap()

可以输出任意数量的元素,也可以一个都不发。

二、Keyed Streams

keyBy()

相当于 sql 中的 group by,通过 shuffle 来为数据流进行重新分区。

.keyBy(object -> object.key)

能做作为 keyBy 的条件:

  1. 结果是确定的;
  2. 实现了 hashCode 和 equals 方法

因此,元组和 POJO 来组成键,只要他们的元素遵循上述条件。

三、有状态的转换

1)Flink 管理状态的优势

  • 本地性: Flink 状态是存储在使用它的机器本地的,并且可以以内存访问速度来获取
  • 持久性: Flink 状态是容错的,例如,它可以自动按一定的时间间隔产生 checkpoint,并且在任务失败后进行恢复
  • 纵向可扩展性: Flink 状态可以存储在集成的 RocksDB 实例中,这种方式下可以通过增加本地磁盘来扩展空间
  • 横向可扩展性: Flink 状态可以随着集群的扩缩容重新分布

 2)valueState

对于每个键 ,Flink 将存储一个单一的对象

open() 方法通过定义 ValueStateDescriptor<?> 建立了管理状态的使用。构造器的参数定义了这个状态的名字(“name”),并且为如何序列化这些对象提供了信息.

3)清理状态

在无限增长的键中,必须要清除不再使用的状态。

使用 key.clear()清理状态。

4)connected Streams

额外增加一组控制流,来控制某些转换,例如数据流的阈值、规则或者其他参数等。

要求:两个流的键一致,即以相同的方式进行分区。

相关推荐

  1. flink学习-状态管理

    2024-04-08 13:04:03       29 阅读
  2. flink状态管理)】MemoryStateBackend的实现

    2024-04-08 13:04:03       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-08 13:04:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-08 13:04:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-08 13:04:03       87 阅读
  4. Python语言-面向对象

    2024-04-08 13:04:03       96 阅读

热门阅读

  1. 【css】backgroud-position控制背景图位置

    2024-04-08 13:04:03       32 阅读
  2. windows 环境下docker打包python项目

    2024-04-08 13:04:03       41 阅读
  3. 基于单片机的风向风速传感器防冻装置设计

    2024-04-08 13:04:03       35 阅读
  4. 网络入门基础

    2024-04-08 13:04:03       30 阅读
  5. ISBN信息查询api接口

    2024-04-08 13:04:03       40 阅读
  6. 【云开发笔记NO.25】缓存和技术中台

    2024-04-08 13:04:03       31 阅读
  7. SpringBoot 使用redis

    2024-04-08 13:04:03       32 阅读
  8. 这个开源项目,支持中文版啦~

    2024-04-08 13:04:03       33 阅读