이클립스 호노는 수많은 이기종 디바이스를 (클라우드) 백엔드에 연결하는 오픈소스 프로젝트입니다. 호노는 디바이스 간, 그리고 비즈니스 애플리케이션 간 균일한 통신을 가능케 하는 서비스 인터페이스를 정의합니다. 디바이스는 크게 다른 프로토콜을 사용할 수 있습니다. 이 프로젝트는 꽤 오랫동안 존재해 왔으며, 수년간 보쉬 IoT 디바이스 관리에서 성공적으로 사용되어 왔습니다. 새로운 점은 이제 아파치 카프카를 메시징용으로 지원한다는 것입니다. 이로 인한 이점과 호노 사용 변화를 이 기사에서 소개합니다.
디바이스에서 오는 데이터는 호노에서 프로토콜 어댑터(예: MQTT, HTTP, CoAP용)에 의해 균일한 메시지 포맷으로 변환되어 메시징 시스템으로 전달됩니다. 비즈니스 애플리케이션은 이 메시지들—텔레메트리 메시지 또는 이벤트—를 메시징 시스템에서 직접 읽습니다(또한 명령 및 제어를 사용해 디바이스에 메시지를 보내고 응답을 받을 수도 있습니다). 메시징은 호노의 일부가 아니며 외부에서 제공되어야 하는데, 지금까지 AMQP 1.0 프로토콜이 사용되었습니다.
버전 1.7부터 호노는 아파치 카프카를 메시징용 기술 프리뷰로 지원합니다. 호노의 핵심 기능은 메시징 시스템으로 메시지를 주고받기 위한 API의 정의와 구현입니다. API 정의가 메시징에 기반하고 그 특성에 직접 의존하므로, 새로운 메시징 시스템 지원은 호노에 근본적 혁신입니다. 호노의 모든 메시징 API(텔레메트리, 이벤트, 명령 및 제어)에 대해 카프카 기반 새 사양이 만들어졌으며, 프로토콜 어댑터 쪽과 비즈니스 애플리케이션 쪽 모두에 적용됩니다. AMQP 기반 API와 가능한 한 유사하게 동작하도록 주의했습니다.
이점
아파치 카프카는 매우 높은 처리량을 위해 설계된 분산 이벤트 스트리밍 플랫폼으로, 메시지 순서에 대한 특정 보장을 제공합니다. 여러 이유로 호노의 메시징 요구사항에 매우 적합합니다. 주요 이점은:
확장성: 여러 카프카 서버가 클러스터로 동시에 운영되며 필요에 따라 확장 가능. 카프카는 많은 프로세스가 동시에 데이터를 읽고 쓰도록 최적화됨. AMQP 1.0에서도 여러 프로세스가 동일 주소에서 병렬로 메시지를 소비할 수 있지만, 그러면 순서를 잃습니다.
메시지 순서 보장: 카프카의 핵심 기능 중 하나는 파티션 키를 통한 데이터 파티셔닝으로, 순서가 유지되어야 할 데이터와 병렬 처리 가능한 데이터를 선택할 수 있습니다. 호노에서 이를 통해 한 디바이스의 모든 이벤트가 비즈니스 애플리케이션에 올바른 순서로 제공되게 할 수 있습니다. 디바이스의 텔레메트리 데이터는 병렬 처리 가능하며 순서도 보장됩니다. 다른 모든 디바이스의 메시지는 완전히 독립적으로, 심지어 비즈니스 애플리케이션의 여러 인스턴스가 동시에 사용되더라도 병렬 소비 가능.
광범위한 채택: 카프카는 많은 기업에서 사용되며 여러 기술이 지원. 여러 회사가 다양한 클라우드 플랫폼에서 예약 가능한 카프카 서비스를 제공. 이로써 호노에 전문적으로 운영되는 메시징 시스템을 쉽게 제공할 수 있습니다. 벤더 락인도 회피 가능.
변화
AMQP 1.0은 피어 간 연결로 메시지를 교환하는 통신 프로토콜입니다. 반면 카프카 클러스터는 데이터를 영구 스토리지에 쓰고(읽고) 조정하는 브로커들로 구성됩니다. 이 차이는 두 가지 결과를 낳습니다. 첫째, 메시지는 결국 삭제되기 전까지 잠시 동안 검색 가능하게 유지됩니다. AMQP로 호노에서 이 효과를 내려면 일반적으로 이벤트를 저장하는 별도 메시지 브로커를 두어 비즈니스 애플리케이션이 일시적으로 사용 불가할 때 메시지 손실을 방지합니다. 카프카에서는 모든 메시지가 저장됩니다. 텔레메트리 메시지도 포함(저장 시간은 카프카 클러스터의 텔레메트리 토픽 구성에 의존). 둘째, 영구 스토리지를 통한 통신은 송수신 작업을 서로 디커플링합니다: 프로토콜 어댑터는 현재 연결된 소비자가 없으면 디바이스에 피드백할 수 없습니다. 대신 단순히 메시지를 저장하며 '비즈니스 애플리케이션이 언제 읽을지'를 '모르지' 않습니다.
시험해보기
호노 설치 시 AMQP 메시징 네트워크나 카프카 클러스터 중 하나를 배포해야 합니다. 둘 다 사용하도록 호노를 구성할 수도 있습니다. 그러면 각 테넌트(디바이스 및 설정의 부분집합)를 AMQP나 카프카 중 하나를 사용하도록 구성할 수 있습니다. 호노 프로젝트는 인터넷에서 공개적으로 접근 가능한 샌드박스 환경을 제공하여 AMQP나 카프카 기반 메시징으로 호노를 실험해볼 수 있게 합니다.
실제 예시
아래에서 호노 샌드박스에서 아파치 카프카 기반 메시징을 사용하는 작은 예제를 안내합니다. HTTP 프로토콜 어댑터에 텔레메트리 메시지를 보내고 카프카 클러스터에서 읽습니다.
명령줄에서 HTTP 명령을 보내 인터넷 연결 디바이스를 시뮬레이션합니다. 인기 있는 오픈소스 도구 curl을 사용합니다. 현재 컴퓨터에 설치되어 있지 않다면 curl 홈페이지의 설치 지침을 참조하세요. 비즈니스 애플리케이션 시뮬레이션에는 호노의 명령줄 클라이언트를 사용하며, 호노 다운로드 페이지에서 다운로드할 수 있습니다. 실행하려면 자바 11 이상이 필요합니다.
아래 명령 중 어떤 것이 작동하지 않으면(이런 지침에서는 언제든 발생 가능), 카프카 메시징 가이드에서 더 자세한 설명을 참조하세요.
디바이스 등록
먼저 샌드박스에서 다른 사용자와 간섭하지 않도록 새 테넌트를 생성해야 합니다. 다음 명령은 랜덤 ID로 테넌트를 생성하고 메시징용으로 카프카를 사용하도록 구성합니다.
출력에 다음 같은 줄이 있으면 클라이언트가 메시지 수신 준비 완료: 10:23:01.807 [vert.x-eventloop-thread-0] INFO org.eclipse.hono.cli.app.Receiver - Receiver [tenant: 85f63e23-1b78-4156-8500-debcbd1a8d35, mode: all] created successfully, hit ctrl-c to exit
첫 번째 터미널 창으로 돌아가 시뮬레이션된 디바이스에서 호노로 메시지 전송. 다음 명령은 HTTP 프로토콜 어댑터에 텔레메트리 메시지를 보냅니다:
이제 디바이스에서 호노로 메시지를 보내고 카프카 클러스터에서 수신하는 데 성공했기를 바랍니다. 다음 단계로 호노의 카프카 메시징 가이드에서 더 자세한 예제를 볼 수 있습니다. 비즈니스 애플리케이션에서 디바이스로 명령을 보내고 응답받는 방법도 나옵니다. 더 깊이 파고들고 싶으면 호노의 API 사양에서 카프카 기반 API 사양을 살펴보세요.
결론
메시징 시스템은 호노 핵심 기능의 기반입니다. 인터페이스가 그 위에 제공되기 때문입니다. AMQP 1.0과 함께 카프카를 지원하는 것은 호노에 매우 심오한 변화이며, 인터페이스가 서로 쉽게 매핑되도록 하는 데 큰 노력을 기울였습니다. 카프카의 핵심 이점은 확장성, 순서 보장, 광범위한 채택, 풍부한 상용 서비스 제공입니다. AMQP와의 주요 차이는 모든 메시지 타입이 브로커된다는 점입니다. 즉, 수신자가 잠시 연결 해제되어도 메시지가 전달될 수 있습니다. 통신도 시간 측면에서 디커플링되어 메시지 발신자가 수신자로부터 직접 피드백을 받을 수 없게 됩니다. 간단한 실전 예제로 시뮬레이션된 디바이스에서 호노 샌드박스로 메시지를 보내고 카프카 클러스터에서 소비하는 방법을 보여드렸습니다.