Flink学习笔记(六):flink数据广播

Flink的广播流最详解 【代码】Flink的广播流最详解。 阅读详情

一、需求场景

在很多情况下,对数据流处理需要动态更新一些参数,但是但因为该参数是在算子中作为一个变量,一旦flink作业启动,想修改关键字不得不停掉作业,然后再重新启动作业,实时性和便利性都比较差。

记得公司一个项目需要动态配置校验参数,检测日志中的该参数是否存在,频繁的重启flink作业,最后把服务器都搞挂了……,就差拉去祭天了T_T,还好是测试环境,逃过一劫

那么有没有可以动态修改算子参数的呢?如何进行动态修改算子的参数呢?

flink为我们提供了一个广播模式来解决这个问题。

广播流的流数据能够被算子的所有分区所处理,而数据流的流数据只能够被算子的某一分区处理。

广播流的特点也决定适合做配置的动态更新

二、实现代码

通过网络获取一个ObjectA对象的数据结构
通过kafka获取一个ObjectB对象的datastream
然后把通过广播连接两个数据流,在BroadcastProcessFunction进行数据处理
最后将处理好的数据通过sink invoke到指定的容器中。

定义广播流

private static BroadcastStream broadcastConfig = null;

获取广播流

//获取广播流
DataStream<ObjectA> stream = env.addSource(new RichSourceFunction<ObjectA>() {
    @Override
    public void run(SourceContext<ObjectA> sourceContext) throws Exception {
        //从服务端获取数据,比如http get获取
    }

    @Override
    public void cancel() {

    }
});

广播

final MapStateDescriptor<String, ObjectA> broadcastStateDescriptor = new MapStateDescriptor<>(
        "objectA",
        String.class,
        ObjectA.class);
broadcastConfig = stream.broadcast(broadcastStateDescriptor);

数据流连接广播流,dataStream参考前文从kafka获取

DataStream<ObjectB> broadcastDataStream = dataStream
        .connect(broadcastConfig)
        .process(new BroadcastProcessFunction<ObjectB, ObjectA, ObjectB>() {
            //拦截的关键字
            private ObjectA oa = null;
            @Override
            public void processElement(ObjectB objectB, ReadOnlyContext readOnlyContext, Collector<ObjectB> collector) throws Exception {
				//TODO 处理 ObjectA 和 ObjectB
				collector.collect(objectB);
            }

            @Override
            public void processBroadcastElement(ObjectA objectA, Context context, Collector<ObjectB> collector) throws Exception {
				oa = objectA;
            }
        });

数据处理

broadcastDataStream.addSink(new RichSinkFunction<ObjectB>() {
    @Override
    public void open(Configuration parameters) throws Exception {
        super.open(parameters);
    }

    @Override
    public void close() throws Exception {
        super.close();
    }

    @Override
    public void invoke(ObjectB objectB, Context context) throws Exception {

    }
});
Flink广播流、广播状态原理简析 Prologue 在很久之前的《Spark Streaming/Flink广播实现作业配置动态更新》一文中,笔者简单介绍了Flink Streaming API中广播流和广播状态的使用方法。前几天见到社区群内有童鞋询问与广播状态相关的事情,于是写一篇深入一点的文章说说它。 Broadcast[Connected]Stream 拿之前的示意图复习一下。其中Stream A是普通的数据流... 阅读详情

相关推荐

flink 动态广播状态

flink 动态广播状态笔记 1.概要 往往我们在做flink任务计算的时候,需要动态的匹配规则,但是我们又不能每次修改都去重新部署服务,所以我们这里需要借助于flink的动态广播状态机制,来实时的处理我们的规则变化 2.样例 本实例,我们做的是增加动态规则判断,根据实时规则变化来判断是否需要做外部存储校验 代码: package com.kn.broadcast import org....

mapeng765441650的博客 3076

Flink广播流——BroadcastStream

