如何实时同步数据到StarRocks

article/2025/8/28 23:25:10

我们知道,是StarRocks基于Doris开发的,它在多表连接查询的性能方面引领OLAP市场,是一个很好用的结构化数据仓库。但是一直没有很好的工具能够实现业务数据库的数据实时同步到StarRocks分布式数据仓库集群中,本文将带领读者一起来通过flink-jobs的最佳实践来构建一个易于使用和运维的,异构数据库实时同步到StarRocks集群的方案。

阅读前提

阅读本文除了需具备StarRocks相关知识之外,还会涉及Flink、Debezium、Kafka、Zookeeper、MySQL(或者PostgreSQL、Oracle、SQL Server、Db2等其中一种),最好能够自己搭建整套环境,如果不能,身边有可以利用的环境或者有朋友能帮上忙也可以。

环境准备

  1. 在192.168.100.1-3上安装zookeeper,在192.168.100.4-6上安装基于zookeeper的Flink高可用集群,具体安装配置方法请查阅Flink官网。
  2. 在192.168.100.7-9上安装基于zookeeper的kafka集群,并配置好Debezium(也可以是Canal、Maxwell等Flink支持的其他组件),安装方法详见各自官网。
  3. 在192.168.100.10上安装一个MySQL数据库,也可以安装任意Debezium支持的数据库(例如PostgreSQL、Oracle、SQL Server、Db2等)。创建一个skyline数据库,在skyline中创建product表并插入数据:
    -- ----------------------------
    -- Table structure for product
    -- ----------------------------
    CREATE TABLE product (id bigint NOT NULL,name VARCHAR(255),authors VARCHAR(50),create_time DATETIME,PRIMARY KEY (id)
    );-- ----------------------------
    -- Records of product
    -- ----------------------------
    INSERT INTO product VALUES (100000000000000001, 'Apache Flink', 'Apache Software Foundation', now());
    INSERT INTO product VALUES (100000000000000002, 'Flink Jobs', 'June', now());
  4. 192.168.100.11-13上安装一个StarRocks集群,创建一个skyline数据库,并在skyline中创建product表:
    -- ----------------------------
    -- Table structure for product
    -- ----------------------------
    CREATE TABLE product (id bigint NOT NULL,name STRING,authors STRING,create_time DATETIME
    ) PRIMARY KEY (id) DISTRIBUTED BY HASH (id) BUCKETS 3;
  5. 在kafka上运行命令将MySQL中的product表的变更通过CDC捕获:
    curl -i -X POST -H "Accept:application/json" -H  "Content-Type:application/json" 192.168.100.7:8083/connectors/  -d '{"name": "productCDCTask","config": {"connector.class": "io.debezium.connector.mysql.MySqlConnector","tasks.max": "1","database.hostname": "192.168.100.10","database.port": "3306","database.user": "your_user","database.password": "your_password","database.server.id": "184001","database.server.name": "demo","database.whitelist": "skyline","database.useTimezone": "true","database.serverTimeZone": "Asia/Shanghai","time.precision.mode": "connect","decimal.handling.mode": "string","table.whitelist": "skyline.product","database.history.kafka.bootstrap.servers": "192.168.100.7:9092,192.168.100.8:9092,192.168.100.9:9092","database.history.kafka.topic": "dbhistory.demo" }
    }';

创建应用

为了更快地创建自己的flink-jobs应用程序,我们直接下载flink-jobs-quickstart来开始构建我们的第一个flink-jobs应用程序:

  1. 下载flink-jobs-quickstart源代码,并根据自己的情况修改flink-jobs.properties配置文件(这里只需要修改Kafka和StarRocks的配置即可)。
  2. 在flink-jobs-quickstart目录下,使用maven打包:
    mvn clean package -Dmaven.test.skip=true

