FlinkX的安装与使用(异构数据同步工具——flinkx)

news2024/11/18 4:27:40

异构数据同步工具——flinkx - 知乎

一、概要简介

FlinkX是由袋鼠云开源基于Flink的分布式离线和实时相结合的数据同步框架,既可以采集静态的数据比如:MYSQL,HDFS等,也可以采集实时变化的数据比如:MYSQL BINLOG,KAFKA等。目前官方已经支持多种异构数据源之间高效的数据同步。

二、架构设计

FlinkX整体架构设计采用Framework+plugin模式。不同数据源被抽象成不同的Reader plugin和Writer plugin,使用方只需要在配置文件配置相应插件参数就可以实现数据迁移,插件扩展上用户只需要实现Reader和Writer接口,其他的框架会给予支持。理论上FlinkX可以横向扩展支持任意类型数据源的同步

三、支持的数据源

FlinkX目前已经支持十几种数据源:

四、基础特性

4.1 脏数据管理

异构系统执行大数据迁移不可避免的会有脏数据产生,脏数据会影响同步任务的执行,FlinkX的Writer插件在写数据是会把以下几种类型作为脏数据写入脏数据表里:

1、类型转换错误
2、空指针
3、主键冲突
4、其它错误

4.2 流控管理

大数据同步时在负载高的时候有时候会给系统带来很大的压力,FlinkX使用令牌桶限流方式限速,当源端产生数据的速率达到一定阈值就不会读取数据。

4.3 断点续传

部分插件支持通过Flink的checkpoint机制从失败的位置恢复任务。断点续传对数据源 ️强制要求:

1、中必须包含一个升序的字段,比如主键或者日期类型的字段,同步过程中会使用checkpoint机制记录这个字段的值,任务恢复运行时使用这个字段构造查询条件过滤已经同步过的数据,如果这个字段的值不是升序的,那么任务恢复时过滤的数据就是错误的,最终导致数据的缺失或重复。
2、数据源必须支持数据过滤,如果不支持的话,任务就无法从断点处恢复运行,会导致数据重复。
3、目标数据源必须支持事务,比如关系数据库,文件类型的数据源也可以通过临时文件的方式支持。

五、运行原理

原理简图

FlinkX底层实现上依赖Flink,数据同步任务会包装成StreamGraph在Flink上执行。

六、系统安装

6.1 flink集群安装

​wget https://archive.apache.org/dist/flink/flink-1.10.3/apache-flink-1.10.3.tar.gz.asc
tar -zxvf apache-flink-1.10.3.tar.gz.asc

# 目录修改 flink-conf.yaml 配置文件
cd ../conf
rest.bind-port: 8081

# 启动flink​
./bin start-cluster.sh 

查看集群启动情况

在浏览器查看集群启动情况http://localhost:8081

6.2 安装flinkX

​wget https://github.com/DTStack/flinkx/archive/1.10_release.zip
unzip 1.10_release.zip
cd flinkx-1.10_release

#源码编译
mvn clean package -DskipTests

#编译完之后在根目录生成syncplugins目录,里面包含启动类以及各种插件

​

到此所有系统准备工作完毕。

七、配置示例

项目工程example目录提供了各个插件配置样例。由于我本地只安装了mysql,我这边就以mysql to mysql作为演示。

⚠️在同步之前需要确保目的数据库和表已经存在,否则会报错。

7.1 源表数据:

7.2 配置文件

配置文件mysql_mysql_batch.json:

{
    "job": {
      "content": [
        {
          "reader": {
            "name": "mysqlreader",
            "parameter": {
              "column": [
                {
                  "name": "id",
                  "type": "int"
                },
                {
                  "name": "name",
                  "type": "string"
                },
                {
                  "name": "age",
                  "type": "int"
                }
              ],
              "username": "root",
              "password": "root",
              "connection": [
                {
                  "jdbcUrl": [
                    "jdbc:mysql://localhost:3306/rc?useSSL=false"
                  ],
                  "table": [
                    "my"
                  ]
                }
              ]
            }
          },
          "writer": {
            "name": "mysqlwriter",
            "parameter": {
              "username": "root",
              "password": "test",
              "connection": [
                {
                  "jdbcUrl": "jdbc:mysql://localhost:3306/rc?useSSL=false",
                  "table": [
                    "my_sync"
                  ]
                }
              ],
              "writeMode": "insert",
              "column": [
                {
                  "name": "id",
                  "type": "int"
                },
                {
                  "name": "name",
                  "type": "string"
                },
                {
                  "name": "age",
                  "type": "int"
                }
              ]
            }
          }
        }
      ],
      "setting": {
        "speed": {
          "channel": 1,
          "bytes": 0
        }
      }
    }
  }

