본문 바로가기

JAVA/kafka

카프카 이벤트 소싱

반응형

이벤스 소싱?

이벤트 소싱은 상태의 변화 하나하나를 이벤트로 취급하여 발생하는 이벤트를 순서대로 기록해두는것이다.

사용자는 기록된 이벤트에서 도메인 객체를 구체화할수 있으며 경위도 확인할수 있다.

(DBMS의 트랜잭션 로그(WAL: Write Ahead Log)의 레코드 쓰기)

카프카는 데이터를 모두 추상적인 '로그'로 취급하고, 받은 메시지는 로그에 순차적으로 기록되기 때문에 카프카의 아키텍처 그 자체가 이벤트 소싱에 적합하다.

 

CQRS?

Command Query Responsibility Segregation(커맨드 쿼리 책임 분리)란 데이터의 갱신과 문의 처리를 분리하는 개념의 아키텍처이다.

 

커맨드란 데이터의 update/create/delete 등의 데이터 갱신 처리에 해당.

쿼리란 데이터의 문의, 참조 처리에 해당한다.

 

커맨드쪽은 갱신 처리는 데이터가 갱신되는 것에만 책임지고 처리한다.

갱신 처리시 참조 결과에 대해서는 반환하지 않으며 그 데이터가 어떻게 참조되는지 대해서도 관여하지 않는다.

쿼리 쪽인 참조 처리는 적절한 결과를 반환하는 책임만 있다.

 

이벤트 소싱  + CQRS에 카프카 사용하기

카프카는 이벤트를 저장하는 저장소이며 이벤트를 전달하는 허브로 간주할수 있다.

- 카프카가 데이터 소스에서 시계열 데이터를 받아 기록한다. 이것은 커맨드 쪽 역할을 한다.

- 카프카가 데이터 싱크에 데이터를 전달한다. 받는 쪽은 자신의 쿼리에 있어서 참조 효율이 좋은 형식으로 데이터를 변환하여 사용ㅎ한다.

- 이렇게 해서 커맨드와 쿼리의 분리가 가능해진다.

 

이벤트 소싱과 CQRS 개념을 조합함으로써 애플리케이션에서 쓰기와 읽기 액세스 패턴이 다르더라도 유연하게 대응할수 있다.

이벤트를 여러용도로 사용하는 경우에도 각각의 요구샇아에 적합한 데이터 메돌을 적용할 수 있다.

 

출처 - 실전 아파치 카프카

- 저자: 사사키도루, 이와사키 마사다케, 사루타 코스케, 쓰즈키 마사요시, 요시다 고요

역자 - 정인식

반응형

'JAVA > kafka' 카테고리의 다른 글

카프카 웹 활동 분석  (0) 2020.08.18
카프카로 로그 수집  (0) 2020.08.18
카프카로 데이터 허브  (0) 2020.08.18