이론 정리/인프라
배민 Kafka를 활용한 이벤트 기반 아키텍처 구축 보고 정리
철매존
2025. 1. 22. 17:41
728x90
반응형
https://www.youtube.com/watch?v=DY3sUeGu74M 이거 보고 정리
- 이벤트 기반 아키텍처를 왜 구축했냐?
- 배달 + 알림, 통계 등등...
- 근데 알림이나 통계는 배달이랑 강한 일관성을 가지지는 않는다.
- 둘을 같이 동시에 만족할 필요는 없음. (준 실시간성으로도 ㄱㅊ)
- 즉 이는 결과적 일관성으로 만족할 수 있다. (이벤트를 통해 변경사항을 처리)
- 근데 알림이나 통계는 배달이랑 강한 일관성을 가지지는 않는다.
- 배달 + 알림, 통계 등등...
- 그래서 이벤트는 어떤 정보를 가지고 있어야 했는가?
- 여기서는 배달의 변경 사항을 잘 알려주는 것이다.
- 4가지 구성요소 - 대상, 행동, 정보, 시간
- 대상 : 식별자 정보 제공(배달이 A라이더에게 11시에 배차되었다)
- 행동 : 이미 벌어진 사건이므로 과거형으로 표현(배달이 A라이더에게 11시에 배차되었다)
- 정보 : 행위와 관련된 값들을 표현 (배달이 A라이더에게 11시에 배차되었다.)
- 시간 : 행위가 발생한 시간을 표현 (배달이 A라이더에게 11시에 배차되었다.)
- 4가지 구성요소 - 대상, 행동, 정보, 시간
- 여기서는 배달의 변경 사항을 잘 알려주는 것이다.
- 뭐가 좋았냐
- 요구사항이 추가되어도 배달 시스템 복잡도에는 영향이 없다.
- 소비처 결합도 감소 : 이벤트에 시간 등 다양한 정보를 넣어서 보내줬기 때문에 이벤트를 통해 필요한 정보 파악 가능
- 데이터 분석 : 배달 관련 내용의 히스토리 파악이 용이하다. 이를 분석정보로 활용 가능
- 주의점
- 근데 정보가 너무 많은 채로 이벤트를 만들면 문제가 있다.
- 결합도가 올라갈 수 있다.
- 행위자 기준으로 데이터를 적용해서 보내자.
- 이벤트의 순서가 중요하다.
- 배달 생성 -> 완료 -> 픽업완료 -> 배달완료
- 보통은 순서가 이렇게 중요한데, 이게 꼬이는 경우가 있을 수 있다.
- 이벤트 파이프라인
- 근데 정보가 너무 많은 채로 이벤트를 만들면 문제가 있다.
- 이벤트 파이프라인
- 이벤트 순서를 보장하면서 어떻게 안정적으로 발행했을까?
- 이벤트 발행을 위해서는 메세지 브로커를 사용해야 한다.
- Kafka
- 순서 보장
- 토픽 파티션 별로 이벤트 소비 시 순서를 보장해 준다.
- 적절한 키를 기반으로 발행해 주면 이를 통해 순서 보장이 가능하다.
- 고성능, 고가용성
- 실시간 이벤트를 처리할 고성능 고가용성 제공
- 파티션 증설, 메세지 배치 발행, 페이지 캐시 이용을 통한 고성능
- 통합 도구
- Kafka Streams, Kafka Conenct 등 다양한 통합 도구 제공
- 시스템 확장 등등
- 전담팀 지원
- 카프카 클러스터 관리, 모니터링 및 지원도구 제공
- 순서 보장
- 문제??
- 이벤트 발행이 실패하거나 재시도 처리에 따라서 이벤트 순서가 바뀐 적이 있음
- 도메인 상태와 이벤트 발행 결과 간의 불일치 -> 시스템 장애가 됨
- 트랜잭셔널 아웃박스 패턴!!!
- 이벤트 기반 아키텍쳐에서 사용되는데, 데이터베이스 트랜잭션을 활용하여 이벤트를 아웃박스에 적재하고 이후에 메세지 릴레이가 이벤트 발행을 보장해 준다.
- 발행해야 하는 이벤트를 아웃박스 테이블에 보관해서 도메인 상태와 발행예정 이벤트 일관성 보장
- 그리고 메세지 릴레이가 이를 읽어서 메세지를 보내준다.
- 그래서 메세지 릴레이를 구현해야 하는데
- 저비용, 안전성, 처리량를 고려해야 하는데
- debezium 이라는 오픈소스를 릴레이로 사용
- DB 변경을 감지하고 타 시스템에 전송해주는 플랫폼(CDC에서 사용된다고 보면 됨)
- 저비용 : Kafka Connect 등록/실행
- 안정성 : Binary log를 통한 순서 보장 및 offset을 활용한 발행 보장
- 처리량 : outbox 테이블의 파티셔닝 및 여러개 debezium 붙여서 처리
- DB 변경을 감지하고 타 시스템에 전송해주는 플랫폼(CDC에서 사용된다고 보면 됨)
- debezium 이라는 오픈소스를 릴레이로 사용
- 저비용, 안전성, 처리량를 고려해야 하는데
- 그래서 메세지 릴레이를 구현해야 하는데
- 그리고 메세지 릴레이가 이를 읽어서 메세지를 보내준다.
- 발행해야 하는 이벤트를 아웃박스 테이블에 보관해서 도메인 상태와 발행예정 이벤트 일관성 보장
- 이벤트 기반 아키텍쳐에서 사용되는데, 데이터베이스 트랜잭션을 활용하여 이벤트를 아웃박스에 적재하고 이후에 메세지 릴레이가 이벤트 발행을 보장해 준다.
- 트랜잭셔널 아웃박스 패턴!!!
- 도메인 상태와 이벤트 발행 결과 간의 불일치 -> 시스템 장애가 됨
- 이벤트 발행이 실패하거나 재시도 처리에 따라서 이벤트 순서가 바뀐 적이 있음
반응형