在日常Flink开发中,有时需要给正在运行中的Flink程序修改参数,比如过滤一些字段、字段值等,而这些值有时是配置在Mysql中的,但如果进行高吞吐计算的Function中动态查询配置文件有可能使任务阻塞,甚至导致任务出现失败的情况。 遇到上述场景时,可以考虑通过广播流查询配置文件,广播到某个operator的所有并发实例中,然后与另一个条流数据连接进行计算。 实现步骤: 1、首先定义一个Mysql的实体类,下面例子的属性名可以自己根据实际中Mysql中表名来变化 class Flow {

LINBE_blazers的博客 7555

Flink的流广播(Broadcast State)

  上一篇Flink的状态管理中,我们提到了Operator state,本文介绍的广播状态(Broadcast State)是 Apache Flink 中支持的第三种类型的operator state。Broadcast State使得 Flink 用户能够以容错、一致、可扩缩容地将来自广播的低吞吐的事件流数据存储下来,被广播到某个 operator 的所有并发实例中,然后与另一条流数据连接进...

沧海笑007 5620

Flink广播流 BroadcastStream

Flink中的广播流(BroadcastStream)是一种特殊的流处理方式,它允许将一个流(通常是一个较小的流)广播到所有的并行任务中,从而实现在不同任务间共享数据的目的。广播流在处理配置信息、小数据集或者全局变量等场景下特别有用,因为这些数据需要在所有任务中保持一致且实时更新。定义MapStateDescriptor:首先需要定义一个MapStateDescriptor来描述要广播的数据的格式。这个描述器指定了数据的键值对类型。创建广播流:然后,需要将一个普通的流转换为广播流。这通常通过调用流的。

老码农的博客 5346

《Flink应用实战》(一)--广播状态

《Flink一起学》之广播状态的使用

一锅粥 2948

大数据Flink(四十二):​​​​​​​BroadcastState

在开发过程中,如果遇到需要下发/广播配置、规则等低吞吐事件流到下游所有 task 时,就可以使用 Broadcast State。Broadcast State 是 Flink 1.5 引入的新特性。下游的 task 接收这些配置、规则并保存为 BroadcastState, 将这些配置应用到另一个数据流的计算中。

Lansonli(蓝深李)的博客 3708

Flink专题七:Flink 中广播流之BroadcastStream

由于工作需要最近学习flink 现记录下Flink介绍和实际使用过程 这是flink系列的第七篇文章 Flink 中广播流之BroadcastStream使用场景使用案例数据流和广播流connect方法BroadcastProcessFunction 和 KeyedBroadcastProcessFunction重要注意事项 使用场景 背景: 我们定义两个流,一个流包含图形(Item),具有颜色和形状两个属性。 另一个流包含特定的规则(Rule),代表希望寻找的模式。 在图形流中,我们需要首先使用颜.

beyond的博客 8333

【Flink】Flink广播变量

在Flink中,taskmanager中划分不同slot,计算过程中算子在多个Slot中进行,因此不同算子的计算数据之间不能像Java数组之间一样互相访问,Broadcast可以解决这个问题。 在 flink 中, 针对某一个算子需要使用公共变量的情况下, 就可以把对应的数据给广播出去, 这样在所有的节点中都可以使用了。 在一个算子中使用广播变量主要有两个步骤: 广播变量 使用 withBroadcastSet(data, "name") 这个方法即可, name变量代表了获取该广播变量的名称

一杯咖啡半杯糖的博客 2887

Flink的广播变量和广播状态

1、dataStreaming中的broadcast 把元素广播给所有的分区,数据会被重复处理 dataStream.broadcast() 2、机器级别的广播 广播变量允许编程人员在每台机器上保持1个只读的缓存变量,而不是传送变量的副本给tasks。 广播变量创建后,它可以运行在集群中的任何function上,而不需要多次传递给集群节点。另外需要记住,不应该修改广播变量,这样才能确保每个...

勇心在馨 2359

Flink的数据广播:实战案例

1. 背景介绍 1.1 Apache Flink简介 Apache Flink是一个开源的流处理框架,用于实时处理无界和有界数据流。Flink具有高吞吐量、低延迟、高可用性和强大的状态管理功能,使其成为大规模数据处理的理想选择。Flink支持各种数据源和数据接收器,可以轻松地与其他流处理

AI天才研究院 570

强化学习经典算法笔记(九):LSTM加持的PolicyGradient算法

强化学习经典算法笔记(九):LSTM加持的PolicyGradient算法 在上文《强化学习经典算法笔记(八):LSTM加持的A2C算法解决POMDP问题》的基础上,实现了LSTM+MLP的Policy Gradient算法。 实现过程如下: import argparse, math, os, sys import numpy as np import gym from gym import wrappers import matplotlib.pyplot as plt import torch fr

hhy_csdn的博客 5636

flink数据广播场景总结

数据集广播,主要分为广播变量,广播维表(数据集)两种,一种为变量,一种为常量(抽象的说法); 一.数据广播背景 对于小变量,小数据集,需要和大数据集,大流进行联合计算的时候,往往把小数据集广播出去,整体直接和大数据集(流)的分布式最小粒度数据进行计算,最后把计算结果合并,这样效率更高,省去分布式节点之间的数据传输及二次计算。 例如:在Flink使用场景中,外部的配置文件或计算规则及维表等进行预加载,并定期更新,流式计算中广播小变量等场景。 数据集的广播,主要有以下几种方式可以实现 1.预加载 在

xuye0606的博客 1548

从零开始用飞牛fnas搭建集成DeepSeek-R1的远程AI工作台

从零开始用飞牛fnas搭建集成DeepSeek-R1的远程AI工作台

AI+全栈,AI+应用,实操落地,前沿技术 3802

flink 广播变量

使用过spark的人都知道广播变量这个概念。广播变量相当于一个共享变量,将一个小数据集复制分发到每个task,task直接从本地读取。flink中有两种广播变量,一种静态的广播变量,一种实时动态的广播变量。 静态广播变量示例: 使用场景如: 黑名单判断,将黑名单广播出去进行数据匹配。 public class FlinkBroadcast2 { pub...

wflh323的专栏 2843

FT2232HL JTAG下载器硬件设计指南:从引脚配置到电平转换实战

本文详细解析了FT2232HL JTAG下载器的硬件设计要点,包括引脚配置、电平转换电路设计及EEPROM配置技巧。通过实战案例展示如何利用FT2232HL实现高速JTAG通信,解决电平不匹配等常见问题,提升嵌入式开发效率。特别适合需要灵活JTAG接口的硬件工程师参考。

weixin_29194693的博客 254

J-LINK下载程序出现No Cortex-M Device found in JTAG chain…问题,最全7种解决方法

J-Link下载程序出现No Corect 等的问题的7种方法 后来编辑JLinkSettings.ini文件,找到"Device"项,将其更改Device="Cortex-M0+"

cjmsea的博客 5611

flink stream broadcast广播变量

Apache Flink 官方文档提供了广播状态的功能以及有关 API 的详细指南。在使用广播状态时要记住以下4个重要事项: 使用广播状态,operator task 之间不会相互通信 广播状态中事件的顺序在各个并发实例中可能不尽相同 所有 operator task 都会快照下他们的广播状态 RocksDB 状态后端目前还不支持广播状态 广播变量创建后,它可以运行在集群中的任何functio...

weixin_43315211的博客 5936

RT-Thread GD32F4xx HWTIMER驱动

GD32F4xx RT-Thread 硬件定时器驱动调试使用记录

madao1234的博客 1481

Flink(19):Flink之广播变量

目录 0. 相关文章链接 1. Flink中广播变量概述 2. 编码步骤 3. 代码演示 0. 相关文章链接 1. Flink中广播变量概述 Flink支持广播。可以将数据广播到TaskManager上就可以供TaskManager中的SubTask/task去使用,数据存储到内存中。这样可以减少大量的shuffle操作,而不需要多次传递给集群节点; 比如在数据join阶段,不可避免的就是大量的shuffle操作,我们可以把其中一个dataSet广播出去,一直...

yang_shibiao的博客 4246

小波变换完全指南:从原理到实践的深度解析

在信号处理领域,傅里叶变换长期以来一直是频域分析的主要工具。然而,傅里叶变换存在一个根本性的局限:它只能告诉我们信号中包含哪些频率成分,却无法告诉我们这些频率成分在什么时刻出现。这就像是你知道一首歌用了哪些音符,却不知道这些音符的演奏顺序。小波变换(Wavelet Transform) 应运而生,它完美地解决了这个问题。小波变换不仅能够提供频率信息,还能同时提供时间信息,实现了信号的时频联合分析。本文将带你从零开始,深入理解小波变换的原理、实现和应用。傅里叶变换的定义如下: 它使用正弦和余弦这样的全局基函数

电脑管家 206

agent-browser 安装笔记(OpenClaw)

【代码】agent-browser 安装笔记(OpenClaw)

tiantiantbtb的博客 1238

Flink 定时加载外部文件数据并广播

场景:刚做完的需求,一个kafka的流数据,需要和外部文件数据进行对比,这个外部文件存在每天更新的场景,所以需要再flink中定时读取,并用广播机制,广播到下游。 1、实时流: 基于flink1.9.2,必须使用FlinkKafkaConsumer FlinkKafkaConsumer ssConsumer = new FlinkKafkaConsumer(READ_TOPIC, new ...

泛音青年的博客 5007

运行时安全引擎RSE

该博客重点介绍了运行时安全引擎(Runtime Security Engine,简称 RSE)与应用处理器(Application Processor,简称 AP)之间的关系。 根据 ARM 的参考设计,RSE 是位于同一芯片(die)上的一个独立核心,与 AP 和系统控制处理器(System Control Processor,简称 SCP)并列存在。RSE 为整个系统提供基本的安全保障和运行时服务,例如:可信启动(trusted boot)、度量启动(measured boot)、平台认证(platf

AI-安全-功耗 1362

Flink 广播流最佳实践

文章目录广播流与普通流JOIN图解代码实践 广播流与普通流JOIN图解 user actions 可以看作是事件流 patterns 为广播流,把全量数据加载到不同的计算节点 普通双流join 根据join 条件,根据key的发到同一个计算节点,如下图类似 代码实践 主要功能,实现动态添加监控词,满足条件数据继续向下流转,不满足条件的,直接丢弃 主类 StreamExecutionEnv...

csdn问鼎 6834

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Flink 的广播变量

Flink 支持广播变量,就是将数据广播到具体的 taskmanager 上,数据存储在内存中,这样可以减缓大量的 shuffle 操作; 比如在数据 join 阶段,不可避免的就是大量的 shuffle 操作,我们可以把其中一个 dataSet 广播出去,一直加载到 taskManager 的内存中,可以直接在内存中拿数据,避免了大量的 shuffle,导致集群性能下降; 广播变量创建后,它...

杜海的博客 1011

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

快速入门Flink (6) —— Flink的广播变量、累加器与分布式缓存

> **写在前面:** 博主是一名大数据的初学者,昵称来源于《爱丽丝梦游仙境》中的Alice和自己的昵称。作为一名互联网小白,`写博客一方面是为了记录自己的学习历程,一方面是希望能够帮助到很多和自己一样处于起步阶段的萌新`。由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!个人小站:[http://alices.ibilibili.xyz/](http://alices.ibilibili.xyz/) , 博客主页:[https://alice.blog.youkuaiyun.com/](http

大数据梦想家 4166
上一篇: Flink学习笔记(五):flink数据合流
下一篇: Flink学习笔记(七):flink聚合函数
胖胖的战士
博客等级 码龄18年 104粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值