mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 14:56:23 +00:00
8.4 KiB
8.4 KiB
Event Hub Basic Tier 제약사항 및 해결 방법
현재 상황
Event Hub Namespace: hgzero-eventhub-ns
Resource Group: rg-digitalgarage-02
Location: koreacentral
Tier: Basic ⚠️
Status: Active
Basic Tier 제약사항
| 기능 | Basic | Standard | Premium |
|---|---|---|---|
| Consumer Groups | 1개만 ($Default) | 최대 20개 | 최대 100개 |
| 파티션 | 최대 32개 | 최대 32개 | 최대 100개 |
| 메시지 보존 | 1일 | 7일 | 90일 |
| Capture | ❌ | ✅ | ✅ |
| 가격 | 낮음 | 중간 | 높음 |
Basic Tier에서는 $Default Consumer Group만 사용할 수 있습니다.
해결 방법
방법 1: Tier 업그레이드 (권장) ⭐️
Event Hub를 Basic → Standard로 업그레이드하면 최대 20개의 Consumer Group 사용 가능
업그레이드 방법
Azure Portal:
- Event Hub Namespace (hgzero-eventhub-ns) 페이지로 이동
- 왼쪽 메뉴에서 "Pricing tier" 클릭
- "Standard" 선택
- "Apply" 버튼 클릭
- 약 1-2분 후 적용 완료
Azure CLI:
az eventhubs namespace update \
--resource-group rg-digitalgarage-02 \
--name hgzero-eventhub-ns \
--sku Standard \
--capacity 1
비용:
- Basic:
$0.015/시간 ($11/월) - Standard:
$0.03/시간 ($22/월) - 차이: 약 $11/월 추가
장점:
- ✅ 여러 Consumer Group 사용 가능
- ✅ 메시지 보존 기간 7일로 증가
- ✅ Capture 기능 사용 가능
- ✅ 영구적 해결책
단점:
- ❌ 비용 증가 (약 2배)
- ❌ 관리자 승인 필요할 수 있음
방법 2: $Default Consumer Group 공유 사용 (임시)
개발/테스트 시 기존 프로덕션 Consumer를 잠시 중지하고 테스트
실행 순서
Step 1: 프로덕션 Consumer 중지
# 기존 Consumer 프로세스 확인
ps aux | grep "start_consumer.py" | grep -v grep
# PID 확인 후 종료
kill <PID>
# 예시
kill 51257
Step 2: 테스트 Consumer 실행
cd /Users/daewoong/home/workspace/HGZero/rag
python start_consumer.py
Step 3: 테스트 완료 후 프로덕션 재시작
# Ctrl+C로 테스트 Consumer 종료
# 프로덕션 Consumer 재시작
python start_consumer.py &
장점:
- ✅ 추가 비용 없음
- ✅ 즉시 테스트 가능
- ✅ 권한 불필요
단점:
- ❌ 프로덕션 서비스 중단
- ❌ 동시 실행 불가
- ❌ 임시 방법
주의사항:
- ⚠️ 프로덕션 환경에서만 사용 중이라면 비추천
- ⚠️ 업무 시간 외에만 테스트
- ⚠️ 테스트 후 반드시 프로덕션 재시작 확인
방법 3: Checkpoint 위치 변경으로 독립 실행
동일한 Consumer Group을 사용하되, checkpoint 저장 위치를 다르게 하여 독립적으로 실행
구현 방법
Step 1: 별도 Storage Container 생성
Azure Portal:
- Storage Account (hgzerostorage) 접속
- "Containers" 클릭
- "+ Container" 클릭
- 이름:
hgzero-checkpoints-dev - Create
Step 2: config_dev.yaml 생성
# config_dev.yaml
eventhub:
connection_string: ${EVENTHUB_CONNECTION_STRING}
name: ${EVENTHUB_NAME}
consumer_group: "$Default" # 동일
storage:
connection_string: ${AZURE_STORAGE_CONNECTION_STRING}
container_name: "hgzero-checkpoints-dev" # 다른 컨테이너!
# 나머지는 config.yaml과 동일
Step 3: 개발용 Consumer 실행 스크립트
# start_dev_consumer.py
import asyncio
from pathlib import Path
from src.utils.config import load_config
from src.db.rag_minutes_db import RagMinutesDB
from src.db.postgres_vector import PostgresVectorDB
from src.utils.embedding import EmbeddingGenerator
from src.services.eventhub_consumer import start_consumer
async def main():
# 개발용 설정 파일 로드
config_path = Path(__file__).parent / "config_dev.yaml"
config = load_config(str(config_path))
# ... 나머지는 start_consumer.py와 동일
if __name__ == "__main__":
asyncio.run(main())
Step 4: 실행
# Terminal 1: 프로덕션 Consumer
python start_consumer.py
# Terminal 2: 개발 Consumer (다른 checkpoint)
python start_dev_consumer.py
장점:
- ✅ 동시 실행 가능
- ✅ 독립적인 checkpoint
- ✅ 추가 비용 거의 없음 (Storage만)
- ✅ Tier 업그레이드 불필요
단점:
- ❌ 동일 파티션을 두 Consumer가 읽으려 하면 ownership 경쟁
- ❌ 한쪽만 이벤트 수신 (ownership을 가진 쪽)
- ❌ 완전한 독립 실행은 아님
결론:
- 이 방법은 checkpoint만 독립이고, 여전히 ownership 경쟁 발생
- 동시 실행은 불가능
- 권장하지 않음 ❌
방법 4: 로컬 개발 환경에서만 테스트
Event Hub 대신 로컬 메시지 큐 사용
옵션 A: Azure Event Hub Emulator (권장)
현재는 공식 Emulator가 없으므로, Kafka나 RabbitMQ로 대체
옵션 B: 메모리 큐로 테스트
# test_consumer_local.py
import asyncio
import json
from queue import Queue
# 로컬 메모리 큐
local_queue = Queue()
async def test_event_processing():
"""로컬에서 이벤트 처리 로직만 테스트"""
# 테스트 이벤트 생성
test_event = {
'eventType': 'MINUTES_FINALIZED',
'data': {
'meetingId': 'test-001',
'title': '테스트 회의',
'minutesId': 'minutes-001',
'sections': []
}
}
# Consumer의 _process_minutes_event 로직만 테스트
from src.services.eventhub_consumer import EventHubConsumer
# 실제 처리 로직 테스트
# ...
asyncio.run(test_event_processing())
장점:
- ✅ 완전 독립 실행
- ✅ 무료
- ✅ 빠른 테스트
단점:
- ❌ 실제 Event Hub와 다른 환경
- ❌ 통합 테스트 불가
권장 솔루션
개발 단계별 권장 방법
| 단계 | 권장 방법 | 이유 |
|---|---|---|
| 로컬 개발 | 방법 4 (메모리 큐) | 빠르고 비용 없음 |
| 통합 테스트 | 방법 2 ($Default 공유) | 실제 환경, 단기간 |
| 지속적 개발 | 방법 1 (Tier 업그레이드) | 영구 해결, 동시 실행 |
| 프로덕션 | 방법 1 (Standard Tier) | 고가용성, 확장성 |
최종 권장: Tier 업그레이드
이유:
- ✅ 여러 Consumer Group으로 개발/테스트 분리
- ✅ 메시지 보존 기간 증가 (1일 → 7일)
- ✅ 향후 확장 가능 (Capture 등)
- ✅ 프로덕션 안정성 향상
비용 대비 효과:
- 월 $11 추가로 개발 생산성 향상
- 프로덕션 중단 없이 테스트 가능
- 장기적으로 더 경제적
실행 가이드
즉시 테스트가 필요한 경우 (방법 2)
# 1. 프로덕션 Consumer 중지
ps aux | grep "start_consumer.py" | grep -v grep
kill <PID>
# 2. 테스트 실행
cd /Users/daewoong/home/workspace/HGZero/rag
python start_consumer.py
# 3. 테스트 완료 후
# Ctrl+C로 종료
# 4. 프로덕션 재시작
python start_consumer.py &
Tier 업그레이드 후 (방법 1)
# 1. Tier 업그레이드 (Azure Portal 또는 CLI)
az eventhubs namespace update \
--resource-group rg-digitalgarage-02 \
--name hgzero-eventhub-ns \
--sku Standard
# 2. Consumer Group 생성
az eventhubs eventhub consumer-group create \
--resource-group rg-digitalgarage-02 \
--namespace-name hgzero-eventhub-ns \
--eventhub-name hgzero-eventhub-name \
--name development
# 3. config.yaml 수정
# consumer_group: "development"
# 4. 프로덕션은 계속 실행, 개발 Consumer 별도 실행
python start_consumer.py
요약
현재 상황
- ❌ Event Hub Tier: Basic
- ❌ Consumer Group: $Default만 사용 가능
- ❌ 추가 Consumer Group 생성 불가
해결책
- 단기: 프로덕션 Consumer 잠시 중지하고 테스트 (방법 2)
- 장기: Standard Tier로 업그레이드 (방법 1) ⭐️
다음 액션
관리자에게 Tier 업그레이드 요청하거나, 긴급하다면 프로덕션 중지 후 테스트 진행
참고: Tier 비교
Basic Tier (현재)
├─ Consumer Groups: 1개 ($Default만)
├─ 보존 기간: 1일
├─ 비용: ~$11/월
└─ ❌ 개발/테스트 분리 불가
Standard Tier (권장)
├─ Consumer Groups: 최대 20개 ✅
├─ 보존 기간: 7일
├─ 비용: ~$22/월 (+$11)
└─ ✅ 개발/테스트 완전 분리
Standard Tier로 업그레이드하는 것을 강력히 권장합니다! 🎯