Kafka Streams Interactive Queries — 애플리케이션 밖에서 상태 저장소 들여다보기
Kafka Streams Interactive Queries 공식 문서 종합 (웹 리서치, 2026) — Apache Kafka 공식 문서(streams/developer-guide/interactive-queries) Apache Kafka 공식 문서 Interactive Queries
이 모듈을 다 읽으면
- Interactive Queries가 어떤 문제(토폴로지 밖에서 상태 조회)를 해결하는지 설명할 수 있다
- 상태가 인스턴스마다 분산돼 있어 '올바른 인스턴스로 질의를 라우팅'해야 하는 이유를 설명할 수 있다
kafka-learn-37에서 다룬 Kafka Streams의 state store를 전제로, 그 상태를 토폴로지 내부의 처리 로직에서만 쓰는 게 아니라 REST API 같은 외부 요청에서 직접 조회할 수 있게 해주는 Interactive Queries 기능을 정리한다.
왜 필요한가 — 처리 중인 상태를 애플리케이션 밖에서 바로 보고 싶을 때
Kafka Streams 애플리케이션은 내부적으로 state store에 집계·조인 결과 같은 상태를 계속 갱신해가며 이벤트를 처리한다. Interactive Queries는 이 상태를 처리 로직 내부에서만 쓰는 데 그치지 않고, 애플리케이션 '밖에서' 직접 조회할 수 있게 해준다 — 예를 들어 모바일 앱이 백그라운드에서 이벤트를 계속 처리하는 동시에, 사용자의 현재 상태 조회 요청을 REST API 등으로 그 state store에서 바로 서빙하는 식이다. 별도의 서빙용 데이터베이스에 상태를 다시 복사해 넣을 필요 없이, Kafka Streams가 이미 관리하는 state store를 그대로 조회 대상으로 쓴다는 게 핵심 이점이다.
핵심 포인트
- Interactive Queries는 Kafka Streams의 state store를 애플리케이션 처리 로직 밖(REST API 등)에서 직접 조회할 수 있게 해준다
- 상태를 별도 서빙용 DB에 다시 복사할 필요 없이 이미 관리 중인 state store를 그대로 조회 대상으로 재사용한다는 게 핵심 이점
핵심 난제 — 상태는 여러 인스턴스에 파티션별로 흩어져 있다
애플리케이션의 전체 상태는 보통 여러 분산 인스턴스에 걸쳐 나뉘어 있고, 각 인스턴스는 자기 로컬 state store만 갖고 있다 — 즉 특정 키를 조회하려면 '그 키를 실제로 담당하는 인스턴스'로 질의를 보내야지, 아무 인스턴스에나 물어봐서는 안 된다. metadataForKey() 메서드가 이 문제를 푼다 — 기본 파티셔닝 전략을 그대로 적용해 주어진 키가 어느 인스턴스에 있는지 알아낸 뒤, 그 인스턴스로 질의를 직접 라우팅할 수 있게 해준다. allMetadataForStore()로 특정 스토어를 가진 인스턴스 전체 목록을 얻어 전수 조회하는 방식도 가능하지만, 이는 타겟 라우팅이 안 될 때 쓰는 대안적인 방식이다.
핵심 포인트
- 상태는 인스턴스별로 파티션 단위로 흩어져 있어, 특정 키 조회는 그 키를 실제로 담당하는 인스턴스로만 라우팅해야 함
- metadataForKey()로 키→담당 인스턴스를 알아내 타겟 라우팅, allMetadataForStore()는 전체 인스턴스 목록을 통한 대안적 전수조회
로컬 조회와 원격 조회 — 두 계층
로컬 조회는 자기 인스턴스의 파티션-로컬 state store를 streams.store("저장소명", QueryableStoreTypes.keyValueStore())처럼 직접 접근해 즉시 값을 가져오는 방식이다. 반면 원격 조회는 metadataForKey()/allMetadataForStore() 같은 메타데이터 조회로 데이터를 가진 인스턴스를 먼저 찾아낸 뒤, 애플리케이션이 직접 구현한 RPC 계층(REST API 등)으로 그 원격 인스턴스와 네트워크 통신해 값을 가져오는 방식이다 — Kafka Streams 자체는 이 RPC 계층을 제공하지 않으므로 애플리케이션 개발자가 별도로 구현해야 한다.
핵심 포인트
- 로컬 조회: 자기 인스턴스의 파티션-로컬 state store를 직접 접근
- 원격 조회: 메타데이터로 담당 인스턴스를 찾은 뒤 애플리케이션이 직접 구현한 RPC 계층(REST API 등)으로 통신 — Kafka Streams가 RPC 계층 자체를 제공하지는 않음