이론 정리/인프라

배민 Kafka를 활용한 이벤트 기반 아키텍처 구축 보고 정리

철매존 2025. 1. 22. 17:41
728x90
반응형

https://www.youtube.com/watch?v=DY3sUeGu74M 이거 보고 정리

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