运行应用

 打包成功后,生成的程序包在target目录下:

  1. flink-jobs-quickstart/target/flink-jobs-quickstart-1.1.3.jarflink-jobs-quickstart/target/lib/*上传到flink所在服务器,例如上传到/opt/flink-jobs-quickstart/flink-jobs-quickstart-1.1.3.jar/opt/flink-jobs-quickstart/lib/*。这里需要注意1.1.3为版本号,请根据自己下载的实际版本调整。
  2. flink-jobs-quickstart/target/lib-provided/*包上传到${yourFlinkPath}/lib目录下(${yourFlinkPath}为你的flink所在目录)。
  3. 启动flink集群,如果此前已经启动,由于${yourFlinkPath}/lib目录发生了变化,重启以确保所有依赖包被重新加载。
  4. 通过命令行直接运行同步任务:
    ${yourFlinkPath}/bin/flink run /opt/flink-jobs-quickstart/flink-jobs-quickstart-1.1.3.jar "{\"operates\":[{\"from\":\"kafka\",\"primaryKey\":\"id\",\"table\":\"product\",\"to\":\"starrocks\",\"topic\":\"demo.skyline.product\",\"type\":\"DataSync\"}]}"
  5. 可以尝试对MySQL中的product表进行增删改操作,新的数据将很快同步到StarRocks中。

系统集成

直接通过命令行提交flink-jobs任务并不是终点,因为它使用起来比较繁琐,且不利于管理和维护。最理想的状态应该是直接通过系统界面来进行任务的管理,包括任务配置、启动、停止、重启、监控等。

通过flink-jobs-launcher+Flink REST API可以实现这种目的。首先,利用flink-jobs-launcher提交flink-jobs应用程序会更加便捷,可以采用可读性更好的XML来配置作业,还可以将flink作业集成到现有Java系统中。其次,通过定时调度调用Flink REST API可以将Flink任务监控集成到系统中。详情请移步flink-jobs-launcher或flink-jobs-launcher-quickstart 

玩转flink


http://chatgpt.dhexx.cn/article/MwFLuaGU.shtml

相关文章

文件实时同步

rsync remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的、数据在内存缓存区完成之后还没有写入到磁盘中去、所以有时候要同步到磁盘中去的,而rsync说白了跟复制差不多、能将一个文件从一个地方复制到另外一个地方的、但是他也可以实现跨主机复…

系统间通讯实现数据信息实时同步解决方案

项目开发阶段遇到一个需求,描述大致就是同一个用户在A系统数据库保存的数据信息与在B系统数据库保存的数据信息要保持同步。当A系统用户修改了个人信息,A系统后台在将用户修改后的信息入库的同时也会向B系统发送消息,让B系统后台进行自动数据…

一文带你玩转实时数据同步方案

1、概述 1.1、目标 实时数据同步主要实现从源数据库到目标数据库的实时数据同步。源数据主要支持mysql数据库,目标数据包括mysql数据库和hbase数据库。 下面是实时数据同步的数据流转图,mysql的增量订阅数据经过canal和kafka,数据最终实时…

两台服务器同时写文件 怎么做同步,两台服务器做实时数据同步

两台服务器做实时数据同步 内容精选 换一换 DCS Memcached即将下线,部分Region已暂停售卖,建议使用Redis4.0/5.0。本章节主要描述Memcached主备实例。Memcached主备实例在单机实例基础上,增强服务高可用以及数据高可靠性。Memcached主备实例具…

实时数据同步方案

一.Flume收集各数据库日志,准实时抽取到HDFS 安装HDP,包含Flume 方案优点: 1.配置简单,不用编程:只要在flume.conf文件中配置source、channel及sink的相关属性 2.采用普通SQL轮询的方式实现,具有通用性&…

如何实现数据自动化的实时同步?

企业在日常业务中,比如总分支机构之间、数据中心之间、不同节点之间、跨国业务之间等,都需要将文件及时的传输,以供协同使用。所以,很多企业会选择一些同步工具或软件。 谈到文件同步备份大家使用较多的可能是Rsync、同步盘等一些…

像素是什么,一个像素有多大,像素和分辨率的关系

图片的像素和分辨率 对于像素和分辨率这两个词,主要见于图片和显示设备上。只要你用到手机里的照相功能,你都要接触到这两个概念。只是大多数人都是一知半解,而更多的人却根本就不知道,白白浪费了手机里500万、800万像素的摄影头&…

屏幕尺寸、分辨率、DPI、PPI

屏幕尺寸 下面这张图是华为荣耀7的尺寸图,图上写的是5.2英寸。我们所说的这个5.2英寸是手机屏幕对角线的长度。 我们平时是不用英寸这个单位的,我们用的是毫米,厘米,米这些单位。那么英寸和毫米,厘米之间怎样的换算关…

像素(Pixel)、DPI与PPI一看就明白

像素(Pixel)、DPI与PPI 像素(Pixel)DPI 英文全写是(Dots Per Inch,每英寸点数)PPI 英文全写是(Pixels Per Inch,每英寸像素数)比喻来区分应用(这张图熟悉吗)1.分辨率啥意思&#xff…

关于像素、分辨率、PPI、DPI等概念的分析

关于影像图的比例尺和分辨率:https://blog.csdn.net/liliiii/article/details/40261953 当我们说到 像素、分辨率、DPI、PPI等专业术语的时候,一般会涉及到图像、屏幕、打印机等等。 像素(Pixel)为图像显示的基本单位,…

分辨率 PPI DPI概念定义详解

我们在开发中,涉及到UI显示时,经常会遇到的一些概念,比如分辨率,ppi,dpi等,这些概念,在百度百科中,发现都有对它们的定义,一些博客中,也有对这几个概念的对比…

DPI与PPI的区别

开发中不免会遇到分辨率、DPI、PPI和屏幕尺寸等术语,那就弄弄清楚这些概念的真正含义。 分辨率 分辨率这个词在很多地方都有,比如相机、视频、扫描仪。这里说的就是显示器的分辨率。显示器是由一个个像素点(pixel)所组成的,一般所说的显示器…

传感器尺寸、像素、DPI分辨率、英寸、毫米的关系

虽然网上有很多这种资料,但是太过于复杂,每个人的说法都不一样,看的让人云里雾里的,我总结了一下,不知道对不对! 1. 1英寸25.4mm 2. 传感器尺寸:传感器的尺寸是指传感器的大小,一般…

dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算

一、基本概念 dip : Density independent pixels ,设备无关像素。dp :就是dippx : 像素dpi :dots per inch , 直接来说就是一英寸多少个像素点。常见取值 120,160&…

什么是 PPI、DPI 及 像素、分辨率的区别?

什么是 PPI、DPI 及 像素、分辨率的区别? AbstractPPIDPI像素 Pixels分辨率 Resolution Abstract 笔者通过本篇文章重点来阐明相对迷惑的PPI、DPI概念,PPI 和 DPI 是处理图像时需要深入理解的概念,两者都指的时分辨率或清晰度,但…

DPI、像素与分辨率的区别和联系

DPI(Dot Per Inch) 表示打印分辨率,指每英寸长度上的点数。DPI 又可细分为水平分辨率和垂直分辨率,例如一张 “1英寸*1英寸” (1英寸2.54cm)的图片,如果它的水平分辨率是100 dpi,垂直…

一文详解像素、DPI、分辨率之间的关系

1.像素 像素:是指在由一个数字序列表示的图像中的一个最小单位,称为像素。 像素可以用一个数表示,比如一个“0.3兆像素”数码相机,它有额定30万像素;也可以用一对数字表示,例如“640x480显示器”&#xff0…

分辨率、Dpi 的关系

概念:分辨率,指的是图像或者显示屏在长和宽上各拥有的像素个数。比如一张照片分辨率为1920x1080,意思是这张照片是由横向1920个像素点和纵向1080个像素点构成,一共包含了1920x1080个像素点。dpi是分辨率的表示单位之一。它是英文D…

图片分辨率像素与DPI的关系

来自网络的一张图片:https://www.duitang.com/blog/?id788101874 这张图片大小(通过鼠标右键点击菜单"属性"获得): 这里面图片的分辨率和dpi两种值。 现在讲讲两者关系。 将图片复制粘贴到word,我们可以获得图片的"原始尺寸"。 如下图所示…

SPSS新手教程——进行距离分析的方法

我们在使用IBM SPSS Statistics来进行数据分析的时候,难免会遇上这种情况:变量非常多,多到我们不能对其一一控制的地步,但每个变量都有分析的价值,同时又彼此重叠。这个时候最直接的方法就是把所有变量按照一定的标准来进行分类&a…