DataX, Alibaba tarafından geliştirilen açık kaynaklı bir çevrimdışı veri senkronizasyon aracıdır. Bu aracı kullanarak MySQL veritabanından LindormTSDB'ye toplu veri geçişi yapabilirsiniz.
Geçiş işlemi aşağıdaki iki DataX eklentisini kullanır:
MySQL Reader — Java Database Connectivity (JDBC) üzerinden MySQL'den satırları okur
TSDB Writer —
/api/mputve/api/putHTTP API'leri üzerinden LindormTSDB'ye veri noktaları yazar
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
DataX'i çalıştırmak için bir Linux makinesi
JDK 1.8 veya sonraki sürüm — Oracle adresinden indirin
Python 2.6.x (önerilir) — python.org adresinden indirin
5.x sürümüyle uyumlu bir MySQL
Çalışan bir LindormTSDB örneği
DataX ana bilgisayarından hem MySQL'e (JDBC bağlantı noktası) hem de LindormTSDB'ye (HTTP bağlantı noktası) ağ bağlantısı. Bağlantı eksikliği bir
Connect Exceptionhatasına neden olur.
DataX'i kurma
İndirme ve çıkarma
Bu geçiş için önceden yapılandırılmış eklentileri içeren DataX paketini indirin:
wget https://tsdbtools.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
tar -xzf datax.tar.gz
DATAX_HOME değişkenini çıkarılan dizine ayarlayın:
export DATAX_HOME=$(pwd)/datax
Kurulumu doğrulama
DataX'in düzgün çalıştığını onaylamak için yerleşik Stream Reader'dan Stream Writer'a test işini çalıştırın. Bu eklentilerin harici bağımlılıkları yoktur; Stream Reader rastgele dizeler oluşturur ve Stream Writer bunları konsola yazdırır.
cd ${DATAX_HOME}
python bin/datax.py job/job.json
Başarılı bir çalıştırma, aşağıdakine benzer bir özetle sona erer:
Task start time : 2019-04-26 11:18:07
Task end time : 2019-04-26 11:18:17
Total time : 10s
Average traffic : 253.91KB/s
Record write speed : 10000rec/s
Total records read : 100000
Total read/write failures : 0
Total read/write failures: 0 ifadesi, işin hatasız tamamlandığını gösterir. Yazma hızı, LindormTSDB aktarım hızını değil Stream Writer aktarım hızını yansıtır.
Geçiş işini yapılandırma
mysql2tsdb.json adında bir yapılandırma dosyası oluşturun. Bu dosya bir okuyucu (MySQL Reader) ve bir yazıcı (TSDB Writer) tanımlar.
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": [
"name",
"type",
"create_time",
"price",
"description",
"available"
],
"connection": [
{
"jdbcUrl": [
"jdbc:mysql://127.0.0.1:3306/datax"
],
"table": [
"book"
]
}
],
"password": "xxx",
"splitPk": "id",
"username": "root"
}
},
"writer": {
"name": "tsdbwriter",
"parameter": {
"column": [
"name",
"type",
"create_time",
"price",
"description",
"available"
],
"columnType": [
"tag",
"tag",
"timestamp",
"field_double",
"field_string",
"field_bool"
],
"sourceDbType": "RDB",
"endpoint": "http://localhost:8242",
"table": "my_book",
"multiField": "true",
"username": "xxx",
"password": "xxx",
"ignoreWriteError": "false",
"database": "default"
}
}
}
],
"setting": {
"speed": {
"channel": 1
}
}
}
}
MySQL Reader'daki column dizisi ile TSDB Writer'daki column dizisi sütunları aynı sırayla listelemelidir. DataX bunları konumsal olarak eşler; sıranın uyuşmaması verilerin bozulmasına neden olur.
MySQL Reader parametreleri
| Parametre | Tür | Zorunlu | Açıklama | Varsayılan | Örnek |
|---|---|---|---|---|---|
jdbcUrl |
String | Evet | MySQL veritabanı için JDBC bağlantı dizesi | — | jdbc:mysql://127.0.0.1:3306/datax |
username |
String | Evet | MySQL kullanıcı adı | — | root |
password |
String | Evet | Belirtilen kullanıcı adı için parola | — | root |
table |
String | Evet | Okunacak tablo | — | book |
column |
Array | Evet | Sırasıyla okunacak sütunlar. TSDB Writer'daki column sırasıyla eşleşmelidir. |
[] |
["name","type","create_time"] |
splitPk |
String | Hayır | Paralel çalıştırma için okumaları bölmek üzere kullanılan sütun | (boş) | id |
TSDB Writer parametreleri
| Parametre | Tür | Zorunlu | Açıklama | Varsayılan | Örnek |
|---|---|---|---|---|---|
sourceDbType |
String | Hayır | Kaynak sistem türü. İlişkisel veritabanları (MySQL, Oracle, PostgreSQL, DRDS) için RDB; zaman serisi veritabanları (OpenTSDB, InfluxDB, Prometheus, TimeScale) için TSDB |
TSDB |
RDB |
column |
Array | Evet | Yazılacak sütunlar, MySQL Reader column ile aynı sırada olmalıdır. DataX sütunları konumsal olarak eşler. |
[] |
["name","type","create_time","price"] |
columnType |
Array | Evet | column içindeki her sütun için LindormTSDB alan türü. Desteklenen değerler: timestamp, tag, metric_num, metric_string. Aşağıdaki eşleme tablosuna bakın. |
[] |
["tag","tag","timestamp","metric_num"] |
endpoint |
String | Evet | LindormTSDB uç nokta adresi ve bağlantı noktası | — | ld-xxxx:8242 |
multiField |
Bool | Evet | Verileri çok alanlı modda yazmak için true olarak ayarlayın |
false |
true |
table |
String | Evet | LindormTSDB'deki hedef tablo adı | — | my_book |
username |
String | Hayır | LindormTSDB kullanıcı adı | — | tsdbuser |
password |
String | Hayır | LindormTSDB parolası | — | tsdbpsw |
ignoreWriteError |
Bool | Evet | true olduğunda, işi durdurmak yerine yazılamayan satırları atlar |
false |
false |
database |
String | Hayır | LindormTSDB'deki hedef veritabanı adı | default |
default |
Sütun türü eşlemesi
columnType dizisi, her MySQL sütununu bir LindormTSDB alan türüne eşler. Desteklenen değerler şunlardır:
**columnType değeri** |
Açıklama | Tipik MySQL sütun türü |
|---|---|---|
timestamp |
Zaman damgası alanı | DATETIME, BIGINT (epoch ms) |
tag |
Sorguları filtrelemek ve gruplamak için kullanılan boyut alanı | VARCHAR, CHAR |
metric_num |
Sayısal ölçüm değeri | INT, FLOAT, DOUBLE, DECIMAL |
metric_string |
Dize ölçüm değeri | TEXT, VARCHAR |
Geçişi çalıştırma
mysql2tsdb.json dosyasını datax/ klasörünün üst dizinine yerleştirin ve ardından şunu çalıştırın:
cd ${DATAX_HOME}/..
python datax/bin/datax.py mysql2tsdb.json
Çalıştırmadan önce dizin düzeniniz şu şekilde görünmelidir:
datax/
datax.tar.gz
mysql2tsdb.json
Geçişi doğrulama
Başarılı bir geçiş, Total read/write failures değerinin 0 olduğu bir özetle sona erer:
Task start time : 2019-05-21 18:25:16
Task end time : 2019-05-21 18:25:27
Total time : 11s
Average traffic : 3B/s
Record write speed : 0rec/s
Total records read : 3
Total read/write failures : 0
Eğer Total read/write failures değeri 0 değerinden büyükse ve ignoreWriteError değeri false ise, iş durur ve hata raporlanır. Belirli satırı ve hata mesajını kontrol etmek için konsol çıktısını inceleyin.
SSS
Geçiş sürecine ayrılan JVM belleğini artırabilir miyim?
JVM bayraklarını -j seçeneği ile iletin:
python datax/bin/datax.py mysql2tsdb.json -j "-Xms4096m -Xmx4096m"
DataX ana bilgisayarını LindormTSDB izin listesine nasıl eklerim?
Bkz. İzin listesi yapılandırma.
Geçiş Connect Exception hatasıyla başarısız oluyor. Neyi kontrol etmeliyim?
LindormTSDB için: DataX ana bilgisayarının,
endpointiçinde belirtilen HTTP bağlantı noktasındaki LindormTSDB uç noktasına ulaşabildiğini onaylayın.MySQL için: DataX ana bilgisayarının MySQL JDBC bağlantı noktasına ulaşabildiğini onaylayın.
DataX'i bir ECS örneğinde çalıştırıyorsanız, ECS güvenlik grubu yapılandırması kullanım örnekleri ve VPC SSS konularını inceleyin.