专栏首页SmartSiFlink 使用 Broadcast State 的4个注意事项

Flink 使用 Broadcast State 的4个注意事项

在 Apache Flink 1.5.0 中引入了广播状态(Broadcast State)。本文将描述什么是广播状态模式,广播状态与其他的 Operator State 有什么区别,最后说明一下在 Flink 中使用该功能时需要考虑的一些重要注意事项。

1. 什么是广播状态模式

广播状态模式指的是将低吞吐量的事件流(例如,包含一组规则)广播到某个算子所有并发实例上的一种流应用程序,然后与来自另一条事件流的原始数据进行计算。广播状态模式的一些典型应用案例如下:

  • 动态规则:假如我们有这样一条规则,当交易值超过100万美元时需要发警报,并将这一规则广播到算子所有并发实例上。
  • 数据丰富:对只包含用户ID的交易数据流进行数据丰富,可以将广播数据与用户ID进行关联。

为了实现这样的应用,广播状态是关键组件,我们将在下文详细描述。

2. 什么是广播状态?

广播状态是 Flink 中支持的第三种类型的 Operator State。广播状态使得 Flink 用户能够以容错、可扩展地将来自广播的低吞吐的事件流数据存储下来。来自另一条数据流的事件可以流经同一算子的各个并发实例,并与广播状态中的数据一起处理。有关其他类型的状态以及如何使用它们的更多信息,可以查阅 Flink 文档。

广播状态与其他 Operator State 之间有三个主要区别。不同于其余类型的 Operator State,广播状态:

  • Map 的格式
  • 有一条广播的输入流
  • 算子可以有多个不同名字的广播状态

广播状态怎么使用可以查看博文Flink 广播状态实战指南

3. 重要注意事项

对于急切想要使用广播状态的 Flink 用户,Flink 官方文档提供了有关 API 的详细指南,以及在应用程序中如何使用该功能。在使用广播状态时要记住以下4个重要事项:

3.1 使用广播状态算子任务间不会相互通信

这也是为什么 (Keyed)-BroadcastProcessFunction 只有广播端可以修改广播状态内容的原因。用户必须保证对于到达的每个元素,算子所有并发任务必须以相同的方式修改广播状态内容(保证一致性)。或者说,如果不同的并发任务拥有不同的广播状态内容,将导致不一致结果。

3.2 广播状态中事件顺序在不同任务上不尽相同

尽管广播流元素保证所有元素(最终)可以到达下游所有任务,但是元素到达每个任务的顺序可能会不同。因此,对广播状态的修改不能依赖于输入数据的顺序。

3.3 所有算子任务都会快照下广播状态

在 checkpoint 时,所有任务都会快照他们的广播状态,并不仅仅是其中的一个,即使所有任务在广播状态中存储的元素是一样的。这样做的目的是为了避免在恢复期间从单个文件读取而造成热点。但是,我们还会通过权衡因子 p (=并发度)对增加的快照状态大小进行权衡(随着并发度的增加,快照的大小也会随之增加)。Flink 保证了在恢复/扩展时不会出现重复数据和丢失数据。在以相同或更小并行度恢复时,每个任务会读取其对应的检查点状态。在扩大并发度恢复时,每个任务优先读取自己的状态,剩下的任务(p_new-p_old)以循环方式读取先前任务检查点的状态。

3.4 RocksDB状态后端目前还不支持广播状态

广播状态在运行时保存在内存中。因为当前(博文发表事件为2018.9),RocksDB 状态后端还不适用于 Operator State。Flink 用户应该相应地为其应用程序配置足够的内存。