7.3 local模式启动

bin/flinkx \
-mode local \
-job bin/mysql_mysql_batch.json \
-pluginRoot syncplugins \
-flinkconf flinkconf

7.4 standalone模式启动

bin/flinkx \
-mode standalone \
-job bin/mysql_mysql_batch.json \
-pluginRoot syncplugins \
-flinkconf /Users/hsw/Documents/project_install/flink/flink-1.12.2/conf

7.5 执行之后结果:

至此数据已经完美同步过来了。

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

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

相关文章

【1187. 使数组严格递增】

来源:力扣(LeetCode) 描述: 给你两个整数数组 arr1 和 arr2,返回使 arr1 严格递增所需要的最小「操作」数(可能为 0)。 每一步「操作」中,你可以分别从 arr1 和 arr2 中各选出一个…

如何在苹果Mac OS系统中安装MT4电脑版软件?

很多投资者可能已经发现了,当前市面上绝大部分的正规交易平台,都在使用MT4电脑版软件作为平台专用的交易工具。而市面上的电脑系统主要又分为微软Windows系统和苹果Mac OS系统,对于微软Windows系统的MT4电脑版软件安装,想必大家都…

若依Linux环境部署

若依Linux环境部署 1.若依项目2.后端3.Linux环境配置4.环境部署附录 1.若依项目 若依官网若依文档前后端分离代码 2.后端 整体项目结构 自己创建好数据库,并在如下地方修改代码 日志路径也需要修改 数据库建表语句 同时redis也要启动并配置好 后端启动 3.…

高级篇三、用户与权限管理

第03章_用户与权限管理.pdf 1、用户管理 1.1 登录MySQL服务器 mysql -h xxx -P xxx -u xxx -p DatabaseName –e "SQL语句"下面详细介绍命令中的参数: -h参数 后面接主机名或者主机IP,hostname为主机,hostIP为主机IP。-P参数 后…

如何在Google Play设置置顶大图

应用的置顶大图是Google Play商店上ASO优化的重要一环,是我们保持品牌形象的重要场所。如果我们没有设置预览视频,那么Google Play 将会使用置顶大图,如果添加了预览的视频,那么视频会放置在置顶大图的顶部。 添加游戏或应用程序…

关于Redis的BigKey

文章目录 准备keys * 等命令的危害与避免不用keys * ,应该用什么BigKey阿里云Redis开发规范多大算Big危害怎么产生的?怎么发现BigKey怎么删除String类型使用hscan每次获取少量field-value,再使用hdel删除每个field使用ltrim渐进式逐步删除&am…

管理后台项目-02-平台属性组件模块

目录 1-分类三级列表 2-属性列表 2.1-需求功能分析 2.2-功能代码实现数据获取和变动 2.3-动态渲染数据 3-新增修改属性 3.1-点击新增属性逻辑处理 3.2-点击列表页面修改属性逻辑 3.3-新增和修改属性 3.4-点击删除属性值 3.5-点击删除属性 1-分类三级列表 需求&…

通过案例来了解响应式开发的音频控件

目录 前言 一、视频控件的使用方法 1.语法 2、部分功能介绍 二、案例举例 三、播放效果 前言 1.本文讲解的响应式开发技术(HTML5CSS3Bootstrap)的HTML5表单等功能方法的代码,这也是很多教材的一个典型案例; 2.本文将讲解涉…

IMX6ULL裸机篇之中断实验-通用中断驱动说明二

一. 通用中断驱动 本文是 IMX6ULL 裸机篇---中断实验。旨在用 C 语言编写一套简单的中断驱动框架代码。 在 start.S 文件中,我们在中断服务函数 IRQ_Handler 中调用了 C 函数 system_irqhandler 来处 理具体的中断。 本实验会认识中断控制器:…

