본문 바로가기
클라우드, 인프라

카프카를 사용한 이벤트 아키텍처 구현 영상 정리

by dharana7723 2024. 1. 10.

이벤트 파이프라인

순서보장: 

토픽의 파티션을 통해 key 별로 순서 보장

 

Ex)배달번호

고성능 고가용성:

실시간 이벤트를 처리할 고성능 고가용성 제공

카프카에서는 파티션 증설을 통한 처리량 증대

메시지 배치 발행, 페이지 캐시

또한 브로커를 클러스터로 관리함으로서 한대의 브로커에 이슈에 생겨도 다른

브로커에서 파티션을 처리하게 함으로써 고가용성을 보장

 

통합도구

카프카 스트림즈, 카프카 커넥트

통합이나 확장이 필요할때

 

전단팀 지원

카프카 클러스터 관리, 모니터링 및 지원도구 제공 팀 존재했음

 

Transactional outbox Pattern은

이벤트 기반 아키텍처에서 사용되는 패턴임

 

발행해야 할이벤트를 도메인 처리 트랜젝션과 묶어 아웃박스테이블에 저장

이를 통해 도메인의 상태와 발행해야할 이벤트간의 일관성 보장가능

이후 메시지 릴레이가 아웃박스 테이블에 저장된 이벤트를 순서대로 읽어

발행함으로서 이벤트의 발행과 순서를 보장해 줄수 있었음

 

 

메시지 릴레이 구현시 고려점

저비용 안전성 처리량

debezium을 선택

어떻게 앞의 세가지 요소를 만족시켰나?

 

저비용

카프바 커넥트로 제공되고 있고 사내에서는 커넥트 실행 환경이 구축되어있었음

등록하고 실행

실행 및 모니터링 제공

 

안전성:

바이너리 로그를 통한 순서 보장 및 토픽의 offset을 활용한 발행 보장

발행이 실패하더라도 실패한 것부터 읽어 발행을 보장

 

처리량:

Outbox 테이블 파티셔닝을 통한 처리량 증대

서비스가 커지면 트래픽의 양이 증가하고 이벤트의 양도 증가하여 이를 처리할 수 있어야 함

디비지움도 자연스럽게 처리량을 증설시킬 수 있어야 함

 

 

카프카 컨텍스트를 통해 가능하나

Mysql 는 컨텍스트를 한개로 고정해야 했음

바이너리 로그를 순서대로 읽어 발행하기 때문인것으로 확인

이 문제를 해결하기 위해 아웃박스 테이블을 파티셔닝 처리함

 outbox table을 n개를 만들고

프로듀서가 이벤트 키를 기반으로 이벤트를 파티셔닝하여 적절한 아웃박스 테이블에

저장함

그리고 각각의 아웃박스 테이블에 데브지움 커넥터를 붙여 이벤트를 발행함으로서

처리량을 증설시킬수 있었음

 

이렇게 디비지움을 통해 트랜젝셔널 아웃박스 패턴을 도입했고

이를 통해 이벤트유실없이 순서를 보장해주는 이벤트 기반 아키텍처를 구축할수

있었음

 

순서가 보장된 이벤트는 이벤트 스트림을 구성

이벤트 스트림

이벤트 스트림으로 CQRS 적용

서비스가 작았을때는 하나의 모델로 커멘드와 쿼리를 처리할 수 있었음

하지만 점점 서비스가 커져가면서 데이터량이 많아지기 시작함

이로 인해 대량의 데이터읽기 또는 조회기능의 인덱스를 잘못설정하여 조회기능에 오류가 발생하기 시작함

하지만 하나의 모델로 쿼리와 커맨드를 처리하고 있었기 때문에 처리에도 영향을 미쳤고 전체 시스템의 장애로 확장되게 되었음

 

이러한 문제를 해결하기 위해 이벤트 기반 모델로 쿼리 모델을 구축함

그리고 조회기능을 쿼리 모델을 사용하게 함으로서 쿼리 쪽에 문제가 생기더라도 

커맨드 쪽에 장애가 발생하지 않도록 함

 

두번째는 이벤트 스트림 방법으로 데이터 분석 환경을 구축함

서비스를 운영하다 보면 이슈대응을 하거나 모니터링을 해야하거나 성과를 분석하기 위해 데이터를 분석할 수 있는 환경이 필요했음

카프카에 저장되어 있는 이벤트 스트림을 기반으로 s3 sink connector를 통해서 s3에 저장함

Glue 와 athena를 활용하여 데이터를 분석할 수 있는 환경을 구축함

또한 배달 데이터는 다른 팀에서도 많이 모니터링 하고 있기 때문에

해당 데이터를 전사 데이터레이크에 연동함으로서 다른 팀도 배달 데이터를 분석할 수 있게 해주었음

 

마지막은 이벤트 스트림으로 스트림즈 애플리케이션을 구현함

배달 시스템을 운영하다 보면 배달과 라이더를 실시간으로 관측해야할

니즈가 있었음

특정시간에 특정지역에 배달라이더가 몇명? 이라든지

이전에는 주기적으로 배치를 실행하여 처리를 했었는데

이러한 집계처리는 데이터베이스에 부하를 주거나 실시간성을 확보하지 못하는

문제가 있었음

 

이미 이벤트 파이프라인이 카프카로 구현되어 있기 때문에

카프카 스트림즈를 활용하여 구현가능했음

행위 기반 이벤트 구성(순서가 중요)

이벤트의 다양한 활용

'클라우드, 인프라' 카테고리의 다른 글

로드밸런서 - L4, L7  (0) 2024.01.11
MySQL CDC 및 디비지움 정리  (1) 2024.01.11
트래픽 증가 대응 고려  (1) 2024.01.10
Consitent hashing  (0) 2022.07.30
레디스- 키의 개수가 많을때 저장/활용 법  (0) 2022.06.16