26Y03e

Young-Kyoo Kim·2026년 8월 3일

피크 요청량이 300 RPS에서 12,000 RPS(TPS)로 40배 폭증하는 경우, 단순히 파티션 수만 올리는 것을 넘어 Kafka 파티션/I-O 구조, MinIO 이벤트 배치 설정, StarRocks Routine Load 동시성 등 파이프라인 전체의 병목 구간을 재설계해야 합니다.


1. Kafka 파티션 개수 산정 (Partition Sizing)

현재 구성된 32개 파티션12,000 RPS를 처리하기에 충분하거나 오히려 여유 있는 수준입니다.

  • 파티션 1개당 처리량 계산:
  • Kafka 파티션 1개는 일반적으로 초당 1,000 ~ 3,000 메시지(1~3MB/s)를 손쉽게 처리합니다.
  • 12,000 RPS를 32개 파티션으로 분산하면 파티션 1개당 초당 약 375건(RPS)만 처리하면 되므로, Broker 및 Disk I/O 측면에서 개별 파티션 과부하는 발생하지 않습니다.
  • 추천 파티션 수: 32개 유지 (필요시 최대 48개까지 확장 가능하나, 현재 32개로도 충분함)

⚠️ 주의: 파티션 수 자체보다는 MinIO가 메시지를 보낼 때 파티션들에 균등하게 분산(Hashing/Round-Robin)시키고 있는지가 핵심입니다.


2. MinIO AIStor 측 설정 변경 (필수)

MinIO에서 초당 12,000건의 HTTP/TCP 커넥션을 Kafka로 직접 쏘게 되면 Kafka 메시지 큐 이전에 MinIO 및 Kafka 브로커의 Network Socket / Handshake 병목이 발생합니다. 배치(Batch) 전송 설정이 필수적입니다.

mc admin config set 설정 시 아래 배치 옵션을 적용해야 합니다.

# MinIO Kafka Target 설정에 Batch 및 Queue 크기 확대
mc admin config set myminio notify_kafka:1 \
  url="my-kafka-kafka-bootstrap.kafka.svc.cluster.local:9092" \
  topic="minio-aistor-object-events" \
  batch_size="500" \
  queue_limit="100000" \
  queue_dir="/var/minio/events"
  • batch_size="500": 이벤트를 묶어서(Bulk) Kafka로 전송하여 네트워크 RTT 및 I/O 횟수를 1/500로 축소.
  • queue_limit="100000": 순간 피크 트래픽 폭증 시 MinIO 내부 메모리 버퍼 큐 크기 확장.

3. StarRocks Routine Load 설정 재설계 (필수)

12,000 RPS 데이터를 실시간 적재할 때 StarRocks에서 가장 큰 병목이 발생합니다. 기존 300 RPS용 Routine Load 옵션을 고성능 수집 모드로 변경해야 합니다.

Routine Load 재설정 (STOP 후 재생성)

-- 기존 Routine Load 중단
PAUSE ROUTINE LOAD FOR minio_audit.minio_event_load;
STOP ROUTINE LOAD FOR minio_audit.minio_event_load;

-- 12,000 RPS 대응 고성능 Routine Load 생성
CREATE ROUTINE LOAD minio_audit.minio_event_load ON object_events
COLUMNS(
    event_name,
    bucket_name,
    object_key,
    object_size,
    event_time = NOW()
)
PROPERTIES (
    -- 1. 병렬 처리 Task 수 대폭 확대 (FE/BE 리소스에 따라 조정, 8~16)
    "desired_concurrent_number" = "16",
    
    -- 2. 배치당 최대 읽기 건수 및 바이트 수 확장 (기본값 대비 확대)
    "max_batch_interval" = "5",          -- 최대 5초 대기
    "max_batch_rows" = "300000",         -- 한 배치당 최대 30만 건
    "max_batch_size" = "2147483648",     -- 한 배치당 최대 2GB
    
    "format" = "json",
    "jsonpaths" = "[\"$.EventName\",\"$.Records[0].s3.bucket.name\",\"$.Records[0].s3.object.key\",\"$.Records[0].s3.object.size\"]",
    "strip_outer_array" = "false"
)
FROM KAFKA (
    "kafka_broker_list" = "my-kafka-kafka-bootstrap.kafka.svc.cluster.local:9092",
    "kafka_topic" = "minio-aistor-object-events",
    "kafka_partitions" = "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31",
    "property.kafka_default_offsets" = "OFFSET_END"
);

4. Kafka Broker 및 Storage 성능 체크리스트

12,000 RPS는 건당 1KB Payload 기준 초당 약 12~15MB/s, 2KB 기준 25~30MB/s의 쓰기 처리량입니다.

  1. 디스크 Write Throughput:
    local-path 스토리지가 가리키는 노드의 로컬 NVMe/SSD가 초당 30MB/s 이상의 연속 쓰기(Sequential Write)를 감당할 수 있는지 확인합니다. (NVMe 기준으로는 아무 문제 없음)
  2. Kafka JVM Heap 메모리:
    Broker Pod의 Heap Memory가 최소 4Gi ~ 8GiB 이상 할당되어 있는지 확인합니다. (Strimzi Kafka CRjvmOptions: {-Xms: 4g, -Xmx: 4g} 설정)
  3. OS File Descriptor & Socket Limit:
    노드의 sysctl 커널 파라미터에서 fs.file-maxnet.core.somaxconn 수치가 충분히 높게 설정되어 있는지 점검합니다.

💡 요약 정리

  • 파티션 수(32개): 변경 불필요 (그대로 유지)
  • MinIO 설정: batch_size 적용하여 이벤트 묶음 전송 활성화
  • StarRocks 설정: Routine Load의 desired_concurrent_number16으로 올리고 max_batch_rows 크기 확장

0개의 댓글