이벤스 소싱?
이벤트 소싱은 상태의 변화 하나하나를 이벤트로 취급하여 발생하는 이벤트를 순서대로 기록해두는것이다.
사용자는 기록된 이벤트에서 도메인 객체를 구체화할수 있으며 경위도 확인할수 있다.
(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 |