기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
InfluxDB
디바이스 원격 측정에서 운영 추세를 쿼리하거나 시계열 데이터를 실시간으로 모니터링하려면이 작업을 선택합니다. 클라이언트 측 또는 서버 측 일괄 처리를 사용하여 하나의 쓰기 요청에서 여러 지점을 결합할 수 있습니다.는 각 메시지를 InfluxDB 라인 프로토콜로 AWS IoT Core 변환하고 지정된 데이터베이스 및 테이블에 씁니다. 형식에 대한 자세한 내용은 InfluxData 설명서의 InfluxDB 라인 프로토콜을
사전 조건
이 규칙 작업에는 다음과 같은 사전 조건이 있습니다.
-
InfluxDB 작업 대상 - InfluxDB 인스턴스의 엔드포인트, 버전 및 자격 증명을 지정하는 InfluxDB 작업 대상을 생성합니다.는 트래픽을 보내기 전에 엔드포인트 소유권을 AWS IoT Core 검증합니다. InfluxDB 작업 대상을(를) 참조하세요.
-
가 InfluxDB 데이터베이스에 쓰고 InfluxDB 자격 증명을 저장하는 보안 암호에 대해
GetSecretValue작업을 수행하도록 맡을 AWS IoT 수 있는 IAM 역할입니다. 자세한 내용은 AWS IoT 규칙에 필요한 액세스 권한 부여 단원을 참조하십시오. -
에 저장된 InfluxDB 자격 증명 AWS Secrets Manager - InfluxDB V3의 경우 InfluxDB 클러스터를 생성할 때 Amazon Timestream for InfluxDB가 Secrets Manager 보안 암호를 자동으로 프로비저닝합니다. 보안 암호에는 클러스터 자격 증명이 포함됩니다. InfluxDB V2의 경우 InfluxDB 인스턴스에서 모든 액세스 또는 사용자 지정 API 토큰을 생성합니다. 토큰 값을에 일반 텍스트 보안 암호로 저장합니다 AWS Secrets Manager. 토큰 생성에 대한 자세한 내용은 InfluxData 설명서의 토큰 생성을
참조하세요. 런타임 시 규칙 작업은 InfluxDB 엔드포인트 secretsmanager:GetSecretValue에 인증하기 전에를 호출하여 이러한 자격 증명을 검색합니다. -
메시지 페이로드의 타임스탬프 - 메시지 페이로드의 각 객체에는 Unix epoch 값이 정수인 라는 키
timestamp(대소문자 구분)가 포함되어야 합니다. 타임스탬프 단위는 IoT 규칙 정의에서도 설정할 수 있습니다.는 InfluxDB가 오류 작업으로 사용되는 경우를 제외하고 InfluxDB 작업에 대한 타임스탬프를 생성하지 AWS IoT Core 않습니다.참고
ts또는와 같은 별칭은 대신 사용할 수time없습니다timestamp. -
HTTPS 연결 - InfluxDB 인스턴스는 HTTPS를 AWS IoT Core 통해에서 연결할 수 있어야 합니다. 지원되는 아웃바운드 포트는 443, 8443, 8086(InfluxDB V2의 기본 포트) 및 8181(InfluxDB V3의 기본 포트)입니다.
-
JSON 형식 페이로드 - InfluxDB 작업은 JSON 페이로드만 처리합니다. 디바이스가 바이너리 또는 Protobuf 데이터를 게시하는 경우 작업을 실행하기 전에 규칙 SQL의 decode() 함수를 사용하여 JSON으로 변환합니다.
InfluxDB 작업 대상
InfluxDB 규칙 작업을 사용하려면 먼저 InfluxDB 작업 대상을 생성해야 합니다. 대상은 InfluxDB 인스턴스의 연결 파라미터를 정의 AWS IoT Core 한 다음 엔드포인트 소유권을 검증합니다.
대상 생성
CreateTopicRuleDestination API를 사용하여 InfluxDB 대상을 생성합니다.
{ "destinationConfiguration": { "influxDBConfiguration": { "endpoint": "https://my-instance.timestream-influxdb.us-west-2.amazonaws.com:8086", "influxDBVersion": "V2", "secretId": "arn:aws:secretsmanager:us-west-2:111122223333:secret:my-influxdb-credentials-AbCdEf" } } }
대상 파라미터
| 파라미터 | 유형 | 필수 | 설명 |
|---|---|---|---|
endpoint |
문자열 | 예 | InfluxDB 인스턴스의 HTTPS 엔드포인트 URL입니다. HTTP는 지원되지 않습니다. 지원되는 포트: 443, 8086, 8181, 8443. |
influxDBVersion |
문자열 | 예 | InfluxDB 버전입니다. 유효한 값: V2, V3. |
secretId |
문자열 | 예 | InfluxDB 토큰이 포함된 AWS Secrets Manager 보안 암호의 이름 또는 ARN입니다. |
secretType |
문자열 | No | 보안 암호 값의 유형입니다. 유효한 값: SecretString, SecretBinary. |
secretKey |
문자열 | No | 인증 토큰이 포함된 보안 암호 JSON 내의 키입니다. 보안 암호가 여러 키가 있는 JSON 객체인 경우에만 필요합니다. |
엔드포인트 소유권 검증
InfluxDB 작업 대상을 생성할 때는 제공한 자격 증명을 사용하여 InfluxDB API에 대해 인증하여 엔드포인트 소유권을 AWS IoT Core 검증합니다.
-
InfluxDB V2:
/api/v2/me엔드포인트를 AWS IoT Core 호출합니다. -
InfluxDB V3:목록 데이터베이스 엔드포인트()를 AWS IoT Core 호출합니다
GET /api/v3/configure/database.
응답 성공(2xx)은 대상 상태를 로 설정합니다ENABLED. 실패 시 상태를 로 AWS IoT Core 설정합니다ERROR. 검증을 다시 시도하려면 상태가 UpdateTopicRuleDestination로 설정된 상태에서를 호출합니다IN_PROGRESS.
InfluxDB 용어 매핑
다음 용어는 InfluxDB V2와 V3 간에 다릅니다.
| AWS IoT Core 파라미터 | InfluxDB V2 용어 | InfluxDB V3 용어 |
|---|---|---|
databaseName |
버킷 | Database |
tableName |
측정 | 표 |
참고
Amazon Timestream 규칙 작업에서 마이그레이션하는 경우 dimensions 파라미터는 InfluxDB 작업의 태그에 매핑되고 쿼리 결과 속성은 필드에 매핑됩니다.
파라미터
InfluxDB 작업을 사용하여 AWS IoT 규칙을 생성할 때 다음 정보를 지정해야 합니다.
destinationArn-
InfluxDB 작업 대상의 ARN입니다. InfluxDB 작업 대상을(를) 참조하세요. 대체 템플릿 지원: 아니오
roleArn-
Secrets Manager 보안 암호에 액세스할 수 있는 AWS IoT 권한을 부여하는 IAM 역할의 ARN입니다. 사전 조건을(를) 참조하세요. 대체 템플릿 지원: 아니오
databaseName-
레코드를 쓸 InfluxDB 데이터베이스(InfluxDB v2의 버킷 또는 InfluxDB v3의 데이터베이스라고 함)의 이름입니다. 대체 템플릿 지원: 아니요. 데이터를 다른 데이터베이스로 라우팅하려면 각 데이터베이스에 대해 별도의 규칙 작업을 생성합니다.
tableName-
레코드를 쓸 테이블의 이름(InfluxDB v2의 측정 또는 InfluxDB v3의 테이블이라고 함)입니다. 대체 템플릿 지원: 예.
organization-
InfluxDB 조직 이름입니다. InfluxDB v2에 필요합니다. InfluxDB v3에이 파라미터를 포함하면 무시됩니다. 대체 템플릿 지원: 아니요.
tags-
맵으로 지정된 각 지점의 메타데이터입니다. 각 맵 키는 태그 이름이고 각 맵 값은 해당 태그 값입니다. 태그는 쿼리 성능을 위해 인덱싱됩니다.
-
InfluxDB V3에서 각 태그 이름은 테이블 내에서 고유해야 하며 필드 이름을 복제할 수 없습니다.
-
태그 값은 메시지 범위 및 요소별 대체 템플릿을 지원합니다.
-
timestampUnit-
페이로드의 타임스탬프 값의 정밀도입니다. 유효한 값:
s(초) |ms(밀리초) |us(마이크로초) |ns(나노초). 기본값:ms. 대체 템플릿 지원: 아니요. batchConfig-
(선택 사항) 서버 측 일괄 처리 구성. 자세한 내용은 배칭 단원을 참조하십시오.
-
maxBatchSize- 각 배치의 최대 포인트 수입니다. 유효한 범위: 1~500. -
maxBatchOpenMs- 배치를 열린 상태로 유지하는 데 걸리는 밀리초 단위의 최대 시간입니다. 유효한 범위: 5~1,000. -
maxBatchSizeBytes- 플러시 전 바이트 단위의 최대 총 크기입니다. 유효한 범위: 100~131,072. -
batchAcrossTopics– 부울입니다.true인 경우 배치에는 다양한 주제에 대한 메시지의 포인트가 포함됩니다. 기본값:false.
-
배칭
InfluxDB 작업은 두 가지 일괄 처리 모드를 지원합니다.
클라이언트 측 일괄 처리
IoT 디바이스는 시계열 데이터를 JSON 배열로 일괄 처리하여 단일 MQTT 메시지로 게시합니다. 클라이언트 측 일괄 처리를 사용하면 각 배열 요소가 단일 쓰기 요청에서 하나의 라인 프로토콜 포인트가 됩니다. 추가 구성은 필요하지 않습니다.
서버 측 일괄 처리
InfluxDB에 메시지를 쓰기 전에 서버 측 일괄 처리를 사용하여 개별 메시지를 그룹화합니다. batchConfig 파라미터를 사용하여 서버 측 일괄 처리를 구성합니다. 구성된 제한(maxBatchSize, maxBatchOpenMs또는 maxBatchSizeBytes)에 먼저 도달하면 배치가 플러시됩니다.
참고
서버 측 일괄 처리와 클라이언트 측 일괄 처리(JSON 배열 페이로드)를 동시에 구성할 수 있습니다.
InfluxDB 작업은 아웃바운드 페이로드 크기를 기준으로 5KiB 단위로 측정됩니다. 라인 프로토콜 변환 실패도 측정됩니다.
배열 페이로드를 위한 요소별 템플릿
IoT 디바이스가 배치화된 시계열 데이터를 JSON 배열로 전송할 때 “요소별 대체 템플릿”을 사용하여 각 개별 배열 요소의 값을 확인할 수 있습니다. 이렇게 하면 각 데이터 포인트가 다른 테이블로 라우팅되거나 요소별 태그가 적용됩니다. 자세한 내용은 요소별 템플릿을 참조하세요.
두 대체 템플릿의 구문
-
${expression}- 수신 디바이스 메시지에 대해 메시지 범위에서 해결합니다. 각 메시지에 대해 한 번씩 평가되며, 배열의 모든 지점에 동일한 값이 적용됩니다. -
@{expression}- 규칙의 SQL SELECT 문에서 생성된 페이로드의 개별 요소에 대해 요소 범위에서 해결합니다. 각 지점이 다른 값을 가져올 수 있도록 각 배열 요소에 대해 재평가됩니다. 자세한 내용은@{expression}참조를 참조하세요.
tableName 및 태그 값@{...}에서를 사용하여 각 배열 요소에 대한 표현식을 개별적으로 확인합니다.
예제
다음 디바이스 페이로드(JSON 배열)가 주어짐:
[ {"measurement_type": "temperature", "room": "kitchen", "timestamp": 1700000000000, "value": 23.5}, {"measurement_type": "humidity", "room": "bedroom", "timestamp": 1700000001000, "value": 60.1} ]
그리고 다음 작업 구성:
{ "influxDB": { "destinationArn": "arn:aws:iot:us-west-2:111122223333:ruledestination/influxdb/abc123", "roleArn": "arn:aws:iam::111122223333:role/iot-influxdb-role", "databaseName": "sensor_data", "tableName": "@{measurement_type}", "tags": { "room": "@{room}" }, "timestampUnit": "ms" } }
결과 라인 프로토콜 출력에는 다음 두 점이 포함됩니다.
temperature,room=kitchen value=23.5 1700000000000 humidity,room=bedroom value=60.1 1700000001000
참고
에서 참조하는 필드는 라인 프로토콜 필드 세트에서 @{...} 제거되므로 필드로도 표시되지 않습니다. 이 예제에서 measurement_type는 테이블 이름이 되고 태그room가 되므로 필드 세트에 둘 다 표시되지 않습니다.는 유일한 필드value입니다.
제한 사항
-
@{...}는 InfluxDB 작업 구성(tableName및 태그 값)에서만 지원됩니다. -
규칙 SQL(SELECT/WHERE 절), 오류 작업 정의 또는 기타 규칙 작업
@{...}에서는를 사용할 수 없습니다. -
내부에서는 필드 참조만 지원됩니다
@{...}. 함수는 지원되지 않습니다. -
각 값은 최대 하나의
@{...}마커를 지원합니다. 단일 값의 여러 마커는 API 예외를 생성합니다. -
동일한 값으로
${...}및@{...}를 혼합할 수 없습니다. 혼합은 API 예외를 생성합니다. -
단일 JSON 객체는 단일 요소 배열로 처리됩니다.
InfluxDB 레코드 콘텐츠
SQL 후 쿼리 결과의 각 레코드에 대해 결과 InfluxDB 라인 프로토콜 포인트에는 다음 구성 요소가 포함됩니다.
| 구성 요소 | 소스 |
|---|---|
| 표 | tableName 파라미터 값 |
| Tags | tags 파라미터의 키-값 페어 |
| 필드 | 태그, 테이블 이름 또는 타임스탬프로 사용되지 않는 나머지 페이로드 속성 |
| 타임스탬프 | 페이로드에서 추출된 timestamp 키 |
데이터 유형 변환
AWS IoT Core 는 다음과 같이 JSON 값을 InfluxDB 라인 프로토콜 유형으로 변환합니다.
| JSON 유형 | 라인 프로토콜 유형 | 예제 |
|---|---|---|
| 정수(-263~263-1) | 부호 있는 정수(i 접미사) |
42 → 42i |
| 정수(263~264−1) | 부호 없는 정수(u 접미사) |
9223372036854775808 →
9223372036854775808u |
| 외부 정수(-263~264-1) | 거부됨(오류 작업이 트리거됨) | — |
| 부동 소수점 | IEEE-754 64비트 부동 소수점 | 23.5 → 23.5 |
| 부울 | t 또는 f |
true → t |
| 문자열 | 따옴표로 묶인 문자열 | "active" →
"active" |
| Null | 생략됨(작성되지 않음) | — |
| 객체 또는 배열 | 압축된 JSON 문자열(공백 제거됨) | {"a":1} →
"{\"a\":1}" |
이름 지정 제한
-
필드 키와 태그 키는 비워 두거나 밑줄()로 시작할 수 없습니다
_. -
InfluxDB V3에서 테이블 이름과 태그 키는 문자 또는 숫자로 시작해야 합니다.
-
필드 키, 태그 키 및 태그 값의 쉼표, 등호 및 공백은 자동으로 이스케이프 처리됩니다.
-
측정: 쉼표와 공백이 자동으로 이스케이프됩니다.
-
태그는 수집 성능을 개선하기 위해 직렬화 전에 키별로 알파벳순으로 정렬됩니다.
-
빈 태그 값은 출력에서 생략됩니다.
예약 키
라인 프로토콜 변환 중에 필드 세트에서 다음 페이로드 키가 제거됩니다.
-
timestamp- 포인트 타임스탬프로 사용됩니다. -
에서 참조하는 키
tableName(${...}또는를 통해@{...}) - 테이블 이름으로 사용됩니다. -
태그 값에서 참조하는 키(
${...}또는를 통해@{...}) - 태그 값으로 사용됩니다.
오류 작업
InfluxDB 작업이 실패하면 구성된 오류 작업이 트리거됩니다.
InfluxDB를 오류 작업으로 사용
InfluxDB 작업을 모든 규칙에 대한 오류 작업으로 구성할 수 있습니다. 전체 페이로드는 하나의 레코드tableName로 단일에 기록됩니다. 메시지 범위 대체 템플릿(${...})은 오류 작업의 tableName 및에서 지원됩니다tags.
오류 작업 출력
오류 작업이 트리거되면 출력 페이로드에는 ruleName, , cloudwatchTraceId, topicclientId, sourceIp, base64OriginalPayload (Base64 인코딩 원본 메시지) 및 각 항목에 failedAction, failedResource및가 있는 failures 배열이 포함됩니다errorMessage.
서버 측 일괄 처리를 사용하면 페이로드가 각 개별 인바운드 MQTT 메시지에 대해 하나의 항목payloadsWithMetadata과 함께를 사용합니다. 각 실패 값은 해당 메시지 항목의 id 값을 affectedIds 나타내며 포인트 인덱스가 아닙니다. 클라이언트 측 JSON 배열은 여러 InfluxDB 포인트를 생성하더라도 하나의 인바운드 메시지입니다. 전체 페이로드 형식은 섹션을 참조하세요일괄 처리를 위한 오류 작업.
| 장애 시나리오 | 설명 |
|---|---|
| 대상 비활성화됨 또는 오류 | InfluxDB 작업 대상이 활성화되지 않았습니다. 엔드포인트 소유권 검증이 성공했는지 확인합니다. |
| 잘못된 대상 ARN | 지정된 대상이 존재하지 않습니다. |
| 잘못된 역할 ARN | IAM 역할이 없거나 권한이 없습니다. |
| 보안 암호 검색 실패 | 보안 암호 또는 구성된 secretKey이 존재하지 않거나 규칙 작업 역할이 보안 암호를 검색하거나 해독할 수 없습니다. |
| 타임스탬프 누락 | 페이로드에는 timestamp 키가 포함되어 있지 않습니다. 페이로드의 각 객체에는 Unix epoch 값이 정수인 timestamp 필드가 포함되어야 합니다. |
| 잘못된 타임스탬프 값 | 타임스탬프 값은 정수가 아닙니다(예: 문자열, 부동 소수점 또는 ISO-8601 날짜). 값은에 지정된 단위의 정수 Unix epoch여야 합니다timestampUnit. |
| 잘못된 페이로드(필드 없음) | 예약된 키를 제거한 후 페이로드에 라인 프로토콜에 유효한 필드가 없습니다. |
| 잘못된 필드 키 | 필드 키가 비어 있거나 로 시작합니다_. |
| 클라이언트 배치에 잘못된 점이 포함되어 있습니다. | JSON 배열의 하나 이상의 요소가 라인 프로토콜 검증에 실패했습니다. |
| 태그 + 필드가 열 제한을 초과함 | 결합된 태그와 필드 키가 최대 열 수(250)를 초과합니다. |
| 연결 실패 | AWS IoT Core 가 InfluxDB 엔드포인트에 연결할 수 없습니다. |
| 인증 실패 | InfluxDB 토큰이 유효하지 않거나 만료되었습니다. 에서 보안 암호를 업데이트합니다 AWS Secrets Manager. |
| 리소스를 찾을 수 없음 | 지정된 데이터베이스, 테이블 또는 조직이 InfluxDB에 존재하지 않습니다. |
| 필드 유형 충돌 | 하나 이상의 필드가 기존 스키마와 충돌합니다. 전체 배치 쓰기가 실패합니다. |
| InfluxDB 서버 오류 | InfluxDB에서 내부 오류가 발생했습니다. |
| InfluxDB 서비스 사용 불가 | InfluxDB를 일시적으로 사용할 수 없습니다. 규칙 엔진은 지수 백오프를 사용하여 재시도합니다. |
중요
배치의 어느 지점에서든 필드 유형이 충돌하면 전체 배치 쓰기가 실패합니다. InfluxDB는 포인트를 부분적으로 커밋하지 않습니다. 모든 포인트가 성공하거나 전체 쓰기가 거부됩니다.
재시도 가능한 오류(503)는 지수 백오프로 재시도됩니다. HTTP 401 응답의 경우는에서 토큰을 AWS IoT Core 다시 로드 AWS Secrets Manager 하고 요청을 한 번 재시도합니다. 재시도할 수 없는 오류(404, 422)는 오류 작업을 즉시 트리거합니다. 재시도 제한은 AWS IoT Core 서비스 할당량을 참조하세요.
예제
InfluxDB 규칙 작업
{ "topicRulePayload": { "sql": "SELECT * FROM 'devices/+/telemetry'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "influxDB": { "destinationArn": "arn:aws:iot:us-west-2:111122223333:ruledestination/influxdb/a1b2c3d4", "roleArn": "arn:aws:iam::111122223333:role/iot-influxdb-role", "organization": "my-org", "databaseName": "sensor_data", "tableName": "device_metrics", "tags": { "device_id": "${clientid()}", "location": "building-a" }, "timestampUnit": "ms" } } ] } }
샘플 페이로드:
{ "timestamp": 1700000000000, "temperature": 23.5, "humidity": 60.1, "pressure": 1013.25, "battery_level": 87 }
결과 행 프로토콜:
device_metrics,device_id=myDevice123,location=building-a temperature=23.5,humidity=60.1,pressure=1013.25,battery_level=87i 1700000000000
출력의 필드 순서는 다를 수 있습니다. 필드는 알파벳순으로 정렬되지 않습니다.
요소별 템플릿을 사용한 클라이언트 배치 배열 페이로드
{ "influxDB": { "destinationArn": "arn:aws:iot:us-west-2:111122223333:ruledestination/influxdb/a1b2c3d4", "roleArn": "arn:aws:iam::111122223333:role/iot-influxdb-role", "organization": "my-org", "databaseName": "sensor_data", "tableName": "@{measurement_type}", "tags": { "sensor_id": "@{sensor_id}", "location": "${topic(2)}" }, "timestampUnit": "ns" } }
샘플 페이로드(에 게시됨devices/floor3/telemetry):
[ {"measurement_type": "temperature", "sensor_id": "sensor-42", "timestamp": 1700000000000000000, "value": 23.5}, {"measurement_type": "humidity", "sensor_id": "sensor-42", "timestamp": 1700000001000000000, "value": 60.1}, {"measurement_type": "pressure", "sensor_id": "sensor-43", "timestamp": 1700000002000000000, "value": 1013.25} ]
결과 행 프로토콜:
temperature,location=floor3,sensor_id=sensor-42 value=23.5 1700000000000000000 humidity,location=floor3,sensor_id=sensor-42 value=60.1 1700000001000000000 pressure,location=floor3,sensor_id=sensor-43 value=1013.25 1700000002000000000
InfluxDB를 사용한 서버 측 일괄 처리
InfluxDB 작업에 서버 측 일괄 처리를 추가하려면 작업 구성batchConfig에를 포함합니다.
"batchConfig": { "maxBatchSize": 50, "maxBatchOpenMs": 1000, "maxBatchSizeBytes": 65536, "batchAcrossTopics": false }
규칙 작업 역할에 대한 IAM 정책
신뢰 정책:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"Service": "iot.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
권한 정책:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:us-west-2:111122223333:secret:my-influxdb-secret-a1b2c3" } ] }
클라이언트 측 및 서버 측 일괄 처리 결합(포인트 재정렬)
클라이언트 측 일괄 처리(JSON 배열 페이로드)와 서버 측 일괄 처리()를 모두 활성화하면 서버 측 일괄 처리가 클라이언트 측 일괄 처리 페이로드에서 지점을 재정렬할 수 batchConfig있습니다. 규칙 엔진은 여러 수신 메시지의 포인트를 단일 서버 측 배치로 누적합니다. 메시지는 서로 다른 디바이스 또는 주제에서 비동기적으로 도착하기 때문에 원래 클라이언트 페이로드 내에서 정렬된 포인트는 최종 쓰기 시 다른 메시지의 포인트와 인터리브될 수 있습니다.
작업 구성:
{ "influxDB": { "destinationArn": "arn:aws:iot:us-west-2:111122223333:ruledestination/influxdb/abc123", "roleArn": "arn:aws:iam::111122223333:role/iot-influxdb-role", "databaseName": "sensor_data", "tableName": "@{measurement_type}", "tags": { "device_id": "${topic(2)}", "floor": "@{floor}" }, "timestampUnit": "ms", "batchConfig": { "maxBatchSize": 100, "maxBatchOpenMs": 500, "maxBatchSizeBytes": 65536, "batchAcrossTopics": true } } }
디바이스 A는 시간 Tdevices/deviceA/telemetry에에 게시합니다.
[ {"measurement_type": "temperature", "floor": "1", "timestamp": 1700000000000, "value": 22.1}, {"measurement_type": "temperature", "floor": "2", "timestamp": 1700000000100, "value": 23.4}, {"measurement_type": "humidity", "floor": "1", "timestamp": 1700000000200, "value": 55.0} ]
디바이스 B는 T+10ms devices/deviceB/telemetry 시점에에 게시합니다.
[ {"measurement_type": "temperature", "floor": "3", "timestamp": 1700000000050, "value": 21.8}, {"measurement_type": "humidity", "floor": "3", "timestamp": 1700000000150, "value": 62.3} ]
두 메시지 모두 500ms 배치 기간(maxBatchOpenMs) 내에 도착하므로 규칙 엔진은 5개 지점을 모두 단일 서버 측 배치로 결합합니다.
결과 라인 프로토콜(서버 측 배치 쓰기):
temperature,device_id=deviceB,floor=3 value=21.8 1700000000050 temperature,device_id=deviceA,floor=1 value=22.1 1700000000000 temperature,device_id=deviceA,floor=2 value=23.4 1700000000100 humidity,device_id=deviceB,floor=3 value=62.3 1700000000150 humidity,device_id=deviceA,floor=1 value=55.0 1700000000200
포인트는 더 이상 각 클라이언트 페이로드에 표시된 순서대로 표시되지 않습니다. 디바이스 A의 세 지점(타임스탬프 1700000000000, 1700000000100, 1700000000200)은 디바이스 B의 두 지점(타임스탬프 1700000000050, 1700000000150)과 인터리브됩니다. 서버 측 배치는 각 메시지 내에서 원래 순서를 보장하지 않습니다. InfluxDB는 타임스탬프 필드를 사용하여 타임라인에 각 점을 배치하므로 재정렬해도 쿼리 정확성에 영향을 주지 않습니다. 그러나 애플리케이션이 쓰기 순서 의미 체계를 사용하는 경우(예: 필드 유형 충돌 또는 동일한 밀리초 내의 last-write-wins스 중복 제거 처리) 효과적인 쓰기 순서는 게시 순서와 다를 수 있습니다.