본문 바로가기

관심사/독후감

Kafka Streams In action: State store

Event

이벤트에 문맥이 있어야 의미있는 정보를 제공해주는 경우가 있다. 예를 들어, 주식 거래 이벤트를 상상해보자. 주식의 가격과 매매 정보가 기록된 이벤트는 큰 의미없는 지표로 보일 수 있다. 그러나 이벤트가 특정 기간동안의 주식 거래량, 가격변동 등의 문맥을 지닌다면, 이는 주식을 거래할 때 좋은 인사이트를 제공할 수 있다.

State

스트림 처리에서 이 문맥을 State (상태)라고 부른다. 언뜻보면 스트림은 관계 없는 개별 이벤트의 지속적인 흐름으로 볼 수 있다. 상태는 데이터베이스의 테이블 같은 정적 리소스처럼 볼 수 있다.

State store

kafka stream은 state store를 제공한다. kafka stream의 count(), aggregate() 같은 함수를 사용할 때 사용되는 로컬 인메모리 저장소이다. kafka stream은 자동으로 state store을 만들고 관리한다. 그리고 fault-tolerance, 장애복구 기능을 제공한다.

카프카 스트림을 사용한 애플리케이션은 여러 서버 인스턴스에서 실행된다. 그래서 애플리케이션의 전체 State 값은 여러 인스턴스의 로컬 저장소에 분산되어있다. Kafka Streams API를 사용하면 State store를 로컬 (인스턴스 수준)과 전체 (논리적으로 전체 응용프로그램 수준)에서 모두 적용할 수 있다.

state store는 in-memory hashmap 일 수도 있고, 디스크 기반의 rocks db일 수도 있다. 레디스 같은 원격 인메모리 저장소를 state store으로 사용하는 대안 (redisk)도 있다. 그러나 애플리케이션 외부에서 메모리 서버를 관리해야하고, RocksDB보다 성능이 낮을 수 있단 단점이 있다. 

 

궁금한 점

😕 카프카 스트림을 사용하는 인스턴스에서 식별 키가 같은 애플리케이션을 컨슈밍하게 하는 방법은?

 

단어사전

토폴로지: 컴퓨터 네트워크의 요소들(링크, 노드 등)을 물리적으로 연결해 놓은 것

fault-tolerance: 시스템을 구성하는 부품의 일부에서 결함 또는 고장이 발생하여도 정상적 혹은 부분적으로 기능을 수행할 수 있는 시스템

 

참고