记录一次flink代码优化

背景介绍

业务中有用到flink读取mysql数据,然后实时处理回写到mysql和doris供c端使用,代码的大体逻辑都是
1.创建执行环境
2.写需要使用到表的flinksql ddl语句
3.通过flink sql 写核心的业务逻辑
4.将sql处理的结果通过toRetractStream来转换成一个可撤回流
5.对这个流进行其他处理,比如通过异步IO关联一些高基维表,数据解密,脱敏,过滤脏数据等工作
6.将处理后的结果数据写入到mysql和doris
但是在之前的代码中存在了很多的冗余代码和硬编码,存在如下问题
1.每个任务环境构建的大部分代码都是一样的
2.每一个表都需要手动去写flinksql ddl语句,而且直接写死在代码中,导致代码很长
3.核心的sql处理逻辑也是直接写到了代码中,不方便阅读和修改
4.表转流后的数据类型都需要手动写一个对应的实体类,每次加字段或者修改会很麻烦
5.JdbcSink 的sql语句需要写很长,而且还有写对应的PreparedStatement
6.存在多个库多个环境,数据库的配置信息太多没有一个统一管理的地方

优化思路

1.重复的代码抽取成工具类
2.数据库配置写到配置文件中而不是代码中
3.flink sql ddl语句根据表名和数据库名自动生成
4.核心的sql语句放到文件中,用的时候读取
5.表转流后统一转换成Row类型
6.写一个通用的JdbcSink方法,传入数据库配置,表名称,写入的字段即可自动生成一个SinkFunction
7.mybatis SqlSessionFactory存在多个,写一个工厂类型,通过传入不同的配置文件来生成不同的SqlSessionFactory
8.工具类的开发,数据库连接工具类,线程池工具类,文件读取工具类,环境构建工具类
9.将代码中的一些常量抽取出来放到一个全局的常量类中

遇到的一些问题

长时间没有数据到来,数据库连接失效的问题

解决方案 :
1.jdbc url 添加参数 &autoReconnect=true&maxReconnects=3
2.用完的连接要通过close方法归还到连接池,而不是其放到一个成员变量上长时间使用

mybatis sqlSession失效

使用mybatis的sqlSession用完后应该使用close方法释放资源,这里和数据库连接池的使用是一样的道理

flinkcdc server-id 冲突的问题

不知道之前是哪位大哥在网上写的server-id必须是5400-6400之间,所以一直在使用这个范围内的server-id,经常会遇到server-id冲突的问题,直到前段时间咨询了社区大佬并且也阅读了相关的源码才发现,server-id的范围是整型数字的方位,最大2147483647,所以可以使用的范围是极大的.

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

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

相关文章

什么是住宅IP代理?为什么需要家庭 IP 代理

家庭代理 IP 允许您选择特定位置(国家、城市或移动运营商)并作为代理上网该区域的真实用户。住宅代理 IP 可以定义为保护用户免受一般网络流量影响的中介。它们在隐藏您的 IP 地址的同时充当缓冲区。住宅代理 IP 是服务提供商分配给用户的替代 IP 地址。…

EasyCode生成的SQL语句中无逗号分隔

EasyCode生成的SQL语句中无逗号分隔 EasyCode是一款非常好用的插件,可以帮助我们生成相关的一些代码,但是在生成SQL对应的xml文件之后,发现语句中多个字段之间没有逗号分隔,而是直接连在了一起。接下来,让我们一起去解…

Vue如何实现鼠标悬浮时,展示与隐藏弹窗的功能

如果你需要鼠标在元素和弹窗上时保持弹窗显示,而鼠标离开这两者时隐藏弹窗,你可以使用一个稍微复杂的逻辑来处理鼠标的进入和离开事件。 这通常涉及到延时关闭弹窗,以便给用户足够的时间从元素移动到弹窗上,而不触发弹窗关闭。以…

【论文解读】Performance of AV1 Real-Time Mode

论文下载地址:Performance of AV1 Real-Time Mode 时间:2020.10 级别:IEEE 作者:Ludovic Roux 摘要 背景:COVID-19疫情增加了对数字互动的需求,使得实时或低延迟编解码器变得更加重要。现状:大多数编解码器,包括AV1,主要关注于编码效率,这是视频点播(VOD)的主要改…

授人以渔 选购篇十四:电动车(电动自行车)选购要点

文章目录 系列文章新国标和上牌电池:锂电池电机:无刷直流电机刹车:优选前后双碟刹轮胎:真空轮胎品牌其他 系列文章 授人以渔 选购篇一:信用卡选购要点 授人以渔 选购篇二:冰箱选购要点 授人以渔 选购篇三&…

【传知代码】私人订制词云图-论文复现

文章目录 概述原理介绍核心逻辑1、选取需要解析的txt文档2、选取背景图明确形状3、配置停用词4、创建分词词典,主要解决新的网络热词、专有名词等不识别问题 技巧1、中文乱码问题,使用的时候指定使用的文字字体2、更换背景图3、词库下载以及格式转换方式…

