【Flink实战】玩转Flink里面核心的Sink Operator实战

🚀 作者 :“大数据小禅”

🚀 文章简介 :玩转Flink里面核心的Sink Operator实战

🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬


目录导航

      • Flink Sink Operator简介
      • Flink 核心知识 Sink Operator速览
      • Flink 自定义的Sink 连接Mysql存储商品订单案例实战

Flink Sink Operator简介

  • 在Flink中,Sink Operator(也称为Sink Function或Sink)是指负责将DataStream或DataSet的数据发送到外部存储或外部系统的操作符。Sink Operator是Flink的数据输出端,它的作用是将处理过的数据写入目标位置,如数据库、文件系统、消息队列等。

  • Sink Operator通过将数据传输到外部系统来完成最终的数据存储、展示或其他类型的处理。它可以将数据单个地或批量地发送到目标系统,具体取决于Sink操作符的实现。例如,可以将数据写入关系型数据库、NoSQL数据库、消息队列、文件系统等。

  • 在Flink中,可以使用预定义的Sink操作符,如addSink()方法,或自定义Sink函数来实现数据的输出。预定义的Sink操作符可以满足一般的输出需求,而自定义Sink函数可以根据具体的业务逻辑实现特定的输出操作。

  • 自定义Sink函数需要实现SinkFunction接口或RichSinkFunction抽象类,并重写其中的方法。这些方法包括open()、invoke()和close()等,用于初始化和管理连接,以及处理数据发送等操作。

使用Sink Operator时,需要考虑以下几个方面:

  • 目标系统的可用性和容错性:保证目标系统的可用性,并确保在故障发生时能够进行重试或恢复。
  • 写入的一致性:根据需求选择适当的写入一致性级别,如精确一次(exactly-once)或最少一次(at-least-once)语义。
  • 并行度和性能:根据目标系统的特性和可用资源,设置合适的并行度以提高任务并行处理和整体性能。

Flink 核心知识 Sink Operator速览

  • Flink编程模型
    在这里插入图片描述
  • Sink 输出源
    • 预定义
      • print
      • writeAsText (过期)
    • 自定义
      • SinkFunction
      • RichSinkFunction
        • Rich相关的api更丰富,多了Open、Close方法,用于初始化连接等
    • flink官方提供 Bundle Connector
      • kafka、ES 等
    • Apache Bahir
      • kafka、ES、Redis等

