O DataWorks Data Integration usa o TSDB Writer para gravar pontos de dados em uma instância do Lindorm TSDB. Este tópico descreve o funcionamento do TSDB Writer, os tipos de campo compatíveis, os parâmetros de configuração e os benchmarks de desempenho.
Versões compatíveis
O TSDB Writer é compatível com todas as versões do Lindorm TSDB e com o HiTSDB 2.4.x ou superior. Não há garantia de compatibilidade com outras versões.
Limites
O TSDB Writer oferece suporte a Grupos de recursos Serverless (Recomendado) para execução de tarefas. Também há suporte para grupos de recursos exclusivos para Data Integration.
O TSDB Writer permite configurar tarefas apenas no editor de código.
Funcionamento
O TSDB Writer conecta-se a uma instância TSDB pelo cliente TSDB (hitsdb-client) e grava pontos de dados pela API HTTP. Para obter detalhes sobre a API de gravação, consulte Referência do SDK.
Tipos de campo compatíveis
O comportamento do TSDB Writer varia conforme o valor de sourceDbType:
TSDB: a origem é o TSDB Reader ou OpenTSDB Reader. O TSDB Writer transmite os dados de origem diretamente como uma string JSON.RDB: a origem é um banco de dados relacional. O TSDB Writer interpreta os dados como registros de banco de dados relacional e mapeia cada coluna para um tipo TSDB usandocolumnType.
A tabela a seguir apresenta os valores compatíveis para columnType e os tipos de dados TSDB correspondentes quando sourceDbType está definido como RDB.
|
Modelo de dados |
**Valor de |
Tipo de dado |
|
Tag de dados |
|
String. Uma tag descreve uma característica da fonte de dados e geralmente não se altera ao longo do tempo. |
|
Hora de geração dos dados |
|
Timestamp. Indica o momento em que os dados foram gerados. Especifique este valor durante a operação de gravação ou permita que o sistema o gere automaticamente. |
|
Conteúdo dos dados |
|
String. Um campo descreve uma métrica medida da fonte de dados e normalmente varia com o tempo. |
|
Conteúdo dos dados |
|
Numérico. Um campo descreve uma métrica medida da fonte de dados e normalmente varia com o tempo. |
|
Conteúdo dos dados |
|
Booleano. Um campo descreve uma métrica medida da fonte de dados e normalmente varia com o tempo. |
Configurar uma tarefa de sincronização em lote
Configure as tarefas do TSDB Writer exclusivamente pelo editor de código. Para consultar o procedimento geral de configuração, veja Configurar uma tarefa no editor de código.
O apêndice abaixo fornece modelos de script prontos para uso e descrições completas dos parâmetros.
Apêndice: Modelos de script e descrições de parâmetros
Modelos de script
Os três modelos abaixo usam o formato de script unificado exigido pelo editor de código. Substitua os valores de espaço reservado antes de executar. Para o procedimento geral de configuração, consulte Configurar uma tarefa no editor de código.
RDB para TSDB (recomendado)
Use este modelo quando a origem for um banco de dados relacional, como MySQL, Oracle, PostgreSQL ou DRDS.
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "stream",
// Replace "stream" with the plugin name of your RDB source
// (e.g., mysql, oracle, postgresql, drds).
"parameter": {},
"name": "Reader",
"category": "reader"
},
{
"stepType": "tsdb",
"parameter": {
"endpoint": "http://localhost:8242",
"username": "xxx",
"password": "xxx",
"sourceDbType": "RDB",
"batchSize": 256,
"columnType": [
"tag",
"tag",
"field_string",
"field_double",
"timestamp",
"field_bool"
],
"column": [
"tag1",
"tag2",
"field1",
"field2",
"timestamp",
"field3"
],
"multiField": "true",
"table": "testmetric",
"ignoreWriteError": "false",
"database": "default"
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"throttle": true,
// Set to false to disable throttling (mbps is ignored when false).
"concurrent": 1,
// Number of concurrent channels. See performance benchmarks
// to choose a value based on your throughput requirements.
"mbps": "12"
// Maximum transfer rate in MB/s. Only applies when throttle is true.
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
OpenTSDB para TSDB
Use este modelo quando a origem oferecer suporte ao protocolo OpenTSDB (por exemplo, OpenTSDB Reader).
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "opentsdb",
"parameter": {
"endpoint": "http://localhost:4242",
"column": [
"m1",
"m2",
"m3",
"m4",
"m5",
"m6"
],
"startTime": "2019-01-01 00:00:00",
"endTime": "2019-01-01 03:00:00"
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "tsdb",
"parameter": {
"endpoint": "http://localhost:8242"
// Only the destination endpoint is required for TSDB-to-TSDB writes.
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"throttle": true,
"concurrent": 1,
"mbps": "12"
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
RDB para TSDB usando o protocolo de valor único do OpenTSDB (não recomendado)
Adote este modelo apenas quando for necessário gravar dados usando o protocolo de valor único do OpenTSDB. Para novas cargas de trabalho, prefira o modelo RDB para TSDB apresentado acima.
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "stream",
// Replace "stream" with your RDB source plugin name.
"parameter": {},
"name": "Reader",
"category": "reader"
},
{
"stepType": "tsdb",
"parameter": {
"endpoint": "http://localhost:8242",
"username": "xxx",
"password": "xxx",
"sourceDbType": "RDB",
"batchSize": 256,
"columnType": [
"tag",
"tag",
"field_string",
"field_double",
"timestamp",
"field_boolean"
],
"column": [
"tag1",
"tag2",
"field_metric_1",
"field_metric_2",
"timestamp",
"field_metric_3"
],
"ignoreWriteError": "false"
// multiField is omitted (defaults to false) for single-value mode.
// Each field column maps to a separate metric in TSDB.
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"throttle": true,
"concurrent": 1,
"mbps": "12"
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
No modo de valor único, o nome da métrica de destino deriva do nome da coluna mapeada para um campo. Com base na configuração acima, uma linha de dados relacionais é gravada em três métricas:field_metric_1,field_metric_2efield_metric_3.
Parâmetros do Writer
Os parâmetros estão agrupados pelo tipo de origem ao qual se aplicam.
Parâmetros comuns
Estes parâmetros são válidos para todos os valores de sourceDbType.
|
Parâmetro |
Descrição |
Obrigatório |
Padrão |
Exemplo |
|
|
Tipo da origem. |
Não |
|
|
|
|
Endpoint HTTP da instância TSDB. Obtenha este valor no console do produto. Formato: |
Sim |
— |
|
|
|
Banco de dados TSDB de destino. Crie o banco de dados no TSDB antes de executar a tarefa. |
Não |
|
|
|
|
Nome de usuário do banco de dados TSDB. Necessário apenas se a autenticação estiver ativada. |
Não |
— |
|
|
|
Quantidade de entradas de dados a serem gravadas por lote. Valores maiores aumentam o throughput, mas exigem mais memória. Deve ser maior que 0. |
Não |
|
|
Parâmetros para origens TSDB (sourceDbType: TSDB)
|
Parâmetro |
Descrição |
Obrigatório |
Padrão |
Exemplo |
|
|
Número de tentativas após uma falha de gravação. Deve ser maior que 1. |
Não |
|
|
|
|
Se definido como |
Não |
|
|
Parâmetros para origens RDB (sourceDbType: RDB)
|
Parâmetro |
Descrição |
Obrigatório |
Padrão |
Exemplo |
|
|
Nome da métrica de destino no TSDB. Obrigatório quando |
Obrigatório se |
— |
|
|
|
Defina como |
Sim |
|
|
|
|
Nomes dos campos da tabela de origem no banco de dados relacional. A ordem deve corresponder ao parâmetro |
Sim |
— |
|
|
|
Tipos do TSDB aos quais as colunas de origem serão mapeadas. Valores compatíveis: |
Sim |
— |
|
|
|
Quantidade de entradas de dados a serem gravadas por lote. Deve ser maior que 0. |
Não |
|
|
Erros de gravação e comportamento de nova tentativa
|
Cenário |
Comportamento |
|
Gravação bem-sucedida |
A tarefa segue normalmente. |
|
Falha na gravação com tentativas restantes |
O TSDB Writer tenta novamente até |
|
Falha na gravação após todas as tentativas |
A tarefa é interrompida, independentemente da configuração de |
|
|
Erros individuais de gravação são ignorados e a tarefa continua, exceto se a falha persistir após todas as tentativas. |
Benchmarks de desempenho
Os resultados de teste a seguir demonstram como o throughput escala conforme o número de canais simultâneos.
Conjunto de dados de teste:
Métrica:
mCombinações de tags: 10 zonas x 20 clusters x 100 grupos x 100 aplicativos = 2.000.000 de séries temporais, além de uma tag IP com incremento automático em todas as 2.000.000 de séries temporais
Valor: inteiro aleatório entre 1 e 100
Intervalo de coleta: 10 segundos durante 3 horas
Total de pontos de dados: 3 x 3.600 / 10 x 2.000.000 = 2.160.000.000
Resultados do teste:
|
Canais |
Velocidade (registros/s) |
Tráfego (MB/s) |
|
1 |
129.753 |
15,45 |
|
2 |
284.953 |
33,70 |
|
3 |
385.868 |
45,71 |
Detalhamento das chaves e valores de tag usados no teste:
|
Chave da tag |
Valores da tag |
|
zone |
z1-z10 |
|
cluster |
c1-c20 |
|
group |
g1-g100 |
|
app |
a1-a100 |
|
ip |
ip1-ip2.000.000 |
Use esses resultados para calibrar as configurações de concurrent e batchSize da sua carga de trabalho. Comece definindo batchSize como 256 para obter maior throughput e aumente os canais concurrent caso um único canal não consiga saturar a taxa de transferência desejada. Elevar o batchSize acima do padrão de 100 melhora o throughput, porém aumenta o consumo de memória por tarefa.