Flink自定义sink端SinkFunction的应用

Flink-输出算子(Sink)使用 flink输出到kafka,elasticsearch,redis 阅读详情

场景说明

从kafka里面读取数据,经过处理写入到mysql里面。在flink里面就是从source到sink的过程,那么本篇文章说明一下,mysqlsink的单条数据插入和批量数据插入操作。

1、先说明一下SinkFunction的继承关系

在这里插入图片描述
通过API我们可以看到sinkFunction接口的实现类有很多。比如常用的RichSinkFunction。

2、mysql单条数据插入

public class SinkToMysql extends RichSinkFunction<Tuple2<String, Integer>> {
public void invoke(Tuple2<String, Integer> value, Context context) throws Exception {
        conn = getConnection();
        String sql = "insert into dm_stu(stuname, stuaddr) values(?,?);";
        ps = this.conn.prepareStatement(sql);
        ps.setString(1, value.f0);
        ps.setString(2, value.f0 + "1");
//            ps.addBatch();
        int resultBatch = ps.executeUpdate();
        System.out.println("成功插入数据 " + resultBatch + "行");
        this.close();
    }
}	

上面的类实现RichSikFunction类,重写invoke方法,该方法用来执行与数据库的交互,插入数据 。该方法是上游有一条数据就会执行一次。实际开发的时候效率低。

3、MySQL 批量插入

当程序到sink的时候,我们可以把上游的数据先积攒一段时间,在按批一起发送到sink的下游。

public class SinkToMysqlBatch implements SinkFunction<ArrayList<String>> {
    PreparedStatement ps;
    Connection conn;

    @Override
    public void invoke(ArrayList<String> value, Context context) throws Exception {
        conn = SinkToMysql.getConnection();
        conn.setAutoCommit(false);
        String sql = "insert into dm_stu(stuname, stuaddr) values(?,?);";
        ps = this.conn.prepareStatement(sql);
        for (String s: value) {
            ps.setString(1, s);
            ps.setString(2,s+1);
            ps.addBatch();
        }
        int[] resultBatch = ps.executeBatch();
        System.out.println("当前窗口插入数据:" + resultBatch.length+ " 行");
        conn.commit();
        try {
            if (ps != null) {
                ps.close();
            }
            if (conn != null) {
                conn.close();
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

}

上面的批量操作,自定义类实现了SinkFunction接口,重写了invoke方法。泛型是集合类型,表示上游传递过来的数据是一个集合。我们需要在invoke方法中去进行遍历。一个batch写入到mysql。

实际开发遇到的问题是

在这里插入图片描述
在这段代码中,addSink(中自定义的mysql批量类是继承了RichSinkFunction类,但是这边会报错说必须要实现了SinkFunction接口)。这边有疑问。

flink source和sink flink中的source作为整个stream中的入口,而sink作为整个stream的终点。   SourceFunction为所有flink中source的根接口,其定义了run()方法和cancel()方法。 在SourceFunction中的run()方法用以作为source向整个stream发出数据,并用以控制数据的进入。 在大部分的source中,会在run()方法中对数据的发... 阅读详情

相关推荐

Flink自定义sink写入mysql

采用mybatis配置 参考:https://blog.youkuaiyun.com/weixin_43291055/article/details/100152026 只需要在sink的时候自定义sink即可,核心代码如下: public class SinkTest extends RichSinkFunction<TestModel> { private UserMappe...

诸葛子房的博客 5587

Flink之Sink

Flink 的 DataStream API 专门提供了向外部写入数据的方法:addSink。与 addSource 类似,addSink 方法对应着一个“Sink”算子,主要就是用来实现与外部系统连接、并将数据提交写入的;Flink 程序中所有对外的输出操作,一般都是利用 Sink 算子完成的。

SuperBoy_Liang的博客 2131

Flink——实战之MySQL Sink

主要内容:实现Flink写数据到MySQL,即MySQL Sink。

困而学之,学思并重 7723

Flink专题五:Flink 中自定义Sink

由于工作需要最近学习flink 现记录下Flink介绍和实际使用过程 这是flink系列的第五篇文章 自定义SinkSink介绍SinkFunction接口介绍RichSinkFunction类介绍 Sink介绍 flink的sink是flink三大逻辑结构之一(source,transform,sink),功能就是负责把flink处理后的数据输出到外部系统中。 在编写代码的过程中,我们可以使用flink已经提供的sink,如kafka,jdbc,es等。 连接器是否提供Source支持是否提供Sink.

beyond的博客 7550

Flink Sink函数深度解析:从原理到实践的全流程探索

Flink Sink函数是实现端到端数据处理的关键组件,负责将处理结果输出到外部存储系统。摘要:1)Sink函数作为数据处理终点,支持多路并行输出;2)二阶段提交协议保障数据一致性,结合检查点机制实现Exactly-Once语义;3)SinkFunction接口体系包含基础操作与事务管理功能,TwoPhaseCommitSinkFunction是实现精准一次的核心抽象;4)通过JdbcSink示例展示了实际实现逻辑,包括批量写入和状态管理;5)需结合业务需求设计Sink,确保分布式环境下数据可靠输出。理解S