多线程编程(12)之HashMap1.8源码分析

之前已经分析过了一版1.7版本的HashMap,这里主要是来分析一下1.8HashMap源码。 一、HashMap数据结构 HashMap 是一个利用散列表(哈希表)原理来存储元素的集合,是根据Key value而直接进行访问的数 据结构。 在 JDK1.7 中&#xff…

内网穿透端口映射内外网反弹 shell 回顾

内网穿透&端口映射&内外网反弹 shell 回顾 内网概念 我们常说的内网,一般指的是非公有 IPv4 地址的网络比如学校机房里的电脑一般为私有网络,家里的网络也是私有网络 私有网络的范围与划分 ipaddressareaA 类地址10.0.0.0~10.255.…

521源码-免费下载-WordPress全能自动采集与发布插件 – WP-AutoPostPro 汉化版

更多网站源码学习教程,请点击👉-521源码-👈获取最新资源 本工具下载地址:WordPress全能自动采集与发布插件 – WP-AutoPostPro 汉化版 - 521源码 WP-AutoPostPro是一款出类拔萃的WordPress自动采集发布插件,凭借其卓…

Yolov5保姆及入门-含源码【推荐】

前言 YOLO系列模型作为一种实时目标检测算法,自从YOLO1发布以来,就以其检测速度快、准确率高而受到广泛关注。随着技术的迭代,YOLO系列已经发展到了YOLO8。本文将详细介绍YOLO5的技术规格、应用场景、特点以及性能对比。 yolov5源码下载地址…

Oracle 创建DBLink

一、查询是否具有创建DBLink的权限select * from user_sys_privs where privilege like upper(%DATABASE LINK%); 二、如果没有,则需要使用 sysdba 角色给用户赋权grant create public database link to dbusername; 三、创建dblink -- 如果创建全局 dblink&am…

海外真实机房给云手机上“福利”

不论是做出海跨境方面的业务,大家都不自觉的把目光放在了海外的云手机上,尤其是有直播群控,引流获客这样的一个刚需,只有处在海外真实环境了,那么在一些活动的过程中,才能表现的更稳,而不会触发…

React@16.x(10)HOC高阶组件和横切关注点

目录 1,什么是HOC2,什么是横切关注点2.1,简单理解2.2,常见解决方式 3,HOC 举例3.1,全局功能3.2,小范围使用 4,HOC 使用注意点4.1,不要在 render 中使用4.2,不…

Android --- 交换两个布局

准备布局 exchange_out_layout exchange_in_layout <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"andr…

免费,Python蓝桥杯等级考试真题--第13级(含答案解析和代码)

Python蓝桥杯等级考试真题–第13级 一、 选择题 答案&#xff1a;C 解析&#xff1a;正向下标由0开始&#xff0c;下标3代表第四个元素&#xff0c;故答案为C。 答案&#xff1a;A 解析&#xff1a;range&#xff08;0,4&#xff09;的取前不取后&#xff0c;元组的符号是小括…

【CGAL】Region_Growing 检测平面并保存

目录 说明一、算法原理二、代码展示三、结果展示 说明 本篇博客主要介绍CGAL库中使用Region_Growing算法检测平面的算法原理、代码以及最后展示结果。其中&#xff0c;代码部分在CGAL官方库中提供了例子。我在其中做了一些修改&#xff0c;使其可以读取PLY类型的点云文件&…

可行性研究报告编制参考资料(Word原件-软件全套资料)

1业务需求可行性分析 2技术可行性分析 2.1规范化原则 2.2高度的兼容性和可移植性 2.3人性化、适用性 2.4标准化统一设计原则 2.5先进安全可扩展性原则 3开发周期可行性分析 4人力资源可行性分析 5成本分析 6收益分析 7结论 软件全套精华资料包清单部分文件列表&#xff1a; 工作…

【搭建大语言模型】使用LocalGPT搭建本地大语言模型服务并实现远程访问进行交互

文章目录 前言环境准备1. localGPT部署2. 启动和使用3. 安装cpolar 内网穿透4. 创建公网地址5. 公网地址访问6. 固定公网地址 前言 本文主要介绍如何本地部署LocalGPT并实现远程访问&#xff0c;由于localGPT只能通过本地局域网IP地址端口号的形式访问&#xff0c;实现远程访问…

设计模式15——享元模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 享元模式&#xff08;Flyweigh…

Linux信号:信号的概念及意义

目录 一、什么是信号 kill-l查看信号 二、信号的产生 2.1系统调用 kill raise abort 2.2软件条件 13)SIGPIPE pipe信号 14&#xff09;SIGAKARM alarm信号 2.2硬件中断 2.3异常 8)SIGFPE 除0异常 11)SIGSEGV 野指针 2.4信号处理的常见方式 三、Core Dump和term…