![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Flink
文章平均质量分 88
bmyyyyyy
来一JAY个
展开
-
【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用
【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用原创 2023-12-18 17:35:07 · 2611 阅读 · 0 评论 -
【Flink-1.17-教程】-【五】Flink 中的时间和窗口(2)时间语义
1、Event Time的优势是结果的可预测性,缺点是缓存较大,增加了延迟,且调试和定位问题更复杂。2、只依赖当前执行机器的系统时钟,不需要依赖Watermark,无需缓存。是实现起来非常简单,也是延迟最小的一种时间语义;但是,在分布式和异步的环境下,不能提供确定性,因为它容易受到事件到达系统的速度(例如从消息队列)、事件在系统内操作流动的速度以及中断的影响。3、通常是Event Time和之间的一个折中方案。4、在 Flink 流处理真实场景中,大部分的业务需求都会使用事件时间语义。原创 2024-01-25 08:58:01 · 942 阅读 · 0 评论 -
【Flink-1.17-教程】-【五】Flink 中的时间和窗口(1)窗口(Window)
在批处理统计中,我们可以等待一批数据都到齐后,统一处理。但是在实时处理统计中,我们是来一条就得处理一条,那么我们怎么统计最近一段时间内的数据呢?引入“窗口”。所谓的“窗口”,一般就是划定的一段时间范围,也就是“时间窗”;对在这范围内的数据进行处理,就是所谓的窗口计算。所以窗口和时间往往是分不开的。接下来我们就深入了解一下 Flink 中的时间语义和窗口的应用。原创 2024-01-25 08:57:30 · 1114 阅读 · 0 评论 -
【Flink-1.17-教程】-【四】Flink DataStream API(7)输出算子(Sink)
如果我们想将数据存储到我们自己的存储设备中,而 Flink 并没有提供可以直接使用的连接器,就只能自定义 Sink 进行输出了。与 Source 类似,Flink 为我们提供了通用的 SinkFunction 接口和对应的 RichSinkDunction 抽象类,只要实现它,通过简单地调用 DataStream 的 .addSink() 方法就可以自定义写入任何外部存储。原创 2024-01-24 10:14:52 · 1321 阅读 · 0 评论 -
【Flink-1.17-教程】-【四】Flink DataStream API(6)转换算子(Transformation)【合流】
在实际应用中,我们经常会遇到来源不同的多条流,需要将它们的数据进行联合处理。所以 Flink 中合流的操作会更加普遍,对应的 API 也更加丰富。首先基于一条 DataStream 调用 .connect() 方法,传入另外一条 DataStream 作为参数,将两条流连接起来,得到一个 ConnectedStreams;然后再调用同处理方法得到 DataStream。这里可以的调用的同处理方法有 .map() / .flatMap(),以及 .process() 方法。原创 2024-01-24 10:14:24 · 785 阅读 · 0 评论 -
【Flink-1.17-教程】-【四】Flink DataStream API(5)转换算子(Transformation)【分流】
所谓“分流”,就是将一条数据流拆分成完全独立的两条、甚至多条流。也就是基于一个 DataStream,定义一些筛选条件,将符合条件的数据拣选出来放到对应的流里。关于处理函数中侧输出流的用法,我们已经在 flatmap 课节做了详细介绍。简单来说,只需要调用上下文 ctx 的 .output() 方法,就可以输出任意类型的数据了。而侧输出流的标记和提取,都离不开一个“输出标签”(OutputTag),指定了侧输出流的 id 和类型。原创 2024-01-23 15:09:48 · 570 阅读 · 0 评论 -
【Flink-1.17-教程】-【四】Flink DataStream API(4)转换算子(Transformation)【物理分区算子(Physical Partitioning)】
1、shuffle 随机分区: random.nextInt(下游算子并行度)。2、rebalance 轮询:nextChannelToSendTo = (nextChannelToSendTo + 1) % 下游算子并行度,如果是数据源倾斜的场景, source 后,调用 rebalance,就可以解决数据源的数据倾斜。3、rescale 缩放:实现轮询,局部组队,比 rebalance 更高效。4、broadcast 广播:发送给下游所有的子任务。5、global 全局:全部发往第一个子原创 2024-01-23 12:23:21 · 1042 阅读 · 0 评论 -
【Flink-1.17-教程】-【四】Flink DataStream API(3)转换算子(Transformation)【用户自定义函数(UDF)】
用户自定义函数(UDF),即用户可以根据自身需求,重新实现算子的逻辑。函数类匿名函数富函数类。Flink 暴露了所有 UDF 函数的接口,具体实现方式为接口或者抽象类,例如 MapFunction、FilterFunction、ReduceFunction 等。所以用户可以自定义一个函数类,实现对应的接口。“富函数类”也是 DataStream API 提供的一个函数类的接口,所有的 Flink 函数类都有其 Rich 版 本 。 富函数类一般是以抽象类的形式出现的。例如:RichMapFunction 、原创 2024-01-22 20:44:49 · 618 阅读 · 0 评论 -
【Flink-1.17-教程】-【四】Flink DataStream API(2)转换算子(Transformation)【基本转换算子、聚合算子】
全面讲解各个算子:map / filter / flatMap、keyBy、sum / min / max / minBy / maxBy、reduce。全面讲解各个算子的难点要点。数据源读入数据之后,我们就可以使用各种转换算子,将一个或多个 DataStream 转换为新的 DataStream。我们只需要基于 DataStream 调用 map() 方法就可以进行转换处理。方法需要传入的参数是接口 MapFunction 的实现;返回值类型还是 DataStream,不过泛型(流中的元素类型)可能改变。原创 2024-01-22 20:44:27 · 1103 阅读 · 1 评论 -
【Flink-1.17-教程】-【四】Flink DataStream API(1)源算子(Source)
DataStream API 是 Flink 的核心层 API。一个 Flink 程序,其实就是对 DataStream 的各种转换。Flink 可以从各种来源获取数据,然后构建 DataStream 进行转换处理。一般将数据的输入来源称为数据源(data source),而读取数据的算子就是源算子(source operator)。所以,source 就是我们整个处理程序的输入端。Flink 直接提供了很多预实现的接口,此外还有很多外部连接工具也帮我们实现了对应的 Source,通常情况下足以应对我们的实原创 2024-01-21 20:19:01 · 1551 阅读 · 1 评论 -
【Flink-CDC】Flink CDC 介绍和原理概述
CDC是(Change Data Capture 变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据 或 数据表的插入INSERT、更新UPDATE、删除DELETE等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。经过以上对比,我们可以发现基于日志 CDC 有以下这几种优势:能够捕获所有数据的变化,捕获完整的变更记录。在异地容灾,数据备份等场景中得到广泛应用,如果是基于查询的 CDC 有可能导致两次查询的中间一部分数据丢失每次 DML 操作均原创 2024-01-19 15:03:12 · 1599 阅读 · 0 评论 -
【Flink-1.17-教程】-【三】Flink 运行架构、Flink 核心概念【并行度、算子链、任务槽】、Flink 作业提交流程
1、提交 job,执行运行程序的脚本(flink run)后,会生启动一个客户端进程。2、客户端进程中会解析一些参数,如:-c(全类名)3、生成逻辑流图(StreamGraph),通过 Operator Chain 对算子优化后,生成作业流图(JobGraph)4、对解析完成的参数进行封装,然后通过内部的 Actor 通信系统(基于 RPC)提交、或取消(flink cancel)、或更新,将任务发送给 JobManager。5、JobManager 自身也会有一个 Actor 通信系统原创 2024-01-19 11:02:37 · 1387 阅读 · 0 评论 -
【Flink-1.17-教程】-【二】Flink 集群搭建、Flink 部署、Flink 运行模式
YARN 上部署的过程是:客户端把 Flink 应用提交给 Yarn 的 ResourceManager,Yarn 的 ResourceManager 会 向 Yarn 的 NodeManager 申 请 容 器 。 在 这 些 容 器 上 , Flink 会 部 署 JobManager 和 TaskManager 的实例,从而启动集群。Flink 会根据运行在 JobManger 上的作业所需要的 Slot 数量动态分配 TaskManager 资源。原创 2024-01-16 11:21:33 · 1943 阅读 · 0 评论 -
【Flink-1.17-教程】-【一】Flink概述、Flink快速入门
对于Flink而言,流才是整个处理逻辑的底层核心,所以流批统一之后的 DataStream API 更加强大,可以直接处理批处理和流处理的所有场景。下面我们就针对不同类型的输入数据源,用具体的代码来实现流处理。Flink 还具有一个类型提取系统,可以分析函数的输入和返回类型,自动获取类型信息,从而获得对应的序列化器和反序列化器。但是,由于 Java 中`泛型擦除`的存在,在某些特殊情况下(比如 Lambda 表达式中),自动提取的信息是不够精细的——只告诉 Flink 当前的元素由“船头、船身、船尾”构原创 2024-01-15 17:37:11 · 1288 阅读 · 2 评论 -
【Flink-Kafka-To-Mongo】使用 Flink 实现 Kafka 数据写入 Mongo(根据对应操作类型进行增、删、改操作,写入时对时间类型字段进行单独处理)
需求描述:1、数据从 Kafka 写入 Mongo。2、相关配置存放于 Mysql 中,通过 Mysql 进行动态读取。3、此案例中的 Kafka 是进行了 Kerberos 安全认证的,如果不需要自行修改。4、Kafka 数据为 Json 格式,获取到的数据根据操作类型字段进行增删改操作。5、读取时使用自定义 Source,写入时使用自定义 Sink。6、消费 Kafka 数据时自定义反序列化。7、Mongo 使用 Document 进行封装操作。8、此示例中通过 db.collection 传参的方式进原创 2023-12-26 08:30:00 · 1115 阅读 · 0 评论 -
【Flink-Kafka-To-Mysql】使用 Flink 实现 Kafka 数据写入 Mysql(根据对应操作类型进行增、删、改操作)
需求描述:1、数据从 Kafka 写入 Mysql。2、相关配置存放于 Mysql 中,通过 Mysql 进行动态读取。3、此案例中的 Kafka 是进行了 Kerberos 安全认证的,如果不需要自行修改。4、Kafka 数据为 Json 格式,获取到的数据根据操作类型字段进行增删改操作。5、读取时使用自定义 Source,写入时使用自定义 Sink。6、消费 Kafka 数据时自定义反序列化。这里的依赖比较冗余,大家可以根据各自需求做删除或保留。原创 2023-12-25 16:45:19 · 2172 阅读 · 0 评论 -
【Flink-Kafka-To-Kafka】使用 Flink 实现 Kafka 数据写入 Kafka
需求描述:1、数据从 Kafka 写入 Kafka。2、相关配置存放于 Mysql 中,通过 Mysql 进行动态读取。3、此案例中的 Kafka 是进行了 Kerberos 安全认证的,如果不需要自行修改。4、Kafka 数据为 Json 格式,通过 FlatMap 扁平化处理后完成写入。5、读取时使用自定义 Source,写入时使用自定义 Sink。6、本地测试时可以编辑 resources.flink_backup_local.yml 通过 ConfigTools.initConf 方法获取配置。这里原创 2023-12-25 12:12:36 · 1430 阅读 · 0 评论 -
【Flink-Kafka-To-ClickHouse】使用 Flink 实现 Kafka 数据写入 ClickHouse
需求描述:1、数据从 Kafka 写入 ClickHouse。2、相关配置存放于 Mysql 中,通过 Mysql 进行动态读取。3、此案例中的 Kafka 是进行了 Kerberos 安全认证的,如果不需要自行修改。4、先在 ClickHouse 中创建表然后动态获取 ClickHouse 的表结构。5、Kafka 数据为 Json 格式,通过 FlatMap 扁平化处理后,根据表结构封装到 Row 中后完成写入。6、写入时转换成临时视图模式,利用 Flink-Sql 实现数据写入。7、本地测试时可以编辑原创 2023-12-21 15:32:55 · 2414 阅读 · 0 评论 -
【Flink-Kafka-To-Hive】使用 Flink 实现 Kafka 数据写入 Hive
需求描述:1、数据从 Kafka 写入 Hive。2、相关配置存放于 Mysql 中,通过 Mysql 进行动态读取。3、此案例中的 Kafka 是进行了 Kerberos 安全认证的,如果不需要自行修改。4、Flink 集成 Kafka 写入 Hive 需要进行 checkpoint 才能落盘至 HDFS。5、先在 Hive 中创建表然后动态获取 Hive 的表结构。6、Kafka 数据为 Json 格式,通过 FlatMap 扁平化处理后,根据表结构封装到 Row 中后完成写入。7、写入时转换成临时视图原创 2023-12-20 12:08:30 · 1640 阅读 · 0 评论 -
【Flink-Bug】Flink 自定义 Sink 重写 RichSinkFunction 方法时重复调用 open 的解决方案
Flink 自定义 RichinkFunction 时可能会重写 open 方法进行某些连接的初始化操作,但是会出现重复调用 open 方法的问题,如:MQ,如果重复调用 open 进行初始化操作,就会出现 group 重复的问题。解决方案:自定义并行度,让 open 方法只调用一次。原创 2023-12-18 17:55:23 · 864 阅读 · 0 评论 -
【Flink-Kafka-To-RocketMQ】使用 Flink 自定义 Sink 消费 Kafka 数据写入 RocketMQ
这里的 maven 依赖比较冗余,推荐大家都加上,后面陆续优化。2)代码实现注意:1、此程序中所有的相关配置都是通过 Mysql 读取的(生产环境中没有直接写死的,都是通过配置文件动态配置),大家实际测试过程中可以将相关配置信息写死。2、此程序中 Kafka 涉及到了 Kerberos 认证操作,大家的操作环境中没有的话可以去掉。2.2.conf2.2.1.ConfigTools读取 Mysql 中的配置2.3.utils2.3.1.DBConnMysql 连接工具类2.3.2.Commo原创 2023-12-18 16:08:00 · 1800 阅读 · 0 评论 -
【Flink-Sql-Kafka-To-ClickHouse】使用 FlinkSql 将 Kafka 数据写入 ClickHouse
在 Kafka 中写入对应 ClickHouse 格式的 Json 测试数据,观察 ClickHouse 中是否有数据写入。集群模式要创建两次表,一次为 local 本地表,一次为 cluster 集群表。1、创建表(此处我们使用生产环境中较为常用的 cluster 集群模式建表)1、数据源为 Kafka,定义 Kafka-Topic 为动态临时视图表。如果在服务器上执行,需要将 jar 放到 Flink 的 lib 目录下。2、写入到 ClickHouse,自定义 Sink 表。1、创建好Topic。原创 2023-12-16 11:18:13 · 1146 阅读 · 2 评论 -
【Flink-cdc-Mysql-To-Kafka】使用 Flinksql 利用集成的 connector 实现 Mysql 数据写入 Kafka
在 C:\ProgramData\MySQL\MySQL Server 5.7\my.ini 下添加。Linux 或者 Windows 端需要安装:Mysql,Kafka,Flink 等。1、首先确认MySQL是否开启binlog机制,log_bin = ON 为开启 (如下图)Mysql 中写入测试数据,Kafka-Topic 中观察是否有数据生成。2、如果是本地环境的 Mysql 按照下面方式开启 binlog。3、重启 Mysql 服务。2、写入数据的语句准备就绪。原创 2023-12-16 10:30:26 · 1852 阅读 · 0 评论 -
【Flink-State】Flink三种StateBackend的区别与使用:MemoryStateBackend & FsStateBackend & RocksDBStateBackend
RocksDB是一种嵌入式的本地数据库。RocksDBStateBackend 将处理中的数据使用RocksDB存储在本地磁盘上。在checkpoint时,整个RocksDB数据库会被存储到配置的文件系统中,或者在超大状态作业时可以将增量的数据存储到配置的文件系统中。同时Flink会将极少的元数据存储在JobManager 的内存中,或者在Zookeeper中(对于高可用的情况)RocksDB默认也是配置成异步快照的模式。RocksDB是一个 key/value 的内存存储系统,和其他的 key/v原创 2023-03-08 17:29:26 · 1554 阅读 · 0 评论