참고 사이트
Kafka vs MQTT
MQTT
- pub/sub 메세징 프로토콜의 개방형 표준
- MQTT는 제한된 장치 및 신뢰할 수 없는 네트워크를 포함하여 IoT Use case를 위해 구축되었음
- 그러나 데이터 통합 및 데이터 처리는 X
Apache Kafka
- IoT 플랫폼이 아니고, 이벤트 스트리밍 플랫폼임
- 메세지 저장, 데이터 통합, 스트림 처리를 위한 확장 가능하고 안정적이며 탄력적인 실시간 플랫폼을 제공함
MQTT와 Kafka는 각각 장/단점이 있으며, 서로를 상호보완하며 사용 가능합니다.
MQTT를 언제 사용해야(하지 말아야) 할까요?
MQTT 장점
- 경량 (Lightweight)
- 연결이 좋지 않고(poor connectivity), 대기시간이 높은 시나리오를 위함 (e.g. 모바일 네트워크)
- 높은 확장성과 가용성
- ISO 표준
- 대부분의 IoT 프로토콜
- 모든 인프라 (edge, data center, public cloud) 에 배포 가능
MQTT 단점
- 오직 pub/sub 메세징 처리만 가능하고, 스트리밍 프로세싱이나 데이터 통합 없음
- 비동기 처리 (클라이언트가 오랫동안 offline 상태일 수 있음)
- 이벤트 재처리 없음
Kafka를 언제 사용해야(하지 말아야) 할까요?
Kafka 장점
- Pub/Sub Messaging, Streaming Processing, Data Integration -> 가능하다. (MQTT는 Pub/Sub만 가능하다.)
- 높은 처리량과 고가용성
- 장기 저장 가능
- 이벤트 재처리 가능
- 모든 인프라 (edge, data center, public cloud) 에 배포 가능
Kafka 단점
- 안정적인 네트워크와 우수한 인프라 필요
- keep alive, last will 또는 testment와 같은 IoT 관련 기능이 없음
많은 IoT 사용 사례에서 아키텍처는 두 기술을 결합합니다.
예시
-
MQTT 프록시 + Apache Kafka(MQTT 브로커 없음)
-
Kafka Connect를 사용하는 대신 Confluent MQTT 프록시를 활용할 수 있습니다. MQTT 브로커 없이도 IoT 장치에서 직접 IoT 데이터를 통합할 수 있습니다.
-
이 접근 방식에서는 Kafka Connect(hood에서 Kafka consumer 사용)의 풀 접근 방식을 사용하는 대신 Confluent MQTT 프록시를 통해 Kafka 브로커에 직접 데이터를 푸시합니다.
-
Load Balancer(Confluent REST 프록시와 유사)를 사용하여 MQTT 프록시를 쉽게 확장할 수 있습니다.
-
중간에 추가적인 MQTT Broker가 필요하지 않다는 큰 장점이 있습니다.