Kafka의 분산처리

2024. 11. 24. 18:08카테고리 없음

성능 개선: Kafka 기반 채팅 서비스 아키텍처 최적화 사례

 

1. 문제 상황


기존의 채팅 서비스에서는 모든 채팅방의 메시지가 하나의 Kafka 토픽과 하나의 파티션에서 처리되었습니다. 초기 구현에서는 단일 채널로도 정상적으로 동작했지만, 채팅방 수가 증가하면서 다음과 같은 문제가 발생했습니다:

  • 처리 병목현상: 단일 파티션으로 인해 모든 메시지가 순차적으로 처리되어 동시 처리 능력이 제한되었습니다.
  • 시스템 리소스 불균형: 메모리 및 CPU 사용이 특정 시점에 집중되면서 성능 저하와 응답 시간 증가가 발생했습니다.
  • 스케일링 어려움: 새로운 채팅방이 추가될수록 기존 토픽의 부담이 커져 확장성이 떨어졌습니다.

 

2. 기존 구조와 한계

  • 처리 방식: 하나의 토픽, 하나의 파티션에서 모든 채팅방을 처리.
  • 동시성 제한: 메시지가 단일 파티션에 집중되면서 동시 처리의 이점이 사라짐.
  • 메타데이터 관리: 방대한 메시지를 처리하는 과정에서 메타데이터 갱신 시간도 증가.

 

3. 개선된 구조

새로운 아키텍처는 다음과 같이 설계되었습니다:

구분기존 구조개선된 구조

구분 기존 구조 개선된 구조
처리 방식 모든 채팅방을 하나의 토픽, 하나의 파티션에서 처리 채팅방 10개당 1개의 토픽 사용. 각 토픽은 10개의 파티션으로 구성, 채팅방별로 파티션 할당
토픽 번호 N/A roomId / 10 + 1 (예: chatTopic1, chatTopic2, ...)
파티션 번호 N/A roomId % 10 (예: 0, 1, 2, ...)
미리 생성 N/A 기존 토픽의 5번째 파티션 사용 시 다음 토픽 미리 생성
예시 N/A roomId가 13인 경우 → 토픽: chatTopic2, 파티션: 3

 

4. 성능 개선 및 기대 효과

  1. 병렬 처리 능력 향상
    • 여러 채팅방의 메시지가 독립적으로 처리되어 동시성 향상.
    • 결과적으로 메시지 송수신 지연 시간이 감소.
  2. 메모리 및 CPU 자원 최적화
    • 파티션과 토픽이 분산되어 리소스 사용량이 균형 있게 조정.
    • 서비스 안정성이 크게 향상됨.
  3. 스케일링 용이성
    • 새로운 채팅방이 추가될 때, 기존 토픽과 파티션 구조를 확장하여 유연하게 대응 가능.
  4. 메시지 지연 시간 감소
    • 각 파티션이 독립적으로 작동함으로써 메시지 전송과 소비 간의 지연 시간이 줄어듦.
  5. 메타데이터 갱신 시간 절약
    • 다음 토픽을 미리 생성하여 갱신 작업을 최소화.
    • 시스템의 전체 응답성이 향상됨.