qq_42773076的博客 1401

Flink系列:自定义SinkFunction

扩展 Flink系列:自定义Source、map、flatMap、Sink Function

NIO4444 2642

【深入浅出flink】第6篇:详解flink中Text Sink、Csv Sink、Socket Sink、Kafka Sink、Redis Sink、ES Sink,以及万能的UDF Sink

Sink 用来消费 DataStream数据的。Flink提供了很多预置的Sink方法,比如Text Sink、Csv Sink、Socket Sink、Kafka Sink、Redis Sink、ES Sink。当现有的Sink不能满足需求时,用户也可以实现自定义sink,用来解决复杂需求。

雷恩Layne 3544

源码解析:SinkFunction 数据流处理

总结起来,SinkFunction 是 Flink 数据流处理框架中负责数据输出的组件,它定义了 invoke() 方法用于处理输入数据,并提供了上下文信息。通过实现 SinkFunction 接口,我们可以自定义数据写入逻辑,并将处理后的数据存储到指定的外部系统。在大数据领域,数据流处理是一项重要的任务,而 SinkFunction 作为数据流的终点操作,负责将处理后的数据写入外部存储或发送至其他系统,起到数据输出的作用。通过以上示例,我们看到了如何使用 SinkFunction 将数据写入文件系统。

2301_79367634的博客 237

Flink 自定义Sink 之 写入HDFS