Flink 自定义的Sink 连接Mysql存储商品订单案例实战

  • 自定义

    • SinkFunction
    • RichSinkFunction
      • Rich相关的api更丰富,多了Open、Close方法,用于初始化连接等
  • Flink连接mysql的几种方式(都需要加jdbc驱动)

    • 方式一:自带flink-connector-jdbc 需要加依赖包
    <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-jdbc_2.12</artifactId><version>1.12.0</version>
    </dependency>
    
    • 方式二:自定义sink
  • 保存视频订单到Mysql

    CREATE TABLE `video_order` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`user_id` int(11) DEFAULT NULL,`money` int(11) DEFAULT NULL,`title` varchar(32) DEFAULT NULL,`trade_no` varchar(64) DEFAULT NULL,`create_time` date DEFAULT NULL,PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    • 添加jdbc依赖
    <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.25</version>
    </dependency>
    
    • 编码
    public class MysqlSink extends RichSinkFunction<VideoOrder> {private Connection conn = null;private PreparedStatement ps = null;@Overridepublic void open(Configuration parameters) throws Exception {conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xd_order?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai", "root", "xdclass.net");   //url user passwdString sql = "INSERT INTO `video_order` (`user_id`, `money`, `title`, `trade_no`, `create_time`) VALUES(?,?,?,?,?);";ps = conn.prepareStatement(sql);}@Overridepublic void close() throws Exception {if (conn != null) {conn.close();}if (ps != null) {ps.close();}}@Overridepublic void invoke(VideoOrder videoOrder, Context context) throws Exception {//给ps中的?设置具体值ps.setInt(1,videoOrder.getUserId());ps.setInt(2,videoOrder.getMoney());ps.setString(3,videoOrder.getTitle());ps.setString(4,videoOrder.getTradeNo());ps.setDate(5,new Date(videoOrder.getCreateTime().getTime()));ps.executeUpdate();}
    }
    

    在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/77701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

便捷高效的查询系统

今天我要来给大家种草一个超级好用的教学工具——易查分&#xff01;使用易查分&#xff0c;老师们可以轻松制作一个方便快捷的成绩查询系统&#xff0c;让查询成绩变得简单又高效。下面就让我来为大家详细介绍一下使用教程吧&#xff01; 是不是想有个自己的分班or成绩查询页面…

Eclipse官网下载历史版本

进入官网 https://www.eclipse.org/ 进入下载页面 选择下载包 同一版本&#xff0c;又有不同类型 Eclipse IDE for Enterprise Java and Web Developers Eclipse IDE for Java Developers 任何Java开发人员必备的工具&#xff0c;包括Java IDE、Git客户端、XML编辑器、Mave…

Unity实现用WASD控制一个物体前后左右移动-小白课程01

1 根据业务逻辑搭建场景 02 根据业务写代码 using System.Collections; using System.Collections.Generic; using UnityEngine;//实现让被挂在的物体往前移动 //按下W键往前移动&#xff0c;按下S键往后移动 public class RoleMove : MonoBehaviour { public float myspe…

新手询问想要成功学好嵌入式开发有什么建议吗?

今日话题&#xff0c;想要成功学好嵌入式开发有什么建议吗&#xff1f;想要学好的话选择一门合适的编程语言是关键。虽然嵌入式开发支持多种语言&#xff0c;但C和C仍然是最常用的。如果你是初学者&#xff0c;从学习C语言开始是一个不错的选择。它相对容易学习&#xff0c;而且…

C++(day5)

思维导图 小练习 实现一个图形类&#xff08;Shape&#xff09;&#xff0c;包含受保护成员属性&#xff1a;周长、面积&#xff0c;公共成员函数&#xff1a;特殊成员函数书写 定义一个圆形类&#xff08;Circle&#xff09;&#xff0c;继承自图形类&#xff0c;包含私有属性…

Python下载、安装及如何配置Pycharm(Windows 11)详细教程

本文介绍在Windows 11系统Python的下载、安装及配置Pycharm 一、下载 官网地址&#xff1a;https://www.python.org/downloads/windows/ 1、选择Python 3.10.5版本下载 二、安装 1、选择自定义安装 2、全部默认勾选&#xff0c;点击Next 3、自定义安装路径 建议勾选inst…

计算机竞赛 推荐系统设计与实现 协同过滤推荐算法

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 推荐系统设计与实现 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1…

Matplotlib渲染3D模型【Wavefront .OBJ】

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 Matplotlib 有一个非常漂亮的 3D 界面&#xff0c;具有许多功能&#xff08;和一些限制&#xff09;&#xff0c;在用户中非常受欢迎。 然而&#xff0c;对于某些用户&#xff08;或者可能对于大多数用户&#xff09;来说&…

基于Android 语音朗读书籍管理系统

视频演示&#xff1a; 基于Android 语音朗读书籍管理系统 基于 Android 的语音朗读书籍管理系统可以提供用户管理书籍、朗读书籍的功能。以下是一个简单的步骤和功能列表&#xff1a; 用户注册和登录功能&#xff1a; 用户可以注册新账号或使用现有账号登录系统。用户信息可以包…

软件自动化测试有哪些步骤?自动化测试需要找第三方检测机构吗?

您是否曾经因为软件出现问题而影响了工作进程或者个人生活的正常运转?那么&#xff0c;您是否了解软件自动化测试这一神奇的技术?在这篇文章中&#xff0c;我们将为您介绍软件自动化测试的定义和测试步骤&#xff0c;帮助您更好地了解自动化测试。 一、什么是软件自动化测试…

预约微信小程序源码系统制作搭建 适用于多场景 支持万能DIY功能

分享一个预约微信小程序源码系统&#xff0c;适用于多种预约场景&#xff0c;含完整代码包前端后端详细的搭建教程&#xff0c;支持万能DIY功能&#xff0c;让你轻松开发制作一个属于自己的想要的预约小程序。 一、预约微信小程序源码系统制作搭建的基本步骤和注意事项&#xf…

第5篇 vue的通信框架axios和ui框架-element-ui以及node.js

一 axios的使用 1.1 介绍以及作用 axios是独立于vue的一个项目&#xff0c;基于promise用于浏览器和node.js的http客户端。 在浏览器中可以帮助我们完成 ajax请求的发送在node.js中可以向远程接口发送请求 1.2 案例使用axios实现前后端数据交互 1.后端代码 2.前端代码 &…

拿走吧你,Fiddler模拟请求发送和修改响应数据

模拟伪造请求 方法一&#xff1a;打断点模拟HTTP请求 1、浏览器页面填好内容后&#xff08;不要操作提交&#xff09;&#xff0c;打开fiddler&#xff0c;设置请求前断点&#xff0c;点击菜单fiddler,”Rules”\”Automatic Breakpoints”\”Before Requests” 2、在页面上点…

批量复制文件到指定文件夹,智能跳过相同文件名!

大家好&#xff01;在进行文件管理的过程中&#xff0c;如果需要将大量文件快速复制到指定文件夹&#xff0c;并避免重复文件名带来的混乱&#xff0c;传统的手动操作可能会非常繁琐和耗时。为了让您能够高效地完成这一任务&#xff0c;我们为您提供了一种智能方法&#xff0c;…

SpringMVC之综合案例:参数传递,向页面传参,页面跳转

参数传递向页面传参页面跳转 1.参数传递 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"htt…

长胜证券:三大拐点共振 看好智能驾驶新一轮行情

摘要 【长胜证券&#xff1a;三大拐点共振 看好智能驾驭新一轮行情】长胜证券研报指出&#xff0c;全球共振&#xff0c;国内智驾商场正迎来三大拐点&#xff1a;1&#xff09;技能上&#xff0c;“BEV Transformer数据闭环”新架构2023年开端上车&#xff0c;使得不依靠高精地…

HONEYWELL 0574-A-012 0574-A-0131 编码器模块

HONEYWELL 0574-A-012 0574-A-0131 编码器模块是一种用于测量旋转或线性位置的设备&#xff0c;通常用于自动化系统、机器控制和传感器应用。以下是HONEYWELL 0574-A-012 0574-A-0131 编码器模块可能具备的一些常见产品特点&#xff1a; 高精度测量&#xff1a;HONEYWELL 0574-…

Linux编译器-gcc/g++使用

文章目录 前言一、gcc/g编译器1、gcc/g安装2、gcc介绍3、gcc和g区别3.1 gcc不是只能编译.c源文件3.2 gcc和g编译文件3.3 gcc 不会定义 __cplusplus 宏&#xff0c;而 g 会3.5 演示 4、gcc/g编译过程 二、动态库和静态库1、动态库和静态库2、动态链接和静态链接2.1 动态链接2.2 …

STL stack 和 queue

文章目录 一、stack 类和 queue 类的模拟实现 stack 只允许在一端进行插入删除&#xff0c;是一个后进先出(LIFO)的结构&#xff0c;可以存储任意类型 queue 只允许在一端进行插入&#xff0c;另一端进行删除&#xff0c;是一个先进先出(FIFO)的结构&#xff0c;可以存储任意类…

元服务那些事儿 | 挥剑解决隐私声明,激发开发豪情

话说元服务初上的年间&#xff0c;鸿蒙江湖高手云起&#xff0c;都是一顿键盘手猛敲&#xff0c;元服务推陈出新&#xff0c;创意层出不穷&#xff0c;无不风生水起。 江湖规矩&#xff1a;每个元服务必须提供规范的隐私声明&#xff0c;否则提交元服务发布上架后&#xff0c;将…