最后的棒棒,将cassandra数据与数据同步-188体育娱乐_188体育app_188bet体育在线

暖心故事 297℃ 0

DataX 是阿里巴巴集团内被广泛运用的离线数据同步东西/渠道,完结各种异构数据源之间高效的数据同步功用。最近,阿里云cassandra团队为datax供给了cassandra读写插件,进一步丰厚了datax支撑的数据源,能够很便利完结cassandra之间以及cassandra与其他数据源之间擎的数据同步。本文简略介绍怎么运用datax同步cassandra的数据,针对几种常见的场景给出装备文件示例,还供给了进步同步功能的主张和实测的功能数据。

datax快速入门

运用datax同步数据的办法很简略,总共只需求三步:

1 布置datax。

2 编写同步作业装备文件。

3 运转datax,等候同步作业完结。

dataximpaire的布置和运转都很简略,能够经过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": {
"nam最终的棒棒,将cassandra数据与数据同步-188体育文娱_188体育app_188bet体育在线e": "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": "r金贵肾气丸oot",
"column":广发 [
"id",
"name"
],
"splitPk": "db_id",
"connection": [
{
"table": [
"table"
],
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/database"
]
}
]
}
},
"writ尘肺病er": {
"name": "cassandrawriter",
"parameter": {
"host": "localhost",
"port": 9042,
"useSSL": false,
"keyspace": "test",
"table": "datax_dst",
"column": [
"id",
"name"
]
}
}
}
]
}
}

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

咱们在读插件的装备中供给了where关键字,能够用来只同步一部分数据。例如关于时序数据等场景定最终的棒棒,将cassandra数据与数据同步-188体育文娱_188体育app_188bet体育在线期同步的状况,就能够经过添加where的条件来完结只同步增量数据。where条件的格局和cql相同,例如"where":"textcol='a'"的作用类似于运用select * from table_name where textcol = 'a'进行查询。别的还有allowFiltering关键字合作where运用,作用和cql何超雄中的ALLO最终的棒棒,将cassandra数据与数据同步-188体育文娱_188体育app_188bet体育在线W FILTERING关键字也是相同的。下面给出一个装备的比如:

{
"job": {
"setting": {
"speed": {
"channel": 1
}
},
"content": [
泊{
"reader": {
"name": "cassandrareader",
"parameter": {
"host": "localhost",
"port": 9042,
"useSSL": false,
"keyspace": "test",
"table": "datax_src",
"co着衣lumn": [
"deviceId",
"time",
"log"
],
"where":"time > '2019-09-25'",
"al最终的棒棒,将cassandra数据与数据同步-188体育文娱_188体育app_188bet体育在线lowFiltering":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从参数来完结。例如下面这个装备的作用是会最终的棒棒,将cassandra数据与数据同步-188体育文娱_188体育app_188bet体育在线有10个线程并行履行同步使命。

 "j最终的棒棒,将cassandra数据与数据同步-188体育文娱_188体育app_188bet体育在线ob": {
"setting": {
"speed": {
"channel": 10
}
},
...

需求留意的是,cassandra读插件里边,切分使命是经过在cql语句中添加token规模条件来完结的,所以只要运用Rand河南卫视omPartitioner和Murmur3Partitioner的集群才能够正确切分。如果您的集群运用了其他的Partitioner,cassandrareader插件会疏忽channel装备,只用一个线程进行同步。

(2)batch

能够经过装备ba耽美虐文tchSize关键字在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 "replicatio狼性老公求轻宠n(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":"",
"password":"",
"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":"",
"password":"",
"useSSL": false,
"keyspace": "test",
"table": "standard1",
"batchSize":6,
"c最终的棒棒,将cassandra数据与数据同步-188体育文娱_188体育app_188bet体育在线olumn": [
"key",
"\"C男模7锁屏0\"",
"\"C1\"",
"\"C2\"",
"\"C3\""可乐鸡腿,
"\"C4\"",
"\"C5\"",
"\"C6\"",
"\"C7\"",
"\"C8\"",
"\"C9\""
]
}
}
}
]
}
}

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

可见,datax同步数据的功能和cassandra-stress的功能适当,乃至要好一些。

作者:_陆豪