Flink DataStream API 介绍

【Flink入门】Flink自定义Source读取MySQL数据 在前一篇博客中已经简单介绍了Flink读取Kafka数据并通过Demo进行实践,这篇博客简单介绍Flink通过自定义Source读取MySQL数据并通过Demo进行演练。 首先我们来简单了解下SourceFunction 接口,它是所有 stream source 的根接口,它继承自一个标记接口(空接口)Function。 在IDEA中打开SourceFunction,按下图右击鼠标,选择Diagrams–>show Diagrams SourceFunction 定义了两个接口方法: 1、run 阅读详情

Flink DataStream API 介绍

StreamExecutionEnvironment

StreamExecutionEnvironment
StateBackend管理
setStateBackend()
Checkpoint管理
enableCheckpointing()
Serialzer序列化管理
addDefaultKryoSerialize()
类型和序列化注册
registerTypewithKryoSerializer()
registerType()
DataStream数据源创建
addSource()
readTextFile()
fromCollection()
fromElements()
socketTextStream()
TimeCharacteristic管理
setStreamTimeCharacteristic()
Transformation存储与管理
addOperation()
StreamGraph创建和获取
getStreamGraph()
CacheFile注册与管理
registerCacheFile()
任务提交与运行
execute()
executeAsync()
重启策略
setRestartStrategy()

DataStram数据源

StreamExecutionEnvironment 数据源
基本数据源接口(直接使用)
GenerateSequence
Collection集合
Socket
File(HDFS,Local)
数据源连接器(需要依赖第三方依赖)
Kafka Connector
Es Connector
Custom DataSource
根据具体数据源决定
addSource()方法

Datastream 基本数据源

//从给定的数据元素中转换
DatastreamSource<OUT> fromElements(OUT... data)
//从指定的集合中转换成DataStream
DatastreamSource<OUT> flomCollection(Collection<OUT> data)
//读取文件并转换
DataStreamSource<OUT> readFile(FileInputFormat<OUT> inputFormat, String filePath)
//从Scocket端口中读取
DataStreamSource<String> socketTextStream(String hostname, int port, String delimiter)
//直接通过InputFormat创建
DataStreamSource<OUT> createInput(InputFormat<OUT, ?> inputFormat)

最终都是通过 ExecutionEnvironment 创建 fromSource() 方法转换成DataStreamSource

Datastream 数据源连接器