一、pom.xml添加依赖。 <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-filesystem_${scala.binary.version}</artifactId> <version>${flink...

magic_kid_2010的专栏 7831

LatentSync:开源数字人唇形同步技术的实战部署与优化指南

本文详细介绍了开源数字人唇形同步工具LatentSync的实战部署与优化全流程。从核心原理(潜在扩散模型与TREPA技术)解析,到手把手完成环境搭建、模型获取及首次推理。文章深入探讨了自定义素材处理、关键参数调优(如guidance_scale),并提供了显存不足、人脸检测失败等常见问题的解决方案与性能优化技巧,旨在帮助用户高效部署并提升生成效果。

9o8p7i6u5y的博客 1007

手把手教你用VSCode+MCUXpresso搭建i.MX RT1062开发环境(附RT-Thread Nano移植)

本文详细介绍了如何使用VSCode和MCUXpresso工具链搭建i.MX RT1062开发环境,包括工具链安装、工程配置、调试技巧以及RT-Thread Nano实时操作系统的移植方法。通过实战步骤和优化建议,帮助开发者快速掌握这款高性能Cortex-M7 MCU的开发流程,提升嵌入式开发效率。

weixin_27014595的博客 392

Apache Flink源码解析之stream-sink

上一篇我们谈论了Flink stream source,它作为流的数据入口是整个DAG(有向无环图)拓扑的起点。那么与此对应的,流的数据出口就是跟source对应的Sink。这是我们本篇解读的内容。

VinoYang的专栏 7827

Unity 2022打包Android APK:手把手教你创建和配置第一个签名Keystore(避坑指南)

本文详细介绍了Unity 2022打包Android APK时创建和配置签名Keystore的全流程,包括环境准备、Keystore创建、高级配置避坑指南以及签名验证与故障排查。特别强调了Android应用签名的重要性及安全维护策略,帮助开发者避免常见错误,确保应用顺利发布。

weixin_27379781的博客 241

【06】Flink 之 DataStream API(四):Data Sink 和 自定义Sink

1、DataStream API(一):Data Sink 1.1、Data Sink介绍 sink是程序的数据输出,可以通过StreamExecutionEnvironment.addSink(sinkFunction)来为程序添加一个sink。 flink提供了大量的已经实现好的sink方法,也可以自定义sink 1.2、Data Sink类型 writeAsText():将元素以字符串...

努力学习的大小宝 7437

新手避坑指南:用Silvaco Atlas搞定GaN HEMT电热仿真的完整流程(附代码解读)

本文详细介绍了使用Silvaco Atlas进行GaN HEMT电热特性仿真的完整流程,特别针对新手常见问题提供避坑指南。从软件环境配置、结构定义、网格划分到物理模型设置,逐步解析关键步骤,并附有代码解读和调试技巧,帮助读者快速掌握GaN器件仿真的核心技术。

weixin_29215815的博客 597

Proteus仿真实战:用AT89C51+L298N搭建直流电机PID调速系统(附完整工程文件)

本文详细介绍了使用Proteus仿真平台结合AT89C51单片机和L298N驱动模块搭建直流电机PID闭环调速系统的全过程。从硬件选型、电路连接到PID算法实现与参数整定,提供了完整的开发指南和工程文件,帮助读者快速掌握闭环调速系统的设计与调试技巧。

weixin_28724661的博客 448

Flink Redis Sink 自定义

文章目录背景依赖SinkFunction & RichSinkFunctionDemo 背景 Flink 默认的 RedisMapper 不能设置key的过期时间。 依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactI...

小杨的技术博客 3万+

DiffusionDrive实战:如何用截断扩散模型3个月搞定自动驾驶轨迹规划(附代码)

本文详细介绍了如何利用DiffusionDrive截断扩散模型,在三个月内快速构建端到端的自动驾驶轨迹预测系统。内容涵盖从环境搭建、数据处理、模型架构解析到训练调参和推理优化的完整实战流程,并提供了关键代码示例,旨在帮助开发者高效实现高质量的自动驾驶轨迹规划。

weixin_35578748的博客 144

Flink SourceFunction/SinkFunction

一.简介 Source 是Flink的输入,可以串行,并行,延迟,设置时间窗口等等。 Sink是Flink的输出,设置任意源。 Flink的编程模型就可以概况成接入Source,然后进行数据转换操作,再讲处理结果Sink出来。 二.SourceFunction 非并行 class CustomNonParallelSourceFunction extends SourceFunction[Long] { var count = 0L var isRunning = true override

独立开发,substack顶级编辑 2065

Xilinx FPGA资源解析与使用系列——Transceiver(六)关键时钟梳理之TXOUTCLK和RXOUTCLK

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Xilinx FPGA资源解析与使用系列——Transceiver(六)transceiver内部关键时钟梳理之TXOUTCLK和RXOUTCLK前言TXOUTCLKRXOUTCLK 前言 前面我们已经研读了 transceiver的参考时钟 和复位的相关内容。 但是随着内容的深入,越来越多的信号出现在我的面前。 例如 TXOUTCLK、TXUSERCLK、TXUSERCLK2 RXOUTCLK、RXUSERCLK、RXUSERCLK2

gzy0506的博客 8088

巡检机器人的基于ROS系统的任务管理架构设计总结

本文探讨了基于ROS(机器人操作系统)的工业巡检机器人任务管理架构设计,提出分层闭环方案。架构围绕稳、准、活、扩四大目标,分为感知层(多源数据融合)、调度层(智能决策)、执行层(动作控制)和数据层(存储交互)。关键技术包括ROS2实时性优化、功能包复用和多机器人协同调度。实践案例显示,该架构在电力巡检中使任务完成率达99%,在化工园区实现95%覆盖率。当前挑战包括SLAM地图漂移和多机通信延迟,未来可通过语义SLAM和区域通信优化。

start_up_go的博客 466

flink mysql sink_聊聊flink的sink

概述flink的sink是flink三大逻辑结构之一(source,transform,sink),功能就是负责把flink处理后的数据输出到外部系统中,flink 的sink和source的代码结构类似。在编写代码的过程中,我们可以使用flink已经提供的sink,如kafka,jdbc,es等,当然我们也可以通过自定义的方式,来实现我们自己的sink。下面说明核心类核心类SinkFunctio...

weixin_35492602的博客 1630

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Flink的sink实战之一:初探

学习和实践Flink的data sink相关的技术细节

程序员欣宸的博客 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Flink 自定义Sink端

Fink sink

Rocky 1409

VB摄像头监控

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

flink sink jdbc没有数据_Flink的sink实战之四:自定义

欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等; 本篇概览 Flink官方提供的sink服务可能满足不了我们的需要,此时可以开发自定义的sink,文本就来一起实战; 全系列链接 《Flink的sink实战之一:初探》 《Flink的sink实战...

weixin_31887421的博客 347
上一篇: 政务外网环境下面springboot项目部署解决方案
下一篇: postgresql 里面查询存储过程
Bonyin
博客等级 码龄10年 166粉丝 137原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值