O DataX é uma ferramenta de sincronização de dados offline open source da Alibaba. Use-a para migrar dados em lote de um banco de dados MySQL para o LindormTSDB.
A migração usa dois plugins do DataX:
MySQL Reader — lê linhas do MySQL via Java Database Connectivity (JDBC)
TSDB Writer — grava pontos de dados no LindormTSDB pelas APIs HTTP
/api/mpute/api/put
Pré-requisitos
Antes de começar, verifique se você tem:
Uma máquina Linux para executar o DataX
JDK 1.8 ou superior — baixe em Oracle
Python 2.6.x (recomendado) — baixe em python.org
MySQL compatível com a versão 5.x
Uma instância do LindormTSDB em execução
Conectividade de rede entre o host do DataX, o MySQL (porta JDBC) e o LindormTSDB (porta HTTP). A falta de conectividade causa o erro
Connect Exception.
Configure o DataX
Baixe e extrair
Baixe o pacote do DataX com os plugins pré-configurados para esta migração:
wget https://tsdbtools.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
tar -xzf datax.tar.gz
Defina DATAX_HOME como o diretório extraído:
export DATAX_HOME=$(pwd)/datax
Verifique a instalação
Execute o job de teste integrado Stream Reader para Stream Writer para confirme que o DataX funciona corretamente. Esses plugins não têm dependências externas: o Stream Reader gera strings aleatórias e o Stream Writer as imprime no console.
cd ${DATAX_HOME}
python bin/datax.py job/job.json
Uma execução bem-sucedida termina com um resumo semelhante a este:
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
O valor Total read/write failures: 0 confirma a conclusão do job sem erros. A velocidade de gravação reflete o throughput do Stream Writer, não o do LindormTSDB.
Configure o job de migração
Crie um arquivo de configuração chamado mysql2tsdb.json. Esse arquivo define um reader (MySQL Reader) e um writer (TSDB Writer).
{
"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
}
}
}
}
O array column no MySQL Reader e o array column no TSDB Writer devem listar as colunas na mesma ordem. O DataX faz o mapeamento posicional; uma ordem incorreta corrompe os dados.
Parâmetros do MySQL Reader
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
Padrão |
Exemplo |
|
|
String |
Sim |
String de conexão JDBC para o banco de dados MySQL |
— |
|
|
|
String |
Sim |
Nome de usuário do MySQL |
— |
|
|
|
String |
Sim |
Senha do usuário especificado |
— |
|
|
|
String |
Sim |
Tabela de origem da leitura |
— |
|
|
|
Array |
Sim |
Colunas a ler, em ordem. Deve corresponder à ordem de |
|
|
|
|
String |
Não |
Coluna usada para particionar leituras visando execução paralela |
(vazio) |
|
Parâmetros do TSDB Writer
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
Padrão |
Exemplo |
|
|
String |
Não |
Tipo do sistema de origem. Use |
|
|
|
|
Array |
Sim |
Colunas a gravar, na mesma ordem do |
|
|
|
|
Array |
Sim |
Tipo de campo do LindormTSDB para cada coluna em |
|
|
|
|
String |
Sim |
Endereço e porta do endpoint do LindormTSDB |
— |
|
|
|
Bool |
Sim |
Defina como |
|
|
|
|
String |
Sim |
Nome da tabela de destino no LindormTSDB |
— |
|
|
|
String |
Não |
Nome de usuário do LindormTSDB |
— |
|
|
|
String |
Não |
Senha do LindormTSDB |
— |
|
|
|
Bool |
Sim |
Quando definido como |
|
|
|
|
String |
Não |
Nome do banco de dados de destino no LindormTSDB |
|
|
Mapeamento de tipos de coluna
O array columnType mapeia cada coluna do MySQL para um tipo de campo do LindormTSDB. Os valores suportados são:
|
**Valor de |
Descrição |
Tipo de coluna MySQL típico |
|
|
Campo de timestamp |
|
|
|
Campo de dimensão usado para filtrar e agrupar consultas |
|
|
|
Valor de métrica numérica |
|
|
|
Valor de métrica string |
|
Execute a migração
Coloque o arquivo mysql2tsdb.json no diretório pai da pasta datax/ e execute:
cd ${DATAX_HOME}/..
python datax/bin/datax.py mysql2tsdb.json
A estrutura de diretórios deve ficar assim antes da execução:
datax/
datax.tar.gz
mysql2tsdb.json
Verifique a migração
Uma migração bem-sucedida termina com um resumo em que Total read/write failures é igual a 0:
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
Se Total read/write failures for maior que 0 e ignoreWriteError estiver definido como false, o job será interrompido e reportará o erro. Verifique a saída do console para identificar a linha específica e a mensagem de erro.
FAQ
É possível aumentar a memória JVM alocada para o processo de migração?
Passe flags da JVM com a opção -j:
python datax/bin/datax.py mysql2tsdb.json -j "-Xms4096m -Xmx4096m"
Como adicionar o host do DataX à lista de permissões do LindormTSDB?
Consulte Configurar uma lista de permissões.
A migração falha com um Connect Exception. O que devo verificar?
Para o LindormTSDB: confirme se o host do DataX alcança o endpoint do LindormTSDB na porta HTTP especificada em
endpoint.Para o MySQL: confirme se o host do DataX alcança a porta JDBC do MySQL.
Se executar o DataX em uma instância ECS, revise Casos de uso de configuração de grupo de segurança do ECS e FAQ sobre VPC.