Flink 内 置 Connector:

  • Apache Kafka (source/sink)

  • Apache Cassandra (Sink)

  • Amazon Kinesis Streams (source/sink)

  • Elasticsearch(Sink)

  • Hadoop FileSystem (sink)

  • RabbitMQ (source/sink)

  • Apache NiFi (source/sink)

  • Twitter Streaming API (source)

  • Google PubSub (source/sink)

  • JDBC (sinkJ

Apache Bahir 项 目 :

  • Apache ActiveMQ (source/sink)
  • Apache Flume (sink)
  • Redis (sink)
  • Akka (sink)
  • Netty (source)

以Kafka 连接器为例 :

<dependency>
    <groupld>org.apache.flink</groupld>
    <artifactId>flink-connector-kafka_2.11</artifactId>
    <version>1.11.0</version>
</dependency>

Datastream 数据源连接器 - Source

Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "localhost:9092);
properties.setProperty("group.id", "test0");

Datastream<String> stream = env.addSource(new FlinkKafkaConsumer<>("topic",new SimpleStringSchema(), properties));

Datastream 数据源连接器

以Kafka 连接器为例 :

Map<KafkaTopicPartition, Long> specificStartOffsets = new HashMap<>();

specificStartOffsets.put(new KafkaTopicPartition(“myTopic“, 0), 23L);
specificStartOffsets.put(new KafkaTopicPartition(“myTopic“, 1), 31L);
specificStartOffsets.put(new KafkaTopicPartition(“myTopic“, 2), 43L);

myConsumer.setStartFromSpecificOffsets(specificstartOffsets);

Datastream 数据源连接器 - Sink

Datastream<string> stream = …

Properties properties = new Properties();
properties.setpProperty("bootstrap.servers", "localhost:9092");

FlinkKafkaProducer<String> myProducer = new FlinkKafkaProducer<>("my-topic",//target topic
new SimpleStringSchema(), // serialization schema
properties, // producer config
FlinkKafkaProducer.Semantic.EXACTLY_ONCE); // fault-tolerance
stream.addsSink(myProducer);

Datastream 主要转换操作

在这里插入图片描述

DataStream转换操作
基于单数据处理
map
一对一转换
filter
过滤
flatmap
一对多转换
Window操作
NonKeyed DataStream
Keyed DataStream
timeWindowAll
时间窗口
countWindowAll
计数窗口
windowAll
自定义窗口
timeWindowAll
时间窗口
countWindowAll
计数窗口
windowAll
自定义窗口
多流合并
NonKeyed DataStream
join
关联操作
connect
连接操作
coGroup
关联操作
union
合并操作
Keyed DataStream
interval join
间隔join操作
单流切分
split
切分操作
sideOutput
旁路输出

理解Keyedstream

在这里插入图片描述

Datastream 之间的转换

在这里插入图片描述

物理分组操作

类型描述
dataStream.global();全部发往第1个task
dataStream.broadcast();广播
dataStream.forward();上下游并发度一样时一对一发送
dataStream.shuffle();随机均匀分配
dataStream.rebalance();Round-Robin(轮流分配)
dataStream.recale();Local Round-Robin(本地轮流分配)
dataStream.partitionCustom();自定义单播

public DataStream<T> shuffle(){
    return setConnectionType(new ShufflePartitioner<T>());
}

DataStream Kafka 实例

public class KafkaExample{
    public static void main(String[] args) throws Exception {
        // parse inputarg umenlts
        final ParameterTool parameterTool = ParameterTooLfromArgs(args);
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.getConfig().setRestartStrategy(RestartStrategies.fixedDelayRestart(4, 10000));
        env.enableCheckpointing(5000); // create a checkpoint every 5 seconds
        env.getConfig().setGlobalobParameters(parameterTool); // make parameters available in the web interface
        env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
        DataStream<kafkaEvent> input = env
            .addSource(
            new FlinkKafKaConsumer<>(
                parameterTool.getRedquired("input-topic"),
                new KafkaEventSchema(),
                parameterTool.getPropelties())
            .assignTimestampsAndWatermarks(new CustomWatermarkExtractor()))
            .keyBy("word")
            .map(new RollingAdditionMapper())
            .shuffle();
        input.addSink(
            new FlinKafkaProduCer<>(
                parameterTool.getRequired("output-topic"),
                new KeyedSerializationSchemaWrapper<>(new KafKaEventSChema()),
                parameterTool.getProperties(),
                FlinkKafkaProducer.Semantic.EXACTLY_ONCE));
        env.execute("Modern Kafka ExamPle");
    }
}
总结:Flink之DataStream各API介绍 本文主要是详细介绍类中的各个方法,并给出它们的使用场景。 阅读详情

相关推荐

大数据 Flink:流批一体 API 连接器 JDBC

Apache Flink 是一个流处理和批处理的开源分布式计算框架,提供了丰富的连接器用于与不同数据源进行交互。本文将介绍如何在 Flink 中使用流批一体 API 连接器 JDBC,并提供相应的源代码示例。希望本文能帮助你理解如何在 Flink 中使用 JDBC 连接器,并在你的大数据项目中发 连接器,并在你的大数据项目中发挥作用。同时,你还需要准备一个关系型数据库,例如 MySQL 或 PostgreSQL,并创建一个用于测试的表。最后,我们执行了一个简单的查询操作,并打印结果。替换为你要写入的表名。

AlianBlank的博客 203

(12)Flink实战-Mysql读取、写入-JDBCInputFormat+JDBCOutputFormat

在flink中没有现成的用来写入MySQL的sink,但是flink提供了一个类,JDBCOutputFormat,通过这个类,如果你提供了jdbc的driver,则可以当做sink使用。 JDBCOutputFormat其实是flink的batch api,但也可以用来作为stream的api使用,社区也推荐通过这种方式来进行。 JDBCOutputFormat用起来很简单,只需要一个prepared statement,driver和database connection,就可以开始使用了。 ..

allensandy的博客 7724

Flink系列:DataStream API介绍

目录 DataStream 读取文件 读取Socket 读取集合 自定义Source 容错性 DataStream 读取文件 readTextFile(path) 读取Socket socketTextStream 读取集合 fromCollection 自定义Source addSource 实现SourceFunction接口来自定义无并行度(也就是并行度只能为1)的数据源。 实现 ParallelSourceFunction 接口来...

NIO4444 549

Flink 读写MySQL数据(DataStream和Table API)

Flink提供了基于JDBC的方式,可以将读取到的数据写入到MySQL中;本文通过两种方式将数据下入到MySQL数据库,其他的基于JDBC的数据库类似,另外,Table API方式的Catalog指定为Hive Catalog方式,持久化DDL操作。Maven依赖,包含了Hive Catalog的相关依赖 DataStream方式读写MySQL数据 Table API的方式读写MySQL,其中Flink的Catalog使用Hive Catalog的方式 MySQL中的数据..........

wank1259162的博客 9822

RedVQA:轻量级无参考视频质量评估算法原理与工程实践

视频质量评估是计算机视觉领域的关键技术,旨在通过算法自动量化视频的观看体验。其核心原理在于模拟人眼视觉系统,从像素数据中提取并融合空域和时域特征,以预测主观质量分数。这项技术的价值在于,它能自动化处理海量视频内容的质量监控,为流媒体服务、移动设备影像优化等场景提供关键指标。无参考视频质量评估作为该领域的前沿方向,无需原始无损视频作为参考,更贴合实际应用。本文以RedVQA项目为例,深入剖析了如何利用轻量化的深度网络架构,如MobileNetV3,结合高效的时空特征融合模块,在保证评估精度的同时,大幅降低计算

weixin_28698129的博客 576

直线电机驱动技术原理与应用解析

直线电机作为直接电能-直线运动转换装置,其核心原理基于电磁感应定律和洛伦兹力公式。通过三相交流电在定子绕组中产生行波磁场,与动子永磁体相互作用实现精准推力控制。相比传统旋转电机传动系统,直线电机具有零传动间隙、高动态响应(加速度可达10g)和微米级定位精度等技术优势,这使其成为半导体光刻机、精密数控机床等高端装备的关键驱动部件。现代直线电机驱动单元通常采用三环控制架构(电流环、速度环、位置环),配合SiC功率器件和高分辨率光栅反馈,实现纳米级运动控制。随着模块化设计和直接冷却技术的发展,直线电机正朝着更高功

weixin_26802933的博客 260

Flink 系例 之 Connectors 连接 MySql

通过使用 Flink DataStream Connectors 数据流连接器连接到 Mysql 数据源,并基于 JDBC 提供数据流输入与输出操作;

不会飞的小龙人的博客 1209

XTDrone——ALOAM与3D激光雷达三维SLAM(处理没有点云和坐标系报错的问题)

本文介绍了XTDrone中配置如何在三维环境中使用A-LOAM算法配合velodyneHDL32激光雷达包括依赖包安装、代码修改和PX4系统配置,以及相关报错细节的注意事项。

weixin_45390670的博客 1328

flink-java使用介绍,flink,java,DataStream API,DataSet API,ETL,设置 jobname

flink-java使用介绍,flink,java,DataStream API,DataSet API,ETL

猛犸象 2343

第2章: MMU Notifier 全局通知器的核心原理⭐

摘要 MMU Notifier机制是Linux内核中用于处理内存地址空间变化通知的关键框架。其设计遵循解耦与标准化、最小侵入性、高性能和安全性四大原则,采用三层架构实现上层应用、核心层与内存管理层的协作。框架提供两种通知模型:全局订阅的mmu_notifier和区间订阅的mmu_interval_notifier,分别适用于KVM虚拟化和GPU共享虚拟内存等不同场景。核心数据结构mmu_notifier_ops定义了设备驱动需要实现的回调函数集合,包括进程退出处理、页面老化管理、地址范围失效通知等功能。

图形/计算GPU的驱动与虚拟化技术分享园地 4564

第1章 环境准备

本章是 Kubernetes 高可用集群部署的前置基础环境配置,所有节点必须严格按顺序执行。主要内容包括:节点规划(IP、角色、配置要求)、VMware 克隆节点环境清理(解决 MAC 地址和主机名冲突)、统一工作目录创建、主机名与 hosts 解析配置、系统基础升级、防火墙与 swap 关闭、内核模块加载(overlay、br_netfilter、ip_vs)、网络参数优化(IP 转发、桥接过滤)、时间同步配置等。Ubuntu 24.04 内核 6.8+ 原生支持 eBPF 和 IPVS,无需手动升级内核

幸福街--linux技术分享 210

flink学习(七)——DataStream API介绍

前面我们尝试用flink写了一个WordCount程序,并且介绍了flink提供的api层级,接下来我们正式来学习flink的DataStream API。 为什么先学习DataStream API,而不是ProcessFunction API,这是因为ProcessFunction API是通过DataStream API调用的,它作为DataStream API的补充,可以实现DataStream API所不能实现的一些高级功能。 DataStream程序结构剖析 我们回到WordCount的那个例

Yohohaha的博客 886

CDD数据库文件制作(十一)——服务配置(0x19_DTC Code)

虽然选择Copy和Reference都可以加载DTC,但是如果我们在DTC库中有修改DTC,通过Copy的方式加载的DTC在DTC Table中不会跟着DTC库的修改而自动更新。通过Reference的方式加载的DTC可以自动更新。找到Fault Memory的DTC Table,鼠标放在DTC Table区域,右键点击选择Copy …根据需要(客户协议)勾选响应的19服务子功能。如何创建一个新的DTC code?按照字母与下方要素可做一一对应。首先在DTC库中新建DTC。支持10 01/10 03。

LOVE135149的博客 1917

21、Flink 的table API与DataStream API 集成(1)- 介绍及入门示例、集成说明

在定义数据处理管道时,Table API和DataStream API同样重要。DataStream API在一个相对低级的命令式编程API中提供流处理的原语(即时间、状态和数据流管理)。Table API抽象了许多内部构件,并提供了结构化和声明性API。这两个API都可以处理有界和无界流。在处理历史数据时,需要管理有界流。无界流发生在实时处理场景中,这些场景可能先使用历史数据进行初始化。为了有效执行,这两个API都以优化的批处理执行模式提供处理有界流。

alanchanchn的专栏 6万+

OWASP-ZAP扫描器的使用

目录 OWASP-ZAP 更新 代理 目录扫描 主动扫描(Active Scan) 扫描结果 生成报告 OWASP-ZAP OWASP Zed攻击代理(ZAP)是世界上最受欢迎的免费安全审计工具之一,由数百名国际志愿者积极维护。它可以帮助你在开发和测试应用程序时自动查找Web应用程序中的安全漏洞。 也可以说ZAP是一个中间人代理。它能够获取你对Web应用程序发出的所有请求以...

谢公子的博客 2万+

使用 Visual Studio Code 搭建 SAP UI5 本地开发环境

工欲善其事,必先利其器。时至今日,SAP 提供了非常多的 SAP UI5 开发工具,既包含本地搭建的,也包含浏览器里远端使用的工具,比如 WebIDE 和 Business Application Studio. 我们访问下面这个链接,就能找到所有这些工具的安装或者配置步骤: https://tools.hana.ondemand.com/#sapui5 如果想选择本地开发,SAP 推荐的工具是 Visual Studio Code,也就是本文要介绍的内容。 也可以下载 WebIDE 的本地安装包,将其安

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1万+

Flink--API 从任务开发到任务提交流程解析与DataStream的介绍

在大数据处理领域,Flink 凭借其卓越的流批一体特性、高效的实时处理能力以及丰富的 API,备受开发者青睐。今天,我们将深入探讨如何开发 Flink 任务,并将其打包提交到集群上运行,涵盖从基础概念到具体编码、打包、提交的完整流程,希望能帮助大家在 Flink 实践之路上少踩坑、多收获。

天冬忘忧的博客 1697

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Flink专题二:Flink DataStream API 介绍及使用

由于工作需要最近学习flink 现记录下Flink介绍和实际使用过程 这是flink系列的第二篇文章 Flink 中的 API 这里介绍我们常用的DataStream API: Flink API 第二层抽象是 Core APIs。实际上,许多应用程序不需要使用到上述最底层抽象的 API,而是可以使用 Core APIs 进行编程:其中包含 DataStream API(应用于有界/无界数据流场景)和 DataSet API(应用于有界数据集场景)两部分。Core APIs 提供的流式 API(Flu.

beyond的博客 2721

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Flink DataStream API 之 windows类型介绍

Window的类型 窗口通常被区分为不同的类型: •tumbling windows:滚动窗口 【没有重叠】 •sliding windows:滑动窗口 【有重叠】 tumbling windows:滚动窗口 【没有重叠】   使用demo DataStream&lt;T&gt; input = ...; // tumbling event-time windows in...

Jiny_li的博客 380

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Flink-DataStream API介绍(源算子、转换算子、输出算子)

大多数情况下,前面的数据源已经能够满足需要。但是凡事总有例外,如果遇到特殊情况,我们想要读取的数据源来自某个外部系统,而 flink 既没有预实现的方法、也没有提供连接器,又该怎么办呢?那就只好自定义实现 SourceFunction 了。接下来我们创建一个自定义的数据源,实现 SourceFunction 接口。主要重写两个关键方法:run()和 cancel()。run()方法:使用运行时上下文对象(SourceContext)向下游发送数据;

迷雾总会解 2297

Flink学习3-DataStream API简介

DataStream概述

qq_40342691的博客 596

flink笔记5 DataStream API(一)Environment、Source介绍和使用

一.Environment 1. StreamExecutionEnvironment调用静态方法getExecutionEnvironment(),得到一个执行环境,用于执行我们的程序。 val env = StreamExecutionEnvironment.getExecutionEnvironment getExecutionEnvironment会根据查询运行的方式决定返回什么样的运行环境,是最常用的一种创建执行环境的方式。 2. 创建本地执行环境: val env = Stream

weixin_43631997的博客 1050

flink笔记6 DataStream API(二)Transform、sink介绍和使用

3.Transform (1) 简单转换算子 ① Map:输入一个元素,然后返回一个元素,中间可以做一些清洗转换等操作 object Transform1 { def main(args: Array[String]): Unit = { val inputdata = List(1,2,3,4,5) val resultdata = inputdata.map(_+10) print(resultdata) } } // 结果: List(11, 1.

weixin_43631997的博客 549

48、Flink DataStream API 编程指南- 完整版

addSource - 关联一个新的 source function。例如,你可以使用 addSource(new FlinkKafkaConsumer(…)) 来从 Apache Kafka 获取数据。其中的maven依赖参考本专栏的相关文章kafka该示例是基于flink1.13.5的版本/**/**// source // 准备kafka连接参数 Properties props = new Properties();

alanchanchn的专栏 6万+
上一篇: Flink 集群部署
下一篇: Java中的SPI机制与上下文类加载器
FFFSSSFFF6
博客等级 码龄9年 93粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值