使用datax同步cassandra数据

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现各种异构数据源之间高效的数据同步功能。最近,阿里云cassandra团队为datax提供了cassandra读写插件,进一步丰富了datax支持的数据源,可以很方便实现cassandra之间以及cassandra与其他数据源之间的数据同步。本文简单介绍如何使用datax同步cassandra的数据,针对几种常见的场景给出配置文件示例,还提供了提升同步性能的建议和实测的性能数据。

datax快速入门

使用datax同步数据的方法很简单,一共只需要三步:
1 部署datax。
2 编写同步作业配置文件。
3 运行datax,等待同步作业完成。
datax的部署和运行都很简单,可以通过datax官方提供的下载地址下载DataX工具包,下载后解压至本地某个目录,进入bin目录,即可运行同步作业:

$ cd  {YOUR_DATAX_HOME}/bin
$ python datax.py {YOUR_JOB.json}

同步作业的配置格式可以参考datax文档。
一个典型的配置文件如下:

{"job": {"content": [{"reader": {"name": "streamreader","parameter": {"sliceRecordCount": 10,"column": [{"type": "long","value": "10"},{"type": "string","value": "hello,你好,世界-DataX"}]}},"writer": {"name": "streamwriter","parameter": {"encoding": "UTF-8","print": true}}}],"setting": {"speed": {"channel": 5}}}
}

一个同步作业的配置文件主要包括两部分,setting包括任务调度的一些配置,content描述同步任务的内容,里面包含reader插件的配置和writer插件的配置。例如我们需要从mysql同步数据到cassandra,那么我们只需要把reader配置为mysqlreader,writer配置为cassandrawriter,并提供相应的插件配置信息即可。在datax项目页面上面可以看到datax支持的插件列表,点击对应的链接就可以查看相关插件的文档了解插件需要的配置内容和格式要求。例如,cassandra插件的文档可点击如下链接:读插件 写插件。
以下列举几种常见的场景。

场景一 cassandra之间的数据同步

最常见的场景是把数据从一个集群同步到另一个集群,例如机房整体迁移、上云等。这时需要先手动在目标集群创建好keyspace和表的schema,然后使用datax进行同步。作为例子,下面的配置文件把数据从cassandra的一个表同步到另一个表:

{"job": {"setting": {"speed": {"channel": 3}},"content": [{"reader": {"name": "cassandrareader","parameter": {"host": "localhost","port": 9042,"useSSL": false,"keyspace": "test","table": "datax_src","column": ["id","name"]}},"writer": {"name": "cassandrawriter","parameter": {"host": "localhost","port": 9042,"useSSL": false,"keyspace": "test","table": "datax_dst","column": ["id","name"]}}}]}
}

场景二 从mysql同步到cassandra

datax支持多种数据源,可以很方便做到cassandra和其他数据源之间的数据同步。下面的配置把数据从mysql同步到cassandra:

{"job": {"setting": {"speed": {"channel": 3}},"content": [{"reader": {"name": "mysqlreader","parameter": {"username": "root","password": "root","column": ["id","name"],"splitPk": "db_id","connection": [{"table": ["table"],"jdbcUrl": ["jdbc:mysql://127.0.0.1:3306/database"]}]}},"writer": {"name": "cassandrawriter","parameter": {"host": "localhost","port": 9042,"useSSL": false,"keyspace": "test","table": "datax_dst","column": ["id","name"]}}}]}
}

场景三 只同步cassandra中的一部分数据

我们在读插件的配置中提供了where关键字,可以用来只同步一部分数据。例如对于时序数据等场景定期同步的情况,就可以通过增加where的条件来实现只同步增量数据。where条件的格式和cql相同,例如"where":"textcol='a'"的作用类似于使用select * from table_name where textcol = 'a'进行查询。另外还有allowFiltering关键字配合where使用,作用和cql中的ALLOW FILTERING关键字也是相同的。下面给出一个配置的例子:

{"job": {"setting": {"speed": {"channel": 1}},"content": [{"reader": {"name": "cassandrareader","parameter": {"host": "localhost","port": 9042,"useSSL": false,"keyspace": "test","table": "datax_src","column": ["deviceId","time","log"],"where":"time > '2019-09-25'","allowFiltering":true}},"writer": {"name": "cassandrawriter","parameter": {"host": "localhost","port": 9042,"useSSL": false,"keyspace": "test","table": "datax_dst","column": ["deviceId","time","log"]}}}]}
}

提高同步速度

以cassandra之间的数据同步为例。如下这些配置会对数据同步任务的性能产生影响:
(1)并行度
可以通过调大任务的并行度来提高同步速度。这主要通过job.setting.speed.channel从参数来实现。例如下面这个配置的效果是会有10个线程并行执行同步任务。

  "job": {"setting": {"speed": {"channel": 10}},
...

需要注意的是,cassandra读插件里面,切分任务是通过在cql语句中增加token范围条件来实现的,所以只有使用RandomPartitioner和Murmur3Partitioner的集群才能够正确切分。如果您的集群使用了其他的Partitioner,cassandrareader插件会忽略channel配置,只用一个线程进行同步。
(2)batch
可以通过配置batchSize关键字在cassandra写插件里面使用UNLOGGED batch来提高写入速度。但是需要注意cassandra中对batch的使用有一些限制,使用这个关键字之前建议先阅读[《简析Cassandra的BATCH操作》(https://yq.aliyun.com/articles/719784?spm=a2c4e.11155435.0.0.65386b04OYOsvK)一文中关于batch使用限制的内容。
(3)连接池配置
写插件还提供了连接池相关的配置connectionsPerHost和maxPendingPerConnection。这两个参数的具体含义可以参考[java driver文档](https://docs.datastax.com/en/developer/java-driver/3.7/manual/pooling/)。
(4)一致性配置
读写插件中都提供了consistancyLevel关键字,默认的读写一致性级别都是LOCAL_QUORUM。如果您的业务场景里面可以允许两个集群的数据有少量不一致,也可以考虑不使用默认一致性级别来提高读写性能,例如使用ONE级别来读数据。

性能数据

我们通过一个测试来观察datax同步数据的性能。
服务端使用阿里云cassandra,源集群和目标集群均为3节点,规格为4CPU 8GB。客户端使用一台ECS,规则为4 CPU 16 GB。
首先使用cassandra-stress向源集群写入500w行数据:

cassandra-stress write cl=QUORUM n=5000000 -schema "replication(factor=3) keyspace=test" -rate "threads=300" -col "n=FIXED(10) size=FIXED(64)" -errors "retries=32" -mode "native cql3 user=$USER password=$PWD" -node "$NODE"

写入过程的统计数据如下:

然后使用datax将这些数据从源集群同步到目标集群。配置文件如下:

{"job": {"setting": {"speed": {"channel": 10}},"content": [{"reader": {"name": "cassandrareader","parameter": {"host": "<源集群NODE>","port": 9042,"username":"<USER>","password":"<PWD>","useSSL": false,"keyspace": "test","table": "standard1","column": ["key","\"C0\"","\"C1\"","\"C2\"","\"C3\"","\"C4\"","\"C5\"","\"C6\"","\"C7\"","\"C8\"","\"C9\""]}},"writer": {"name": "cassandrawriter","parameter": {"host": "<目标集群NODE>","port": 9042,"username":"<USER>","password":"<PWD>","useSSL": false,"keyspace": "test","table": "standard1","batchSize":6,"column": ["key","\"C0\"","\"C1\"","\"C2\"","\"C3\"","\"C4\"","\"C5\"","\"C6\"","\"C7\"","\"C8\"","\"C9\""]}}}]}
}

同步过程的统计数据如下:

可见,datax同步数据的性能和cassandra-stress的性能相当,甚至要好一些。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

整理了一份 Docker系统知识,从安装到熟练操作看这篇就够了 | 原力计划

作者 | IronmanJay责编 | 王晓曼出品 | CSDN博客Docker 基础介绍下图为 Docker 图标&#xff08;是一个鲸鱼上面是集装箱&#xff09;。1、我们为什么要使用Docker当我们在工作中&#xff0c;一款产品从开发设计到上线运行&#xff0c;其中需要开发人员和运维工程师&#xff0c…

阿里巴巴的云原生与开发者

摘要&#xff1a;利用云原生技术构建应用简便快捷&#xff0c;部署应用轻松自如&#xff0c;运行应用按需伸缩。如今&#xff0c;云原生已经成为下一代技术发展的趋势。在 2019 杭州云栖大会开发者峰会上&#xff0c;阿里巴巴资深技术专家李响就为大家分享了阿里巴巴的云原生技…

(企业案例)使用Nacos持久化规则,改造sentinel-dashboard

文章目录一、前言1. 版本选取2. 克隆代码3. 导入 IDEA二、全局修改2.1. 修改 POM2.2. 修改配置文件三、后端代码修改3.1. 包结构部分3.2. nacos 配置文件四、创建规则与 Nacos 交互类4.1. 创建授权规则与 Nacos 交互类4.2. 创建降级规则与 Nacos 交互类4.3. 创建流控规则与 Nac…

如何基于 Nacos 和 Sentinel ,实现灰度路由和流量防护一体化

Nepxion Discovery框架在实现灰度发布和路由功能前提下&#xff0c;结合Nacos和Sentinel&#xff0c;对流量再实施一层防护措施&#xff0c;更能达到企业级的流量安全控制的目的。它的功能包括&#xff1a; 封装远程配置中心和本地规则文件的读取逻辑&#xff0c;即优先读取远…

神操作!一行Python代码搞定一款游戏?给力!

来源&#xff1a;pypl编程榜一直以来Python长期霸占编程语言排行榜前三位&#xff0c;其简洁&#xff0c;功能强大的特性使越来越多的小伙伴开始学习Python 。甚至K12的同学都开始学习Python 编程。新手入门的时候趣味性其实最重要的。那么一行Python 代码到底能玩出什么花样&a…

详解阿里云数据中台,一篇文章全面了解大数据“网红”

一直想写一篇关于数据中台正面文章&#xff0c;现在有闲时做些总结&#xff0c;想充分诠释一下DT内部人如何看待数据中台。 数据中台的概念是最早由阿里巴巴首次提出&#xff0c;是为了应对内部众多业务部门千变万化的数据需求和高速时效性的要求而成长起来的&#xff0c;它既要…

云原生时代,蚂蚁金服公开了新的金融混合云架构

蚂蚁金服在过去十五年重塑支付改变生活&#xff0c;为全球超过十二亿人提供服务&#xff0c;这些背后离不开技术的支撑。在 2019 杭州云栖大会上&#xff0c;蚂蚁金服将十五年来的技术沉淀&#xff0c;以及面向未来的金融技术创新和参会者分享。我们将其中的优秀演讲整理成文并…

Python 薪资降温?不存在的

当你学习编程时&#xff0c;最先被困扰在哪一步&#xff1f;是不是很容易陷入在语法之类的细节而忽视基础概念&#xff1f;解决当前任务的最佳方法是什么&#xff1f;在多种编程语言之间来回切换&#xff0c;却感觉不到效率的提高&#xff1f;0 基础学习编程&#xff0c;最先入…

隐私与AI兼得,蚂蚁金服是如何做到的?

蚂蚁金服在过去十五年重塑支付改变生活&#xff0c;为全球超过十二亿人提供服务&#xff0c;这些背后离不开技术的支撑。在 2019 杭州云栖大会上&#xff0c;蚂蚁金服将十五年来的技术沉淀&#xff0c;以及面向未来的金融技术创新和参会者分享。我们将其中的优秀演讲整理成文并…

Nacos配置中心规范

文章目录一、版本选取和概念理解1. 版本选择2.Namespace3. 如何进行配置和服务的管理、隔离&#xff08;Group&#xff09;二、方案选取1. 命名空间创建2. Namespace实施方案三、nacos配置实战3.1. dev环境配置创建3.2. test环境配置创建四、代码coding实战4.1. 创建2项目4.2. …

干货|Flutter 原理与闲鱼深度实践

王康&#xff08;正物&#xff09;—— Flutter 官方成员 阿里巴巴技术专家&#xff0c;之前主要负责 Flutter 在闲鱼中的混合开发体系&#xff0c;目前重点关注 Flutter 深入度以及生态相关的工作。本文将分享三方面内容&#xff0c; Flutter 的原理、 Flutter 在闲鱼中的应用…

云计算,巨头们的背水一战

作者 | 马超责编 | 伍杏玲头图 | CSDN 下载自视觉中国出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;最近国内各IT巨头技术布局都颇有看点&#xff0c;先是腾讯宣布将投入5000亿&#xff0c;用于新基建的进一步布局&#xff08;将重点投入云计算、人工智能、区块链…

基于函数计算的 Serverless AI 推理

前言概述 本文介绍了使用函数计算部署深度学习 AI 推理的最佳实践, 其中包括使用 FUN 工具一键部署安装第三方依赖、一键部署、本地调试以及压测评估&#xff0c; 全方位展现函数计算的开发敏捷特性、自动弹性伸缩能力、免运维和完善的监控设施。 1.1 DEMO 概述 通过上传一个…

《Flutter in action》开放下载!闲鱼Flutter企业级实践精选

复制链接到浏览器 https://yq.aliyun.com/download/3792?utm_contentg_1000081730 下载。 闲鱼是国内最早使用Flutter的团队&#xff0c;也是Flutter业务线渗入最深的团队之一。 现在承载亿级流量的闲鱼将多年最佳实践经验整理成册&#xff0c;《Flutter in action》 正式面世…

阿里HBase高可用8年抗战回忆录

前言 2011年毕玄和竹庄两位大神将HBase引入阿里技术体系&#xff0c;2014年接力棒转到东8区第一位HBase commiter天梧手中&#xff0c;多年来与淘宝、旺旺、菜鸟、支付宝、高德、大文娱、阿里妈妈等几乎全BU合作伙伴携手共进&#xff0c;支撑了双十一大屏、支付宝账单、支付宝…

nginx 1.9.9 Linux 环境安装

文章目录一、软件下载和安装Nginx相关依赖1. 安装Nginx相关依赖2. 下载Nginx二、源码安装Nginx2.1. 解压2.2. nginx默认配置2.3. 编译安装2.3. 查找安装路径2.4.启动nginx2.5. 查看是否启动成功一、软件下载和安装Nginx相关依赖 1. 安装Nginx相关依赖 yum -y install gcc zli…

Java面向对象部分小结

Java面向对象部分小结 第一天: 1. 了解面向对象和面向过程 2. 对象是什么&#xff0c;静态特性&#xff08;属性&#xff09;&#xff0c;动态特征&#xff08;方法&#xff09; 3. 类和对象的关系 类是抽象的&#xff0c;对象是具体的类是具有相同属性和行为&#xff08;…

音视频应用驶入快车道 开发者如何快速追赶这波技术红利?

受访人 | 融云CPO 任杰 作者 | June 图片来源 | 视觉中国 毋庸置疑&#xff0c;随着5G时代的到来&#xff0c;实时音视频技术将会上升到一个全新的高度。 5G时代发生巨变的远远不止网速&#xff0c;凭借5G网络的高带宽&#xff0c;低延迟和大并发性&#xff0c;音视频应用场…

Mysql 8.0 安装教程 Linux Centos7

文章目录一、软件下载上传1. 下载2. 上传二、软件安装配置2.1. 解压mysql2.2. 创建data文件夹 存储文件2.3. 创建用户组以及用户和密码2.4. 授权用户2.5. 切换到bin目录下2.6. 编辑my.cnf文件2.7. 添加mysqld服务到系统2.8. 授权以及添加服务2.9. 启动mysql2.10. 查看启动状态2…

重磅发布 | 全球首个云原生应用标准定义与架构模型 OAM 正式开源

Kubernetes 项目作为容器编排领域的事实标准&#xff0c; 成功推动了诸如阿里云 Kubernetes &#xff08;ACK&#xff09;等云原生服务的迅速增长。但同时我们也关注到&#xff0c;Kubernetes 的核心 API 资源比如 Service、Deployment 等&#xff0c;实际上只是应用中的不同组…