피크 요청량이 300 RPS에서 12,000 RPS(TPS)로 40배 폭증하는 경우, 단순히 파티션 수만 올리는 것을 넘어 Kafka 파티션/I-O 구조, MinIO 이벤트 배치 설정, StarRocks Routine Load 동시성 등 파이프라인 전체의 병목 구간을 재설계해야 합니다.
현재 구성된 32개 파티션은 12,000 RPS를 처리하기에 충분하거나 오히려 여유 있는 수준입니다.
⚠️ 주의: 파티션 수 자체보다는 MinIO가 메시지를 보낼 때 파티션들에 균등하게 분산(Hashing/Round-Robin)시키고 있는지가 핵심입니다.
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 내부 메모리 버퍼 큐 크기 확장.12,000 RPS 데이터를 실시간 적재할 때 StarRocks에서 가장 큰 병목이 발생합니다. 기존 300 RPS용 Routine Load 옵션을 고성능 수집 모드로 변경해야 합니다.
-- 기존 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"
);
12,000 RPS는 건당 1KB Payload 기준 초당 약 12~15MB/s, 2KB 기준 25~30MB/s의 쓰기 처리량입니다.
local-path 스토리지가 가리키는 노드의 로컬 NVMe/SSD가 초당 30MB/s 이상의 연속 쓰기(Sequential Write)를 감당할 수 있는지 확인합니다. (NVMe 기준으로는 아무 문제 없음)Strimzi Kafka CR의 jvmOptions: {-Xms: 4g, -Xmx: 4g} 설정)sysctl 커널 파라미터에서 fs.file-max 및 net.core.somaxconn 수치가 충분히 높게 설정되어 있는지 점검합니다.batch_size 적용하여 이벤트 묶음 전송 활성화desired_concurrent_number를 16으로 올리고 max_batch_rows 크기 확장