broker MQTT 클라이언트 옵션 구성
Important
이 설정을 사용하려면 Broker 리소스를 수정해야 하며 Azure CLI 또는 Azure Portal을 사용하여 초기 배포 시에만 구성할 수 있습니다. 브로커 구성 변경이 필요한 경우 새 배포가 필요합니다. 자세한 내용은 기본 Broker 사용자 지정을 참조하세요.
broker 고급 클라이언트 옵션은 broker가 MQTT 클라이언트와 상호 작용하는 방법을 제어합니다. 연결 중에 broker와 클라이언트 간에 협상된 이러한 설정에는 세션 만료, 메시지 만료, 최대 수신 및 활성 유지가 포함됩니다. Azure IoT Operations와 관련된 유일한 설정은 구독자 큐 제한입니다.
사용 가능한 설정의 전체 목록은 ClientConfig API 참조에서 찾을 수 있습니다.
대부분의 시나리오에서는 기본 클라이언트 설정으로 충분합니다. broker에 대한 기본 클라이언트 설정을 재정의하려면 Broker 리소스의 advanced.clients
섹션을 편집합니다. 현재 이 재정의 --broker-config-file
는 명령을 사용하여 Azure IoT 작업을 배포할 때만 플래그를 az iot ops create
사용하여 지원됩니다.
시작하려면 다음 예제와 같이 JSON 형식의 Broker 구성 파일을 준비합니다.
{
"advanced": {
"clients": {
"maxSessionExpirySeconds": 282277,
"maxMessageExpirySeconds": 1622,
"subscriberQueueLimit": {
"length": 1000,
"strategy": "DropOldest"
},
"maxReceiveMaximum": 15000,
"maxKeepAliveSeconds": 300
}
}
}
그런 다음, 다음 명령(간결성을 위해 생략된 다른 매개 변수)과 같이 플래그가 있는 --broker-config-file
명령을 사용하여 az iot ops create
Azure IoT Operations를 배포합니다.
az iot ops create ... --broker-config-file <FILE>.json
자세한 내용은 고급 MQTT broker 구성 및 Broker 예제에 대한 Azure CLI 지원을 참조하세요.
구독자 큐 제한
MQTT 브로커는 QoS 1 메시지가 배달되기를 기다리는 각 구독자에 대한 큐를 유지합니다. 메시지는 게시자로부터 수신되고 구독자가 PUBACK
메시지를 통해 전달되고 승인되면 제거될 때 이 큐에 추가됩니다. 메시지가 구독자가 승인할 수 있는 것보다 빠르게 도착하거나 구독자가 영구 세션으로 오프라인 상태이면 큐가 커질 수 있습니다.
broker는 이러한 메시지를 디스크에 버퍼링하여 메모리를 저장할 수 있지만 항상 충분하지는 않을 수 있습니다. 디스크 버퍼가 설정되지 않았거나 다른 구독자 때문에 가득 찼을 수 있습니다. 따라서 구독자 큐 제한은 broker가 단일 구독자에 대해 너무 많은 메모리를 사용하지 못하도록 하는 데 도움이 됩니다.
구독자 큐 제한에는 다음 두 가지 설정이 있습니다.
길이: 단일 구독자에 대해 큐에 대기할 수 있는 최대 메시지 수입니다. 큐가 꽉 찼고 새 메시지가 도착하면 broker는 구성된 전략에 따라 메시지를 삭제합니다.
전략: 큐가 가득 찼을 때 사용할 전략입니다. 두 가지 전략은 다음과 같습니다.
없음: 세션이 만료되지 않고 큐가 무기한 증가할 수 있는 경우가 아니면 메시지가 삭제되지 않습니다. 이 옵션은 기본 동작입니다.
DropOldest: 큐에서 가장 오래된 메시지가 삭제됩니다.
이 제한은 진행 중인 큐가 가득 찼기 때문에 패킷 ID가 할당되지 않은 메시지를 보유하는 구독자의 나가는 큐에만 적용됩니다. 이 제한은 대기 중인 큐에 적용되지 않습니다.
백 엔드 파티션당 제한이 적용되므로 broker는 전체 클러스터에서 구독자에 대한 보내는 메시지의 총 수를 보장할 수 없습니다. 예를 들어 길이를 10,000으로 설정해도 구독자가 최대 10,000개의 메시지를 받는 것은 아닙니다. 대신 최대 10,000 * number of partitions * number of backend workers
메시지를 받을 수 있습니다.
느린 구독자
느린 구독자는 들어오는 메시지 속도를 따라갈 수 없는 구독자입니다. 이 문제는 구독자가 메시지를 느리게 처리하거나, 연결이 끊어지거나, 오프라인 상태일 때 발생할 수 있습니다. 구독자 큐 제한을 사용하면 느린 구독자가 너무 많은 메모리를 소비하지 못하도록 방지할 수 있습니다.
메시지 만료
이 설정은 maxMessageExpirySeconds
메시지가 만료되기 전에 큐에 유지할 수 있는 기간을 제어합니다. 메시지가 최대 만료 시간보다 긴 큐에 유지되면 만료된 것으로 표시됩니다. 그러나 만료된 메시지는 큐의 시작 부분에 도달할 때만 삭제됩니다. 이 수동 만료 메커니즘은 이전 메시지가 결국 제거되도록 하여 메모리 사용량을 관리하는 데 도움이 됩니다.
세션 만료
이 설정은 maxSessionExpirySeconds
구독자 큐 제한과 함께 작동하여 메시지가 큐에 무기한 유지되지 않도록 합니다. 세션이 만료되면 해당 세션의 큐에 있는 모든 메시지가 삭제됩니다. 이렇게 하면 결국 전체 큐를 지워 오프라인 구독자가 너무 많은 메모리를 사용하지 못하게 할 수 있습니다.
메시지 만료 및 세션 만료는 느린 구독자 및 오프라인 구독자를 관리하고 효율적인 메모리 사용을 보장하는 데 중요합니다.