欢迎关注我的公众号和博客:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [源码分析] 从实例和源码入手看 Flink 之广播 Broadcast

    对黑名单中的IP进行检测过滤。IP黑名单的内容会随时增减,因此是可以随时动态配置的。

    罗西的思考
  • Flink/Spark 如何实现动态更新作业配置

    由于实时场景对可用性十分敏感,实时作业通常需要避免频繁重启,因此动态加载作业配置(变量)是实时计算里十分常见的需求,比如通常复杂事件处理 (CEP) 的规则或者...

    王知无-import_bigdata
  • Flink使用Broadcast State实现流处理配置实时更新

    Broadcast State是Flink支持的一种Operator State。使用Broadcast State,可以在Flink程序的一个Stream中输...

    王知无-import_bigdata
  • Flink Broadcast State实战案例:电商平台用户行为模式分析

    Broadcast State是Flink 1.5引入的功能,本文将跟大家分享Broadcast State的潜在使用场景,并使用电商用户行为分析的例子来演示B...

    PP鲁
  • Spark/Flink广播实现作业配置动态更新

    那么问题来了:配置每次变化都得手动修改代码,再重启作业吗?答案显然是否定的,毕竟实时任务的终极目标就是7 x 24无间断运行。Spark Streaming和F...

    王知无-import_bigdata
  • Flink State 可以代替数据库吗?

    有状态的计算作为容错以及数据一致性的保证,是当今实时计算必不可少的特性之一,流行的实时计算引擎包括 Google Dataflow、Flink、Spark (S...

    大数据技术架构
  • Apache Flink 中广播状态的实用指南

    Via:https://flink.apache.org/2019/06/26/broadcast-state.html

    用户6259908
  • A Practical Guide to Broadcast State in Apache Flink

    从版本1.5.0开始,Apache Flink具有一种称为广播状态的新型状态。 在这篇文章中,我们解释了广播状态是什么,并展示了如何将其应用于评估事件流上的动态...

    yiduwangkai
  • 使用Redis的五个注意事项

    下面内容来源于Quora上的一个提问,问题是使用Redis需要避免的五个问题。而回答中超出了五个问题的范畴,描述了五个使用Redis的注意事项。如果你在使用或者...

    庞小明
  • 使用MySQL的23个注意事项

    1。如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就需要使用SSH隧道来加密该连接的通信。

    用户7657330
  • 大数据入门:Flink状态编程与容错机制

    在大数据技术发展历程当中,Flink框架可以说是新一轮的热点技术框架,主打流批一体的计算模式,成为更适应当下需求的技术框架,因此再也技术领域得到更多的重视。今天...

    成都加米谷大数据
  • Flink DataStream编程指南及使用注意事项。

    Flink中的DataStream程序是对数据流进行转换的常规程序(例如,过滤,更新状态,定义窗口,聚合)。数据流的最初的源可以从各种来源(例如,消息队列,套接...

    Spark学习技巧
  • 五万字 | Flink知识体系保姆级总结

    一、Flink简介 二、Flink 部署及启动 三、Flink 运行架构 四、Flink 算子大全 五、流处理中的 Time 与 Window 六、Flink ...

    五分钟学大数据
  • 使用Python标准库函数os.listdir()时的4个注意事项

    标准库函数os.listdir()是在文件操作和文件遍历时常用的函数之一,用来获取指定文件夹中的所有文件和子文件夹名称组成的列表,完整语法为:

    Python小屋屋主
  • 大数据Flink面试考题___Flink高频考点,万字超全整理(建议收藏)

    1.下面哪个不是 Dataset的转换算子() A. readTextFile B reduce distinct D rebalance

    ChinaManor
  • 基于 Flink 和 Drools 的实时日志处理

    为了解决上面2个问题,我们基于flink和drools规则引擎做了实时的日志处理服务。

    zhisheng
  • 聊聊flink的Broadcast State

    flink-core-1.7.0-sources.jar!/org/apache/flink/api/common/state/MapStateDescript...

    codecraft
  • 聊聊flink的Broadcast State

    flink-core-1.7.0-sources.jar!/org/apache/flink/api/common/state/MapStateDescript...

    codecraft
  • Flink 1.7 文档翻译活动期待大家的参与 | ApacheCN

    参与方式:https://github.com/apachecn/flink-doc-zh/blob/master/CONTRIBUTING.md

    ApacheCN_飞龙

扫码关注云+社区

领取腾讯云代金券