1. Kafka Producer — 실시간 데이터 수집

KIS API와 yfinance로부터 주식 시세 데이터를 실시간 수집합니다. 각 API의 특성과 장애 가능성을 고려하여 두 개의 Kafka 토픽으로 분리했습니다.


Kafka 토픽 구조

토픽 이름목적수집 소스
stock.kis1차 데이터 소스KIS API (한국투자증권)
stock.yfinance장애 대비 백업yfinance

토픽을 분리한 이유 — 데이터 출처별 신뢰도, latency, 응답 포맷 차이를 명확히 구분하여 downstream consumer에서 분기 처리와 fallback 전환을 용이하게 하기 위함입니다.


다중 소스 Fallback 전략

  • Producer는 먼저 KIS API를 호출하고, 일정 시간 내 실패 시 yfinance로 전환합니다.
  • API 호출 실패가 감지되면 해당 종목은 stock.yfinance 토픽으로 발행됩니다.
KIS API 호출 시도
   → 성공: stock.kis 토픽으로 발행
   → 실패: yfinance 호출 후 stock.yfinance 토픽으로 발행

파티션 전략

토픽 내부 파티션은 종목 코드(symbol) 기준으로 분산됩니다.

partition_key = hash(symbol) % partition_count
  • 동일 종목은 항상 같은 파티션에 저장 → 순서 보장 및 상태 일관성 유지
  • Consumer 그룹 확장을 통해 병렬 처리량 확대 가능
  • Redis 등 외부 상태 저장소와 연계하기 용이 (종목별 마지막 수신 시간, 지표 캐시 등)

멱등성 및 데이터 유실 방지

설정목적
enable.idempotencetrue중복 메시지 방지
acksall모든 복제본 확인 후 커밋
enable.auto.commitfalse (Consumer)수동 커밋으로 처리 보장
  • Deduplication: (symbol, event_time) 기준 upsert 적용, KIS 데이터 우선 반영
  • Dead-letter Queue (stock.dlq) — 파싱/재시도 실패 데이터는 DLQ에 저장 후 재처리

운영 모니터링

지표설명
Consumer lag미처리 메시지 수
End-to-end latency수집 → 처리 지연 시간
DLQ 발생률실패 메시지 비율
에러율API 호출 실패율

SLA: 지연 > 1s 또는 DLQ 비율 > 0.1% 발생 시 알림 트리거