Data Integration de DataWorks utilise le plug-in TSDB Writer pour écrire des points de données dans une instance Lindorm TSDB. Cette rubrique décrit le fonctionnement de TSDB Writer, les types de champs pris en charge, les paramètres de configuration et les références de performance.
Versions prises en charge
TSDB Writer prend en charge toutes les versions de Lindorm TSDB ainsi que HiTSDB 2.4.x et versions ultérieures. La compatibilité avec d'autres versions n'est pas garantie.
Limites
TSDB Writer prend en charge l'exécution des tâches via des groupes de ressources Serverless (recommandé). Il prend également en charge les groupes de ressources exclusifs pour Data Integration.
La configuration des tâches avec TSDB Writer est possible uniquement via l'éditeur de code.
Fonctionnement
TSDB Writer se connecte à une instance TSDB à l'aide du client TSDB (hitsdb-client) et écrit les points de données via l'API HTTP. Pour plus de détails sur l'API d'écriture, consultez la référence du SDK.
Types de champs pris en charge
Le comportement de TSDB Writer dépend de la valeur du paramètre sourceDbType :
TSDB— la source est TSDB Reader ou OpenTSDB Reader. TSDB Writer transmet directement les données source sous forme de chaîne JSON.RDB— la source est une base de données relationnelle. TSDB Writer analyse les données comme des enregistrements de base de données relationnelle et mappe chaque colonne vers un type TSDB à l'aide du paramètrecolumnType.
Le tableau suivant présente les valeurs prises en charge pour le paramètre columnType et les types de données TSDB correspondants lorsque le paramètre sourceDbType est défini sur RDB.
| Modèle de données | **Valeur de columnType** |
Type de données |
|---|---|---|
| Tag de données | tag |
String. Un tag décrit une caractéristique de la source de données et ne change généralement pas au fil du temps. |
| Heure de génération des données | timestamp |
Timestamp. Représente le moment où les données ont été générées. Spécifiez cette valeur lors de l'opération d'écriture ou laissez le système la générer automatiquement. |
| Contenu des données | field_string |
String. Un champ décrit une métrique mesurée de la source de données et change généralement au fil du temps. |
| Contenu des données | field_double |
Numeric. Un champ décrit une métrique mesurée de la source de données et change généralement au fil du temps. |
| Contenu des données | field_boolean |
Boolean. Un champ décrit une métrique mesurée de la source de données et change généralement au fil du temps. |
Configuration d'une tâche de synchronisation par lots
Configurez les tâches TSDB Writer uniquement via l'éditeur de code. Pour la procédure de configuration générale, consultez la section Configurer une tâche dans l'éditeur de code.
L'annexe ci-dessous fournit des modèles de script prêts à l'emploi et une description complète des paramètres.
Annexe : Modèles de script et description des paramètres
Modèles de script
Les trois modèles ci-dessous utilisent le format de script unifié requis par l'éditeur de code. Remplacez les valeurs d'espace réservé avant l'exécution. Pour la procédure de configuration générale, consultez la section Configurer une tâche dans l'éditeur de code.
De RDB vers TSDB (recommandé)
Utilisez ce modèle lorsque la source est une base de données relationnelle telle que 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"
}
]
}
}
D'OpenTSDB vers TSDB
Utilisez ce modèle lorsque la source prend en charge le protocole OpenTSDB (par exemple, 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"
}
]
}
}
De RDB vers TSDB utilisant le protocole à valeur unique OpenTSDB (non recommandé)
N'utilisez ce modèle que si vous devez écrire des données en utilisant le protocole à valeur unique OpenTSDB. Pour les nouvelles charges de travail, privilégiez le modèle « De RDB vers TSDB » présenté ci-dessus.
{
"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"
}
]
}
}
En mode à valeur unique, le nom de la métrique de destination est dérivé du nom de la colonne mappée à un champ. Sur la base de la configuration ci-dessus, une ligne de données relationnelle est écrite dans trois métriques :field_metric_1,field_metric_2, etfield_metric_3.
Paramètres de Writer
Les paramètres sont regroupés selon le type de source auquel ils s'appliquent.
Paramètres communs
Ces paramètres s'appliquent à toutes les valeurs du paramètre sourceDbType.
| Paramètre | Description | Obligatoire | Valeur par défaut | Exemple |
|---|---|---|---|---|
sourceDbType |
Type de source. TSDB inclut OpenTSDB, Prometheus et TimeScale. RDB inclut MySQL, Oracle, PostgreSQL et DRDS. |
Non | TSDB |
RDB |
endpoint |
Endpoint HTTP de l'instance TSDB. Obtenez cette valeur depuis la console du produit. Format : http://IP:Port. |
Oui | — | http://192.168.1.1:8242 |
database |
Base de données TSDB cible. Créez la base de données dans TSDB avant d'exécuter la tâche. | Non | default |
my_database |
username |
Nom d'utilisateur de la base de données TSDB. Requis uniquement si l'authentification est activée. | Non | — | admin |
batchSize |
Nombre d'entrées de données à écrire par lot. Des valeurs plus élevées augmentent le débit mais nécessitent davantage de mémoire. Doit être supérieur à 0. | Non | 100 |
256 |
Paramètres pour les sources TSDB (sourceDbType: TSDB)
| Paramètre | Description | Obligatoire | Valeur par défaut | Exemple |
|---|---|---|---|---|
maxRetryTime |
Nombre de tentatives après un échec d'écriture. Doit être supérieur à 1. | Non | 3 |
5 |
ignoreWriteError |
Si la valeur est true, les erreurs d'écriture sont ignorées et la tâche se poursuit. Si l'écriture échoue après toutes les tentatives, la tâche s'arrête indépendamment de ce paramètre. |
Non | false |
false |
Paramètres pour les sources RDB (sourceDbType: RDB)
| Paramètre | Description | Obligatoire | Valeur par défaut | Exemple |
|---|---|---|---|---|
table |
Nom de la métrique cible dans TSDB. Obligatoire lorsque le paramètre multiField est défini sur true. Lorsque le paramètre multiField est défini sur false, spécifiez le nom de la métrique dans le champ column à la place. |
Obligatoire si multiField est true |
— | testmetric |
multiField |
Définissez ce paramètre sur true pour écrire plusieurs champs dans TSDB en un seul appel API HTTP. La version actuelle de TSDB requiert la valeur true pour les écritures multivalues. Pour interroger les données écrites à l'aide de Lindorm TSDB SQL, créez préalablement la table dans TSDB ; sinon, utilisez l'API HTTP TSDB pour les requêtes. Consultez la section Interroger des données multivalues. |
Oui | false |
true |
column |
Noms des champs de la table de base de données relationnelle source. L'ordre doit correspondre au paramètre column du plug-in Reader. |
Oui | — | ["tag1", "tag2", "field1", "timestamp"] |
columnType |
Types TSDB vers lesquels les colonnes source sont mappées. Valeurs prises en charge : tag, timestamp, field_string, field_double, field_boolean. L'ordre doit correspondre à celui du champ column. |
Oui | — | ["tag", "tag", "field_double", "timestamp"] |
batchSize |
Nombre d'entrées de données à écrire par lot. Doit être supérieur à 0. | Non | 100 |
256 |
Erreurs d'écriture et comportement de nouvelle tentative
| Scénario | Comportement |
|---|---|
| L'écriture réussit | La tâche se poursuit normalement. |
| Échec de l'écriture, tentatives restantes | TSDB Writer effectue jusqu'à maxRetryTime nouvelles tentatives (valeur par défaut : 3). S'applique uniquement lorsque le paramètre sourceDbType est défini sur TSDB. |
| Échec de l'écriture après toutes les tentatives | La tâche s'arrête, indépendamment du paramètre ignoreWriteError. |
Le paramètre ignoreWriteError est défini sur true |
Les erreurs d'écriture individuelles sont ignorées et la tâche se poursuit, sauf si l'échec persiste après toutes les tentatives. |
Références de performance
Les résultats de test suivants illustrent l'évolution du débit en fonction du nombre de canaux simultanés.
Jeu de données de test :
Métrique :
mCombinaisons de tags : 10 zones x 20 clusters x 100 groupes x 100 applications = 2 000 000 séries temporelles, plus un tag IP incrémenté automatiquement sur l'ensemble des 2 000 000 de séries temporelles
Valeur : entier aléatoire compris entre 1 et 100
Intervalle de collecte : 10 secondes sur une durée de 3 heures
Total des points de données : 3 x 3 600 / 10 x 2 000 000 = 2 160 000 000
Résultats des tests :
| Canaux | Débit (enregistrements/s) | Trafic (Mo/s) |
|---|---|---|
| 1 | 129 753 | 15,45 |
| 2 | 284 953 | 33,70 |
| 3 | 385 868 | 45,71 |
Détail des paires clé-valeur de tags utilisées lors du test :
| Clé de tag | Valeurs de tag |
|---|---|
| zone | z1-z10 |
| cluster | c1-c20 |
| group | g1-g100 |
| app | a1-a100 |
| ip | ip1-ip2,000,000 |
Utilisez ces résultats pour calibrer les paramètres concurrent et batchSize adaptés à votre charge de travail. Commencez par définir le paramètre batchSize sur 256 pour un débit plus élevé, et augmentez le nombre de canaux concurrent si un seul canal ne permet pas d'atteindre votre taux de transfert cible. L'augmentation de la valeur batchSize au-delà de la valeur par défaut de 100 améliore le débit, mais accroît l'utilisation de la mémoire par tâche.