Flinkx如何通过json文件定位读写插件

2023-11-11 21:58
文章标签 json 读写 定位 插件 flinkx

本文主要是介绍Flinkx如何通过json文件定位读写插件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

Flinkx作为数据同步工具,它通过json配置文件来确定多源到多源的数据同步和同步策略,这次就来看看Flinkx是如何通过json配置文件来定位reader和writer端的

整体结构

在这里插入图片描述

从Flinkx项目里可以看到,它对每个数据源都定义了core,reader输出端,writer输入端。当然也有意外,hive和redis只要输入。

Flinkx是如何通过json配置文件定位这个源呢

看源码

定位到D:\Projects\flinkx-1.8.5\flinkx-core\src\main\java\com\dtstack\flinkx\Main.java

1. 先看下如何定位reader端,在第113行

BaseDataReader dataReader = DataReaderFactory.getDataReader(config, env);
// 进入getDataReader方法:
public static BaseDataReader getDataReader(DataTransferConfig config, StreamExecutionEnvironment env) {try {// 通过配置文件获取插件名String pluginName = config.getJob().getContent().get(0).getReader().getName();// 通过插件名找到插件的类名String pluginClassName = PluginUtil.getPluginClassName(pluginName);// 在获取插件名的文件路径和公共插件文件路径Set<URL> urlList = PluginUtil.getJarFileDirPath(pluginName, config.getPluginRoot());// 通过文件路径加载类,得到构造函数,实例化插件return ClassLoaderManager.newInstance(urlList, cl -> {Class<?> clazz = cl.loadClass(pluginClassName);Constructor constructor = clazz.getConstructor(DataTransferConfig.class, StreamExecutionEnvironment.class);return (BaseDataReader)constructor.newInstance(config, env);});} catch (Exception e) {throw new RuntimeException(e);}}

在每个json配置文件中,都需要配置job.content.reader.name="xxxreader"参数,这个name就是插件名,通过该名字才可以找到相应的插件。实例化插件还需要导入公共的插件plugins/common/flinkx-rdb-**.jar

2. 在看看writer端,在122行

BaseDataWriter dataWriter = DataWriterFactory.getDataWriter(config);
// 进入getDataWriter方法
public static BaseDataWriter getDataWriter(DataTransferConfig config) {try {String pluginName = config.getJob().getContent().get(0).getWriter().getName();String pluginClassName = PluginUtil.getPluginClassName(pluginName);Set<URL> urlList = PluginUtil.getJarFileDirPath(pluginName, config.getPluginRoot());return ClassLoaderManager.newInstance(urlList, cl -> {Class<?> clazz = cl.loadClass(pluginClassName);Constructor constructor = clazz.getConstructor(DataTransferConfig.class);return (BaseDataWriter)constructor.newInstance(config);});} catch (Exception e) {throw new RuntimeException(e);}}

与reader端同理,通过name确定相应的writer端

这篇关于Flinkx如何通过json文件定位读写插件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/393067

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

10. 文件的读写

10.1 文本文件 操作文件三大类: ofstream:写操作ifstream:读操作fstream:读写操作 打开方式解释ios::in为了读文件而打开文件ios::out为了写文件而打开文件,如果当前文件存在则清空当前文件在写入ios::app追加方式写文件ios::trunc如果文件存在先删除,在创建ios::ate打开文件之后令读写位置移至文件尾端ios::binary二进制方式

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

js定位navigator.geolocation

一、简介   html5为window.navigator提供了geolocation属性,用于获取基于浏览器的当前用户地理位置。   window.navigator.geolocation提供了3个方法分别是: void getCurrentPosition(onSuccess,onError,options);//获取用户当前位置int watchCurrentPosition(

php中json_decode()和json_encode()

1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行编码 说明 mixed json_decode ( string $json [, bool $assoc ] ) 接受一个 JSON 格式的字符串并且把它转换为 PHP 变量 参数 json

struts2中的json返回指定的多个参数

要返回指定的多个参数,就必须在struts.xml中的配置如下: <action name="goodsType_*" class="goodsTypeAction" method="{1}"> <!-- 查询商品类别信息==分页 --> <result type="json" name="goodsType_findPgae"> <!--在这一行进行指定,其中lis是一个List集合,但

eclipse安装subversion(SVN)版本控制插件

陈科肇 查看插件更新站点 网址:http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA 网站截图: 根据自己的eclipse版本,选择需要的更新站点. 使用eclipse集成subservion插件 Help > Install New Software…> 等待下载安装插件…