RT-DETR论文学习笔记(DETRs Beat YOLOs on Real-time Object Detection)

论文地址:https://arxiv.org/abs/2304.08069 代码地址:GitHub - PaddlePaddle/PaddleDetection: Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time mult…

完美解决丨ValueError: time data ‘2018/12/24‘ does not match format ‘%Y/%m/%d‘

这里我选择的是: python from datetime import datetime date datetime.strptime(2018/12/24, %Y/%m/%d) 如果你可以执行这段代码,那么你可能会收到这样的报错: python Traceback (most recent call last): File "C:\Users\Administra…

机器学习中最基本的概念之一:数据集、样本、特征和标签

本文重点 数据集、样本、特征和标签是机器学习中的重要概念,这些概念在机器学习算法的设计和实现过程中起着至关重要的作用。在本文中,我们将对这些概念进行详细的讲解,以便更好地理解机器学习算法的基本原理和应用。 一、数据集 数据集是机器学习中最基本的概念之一,它…

VUE3 取Slot元素方法

VUE3 取Slot元素方法 话说前面,这方法诡异的很…尽量不要用. 我这里要实现一个对slot元素进行方法拓展的事情 就比如说我要给一个元素添加自定义拖放事件,正常来说大概是这样的 //vue3 <template><div class"custom" ref"el"><slot> …

Visual Instruction Tuning: 用LLaVA近似多模态GPT-4

©Paperweekly 原创 作者 | Chunyuan Li 使用 GPT-4 进行视觉指令学习&#xff01;Visual Instruction Tuning with GPT-4! ▲ Generated by GLIGEN (https://gligen.github.io/): A cute lava llama and glasses 我们分享了 LLaVA (Language-and-Vision Assistant)&#…

linux工具gcc/g++/gdb/git的使用

目录 gcc/g 基本概念 指令集 函数库 &#xff08;重要&#xff09; gdb使用 基本概念 指令集 项目自动化构建工具make/makefile 进度条小程序 ​编辑 git三板斧 创建仓库 git add git commit git push git status git log gcc/g 基本概念 gcc/g称为编译器…

集合详解之(五)Map集合

文章目录 &#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;Map集合的介绍&#x1fa85;如何保证键的不重复性&#xff1f;&#xff08;equals()与hashCode()方法的联用&#xff09;&#x1f380;HashMap集合及常用方法&#x1f38…

电能计量自动化系统在用电管理上的应用

【摘要】&#xff1a;电能计量自动化系统在用电管理上的应用&#xff0c;不仅能够实现远程自动抄表&#xff0c;减少企业在人力资源成本上的投入&#xff0c;切实地维护企业的核心利益&#xff0c;创造出更多的经济效益。还能够通过装置在线监测与配网防窥电功能实现对电能计量…

D. Tokitsukaze, CSL and Stone Game(博弈)

Problem - D - Codeforces 时津风和CSL正在玩一个石头的小游戏。 一开始&#xff0c;有n个石子堆&#xff0c;其中第ii堆有aiai石子。两位玩家轮流走棋。时津风先走。每一回合&#xff0c;棋手选择一个非空的棋堆&#xff0c;并从该棋堆中准确地取出一块石头。如果在轮到他之前…

2 路 500MSPS/1GSPS/1.25GSPS 14 位直流耦合 AD 采集 FMC 子卡模块

板卡概述 FMC155 是一款基于 VITA57.1 标准的&#xff0c;实现 2 路 14-bit、 500MSPS/1GSPS/1.25GSPS 直流耦合 ADC 同步采集 FMC 子卡模 块。该模块遵循 VITA57.1 规范&#xff0c;可直接与 FPGA 载卡配合使用&#xff0c;板 卡 ADC 器件采用 ADI 的 AD9680 芯片&#xf…

Python每日一练(20230420)

目录 1. 数组逐位判断 &#x1f31f; 2. 交错字符串 &#x1f31f;&#x1f31f; 3. 二进制求和 &#x1f31f; 4. 四舍六入五成双规则 &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 J…