본문 바로가기

분류 전체보기206

카프카가 빠른 이유 목차Sequential I/O와 Page CacheZero-CopyBatching과 압축Partition = Lock-Free 병렬성네트워크 레이어종합 + 벤치마크참고Sequential I/O와 Page Cache카프카가 빠른 이유를 한 문장으로 말하면: 디스크에 sequential 하게만 접근하고, OS에게 캐싱을 맡긴다. 디스크의 물리학흔히 "디스크는 느리다"고 하지만, 이건 random access에 한정된 얘기다.HDD: random seek에 ~10ms가 걸리지만 sequential read는 200MB/s 이상 나온다. 같은 디스크에서 1000배 차이.SSD: random 4KB IOPS가 100K 수준이라 해도, sequential bandwidth는 3~7GB/s(NVMe)까지 간다. 여전.. 2026. 8. 15.
K8s + Spring Boot: Graceful Shutdown 제대로 이해하기 목차문제: Rolling Update 시 502가 나는 이유Spring Boot에서의 구현: 애플리케이션 계층K8s 배포 설정: 인프라 계층최종 설정 및 마무리문제: Rolling Update 시 502가 나는 이유Pod는 어떻게 죽는가Pod 삭제 요청이 API Server에 도달하면 두 가지가 동시에 실행된다. 핵심은 경로 A와 B가 비동기라는 것이다.Race Condition: 502의 정체preStop hook이 없으면 kubelet은 즉시 SIGTERM을 보낸다. Spring Boot는 SIGTERM을 받는 순간 새 요청 수신을 거부한다. 그런데 경로 B의 Endpoint 제거/전파는 아직 진행 중이다. kube-proxy가 iptables 규칙을 갱신하기까지, Ingress Controller가.. 2026. 8. 12.
tokyo 2026 2026. 6. 7.
배치 vs 마이크로배치 vs 스트리밍, 그리고 Flink 서버 개발자에게 "요청이 들어오면 즉시 응답한다"는 자연스러운 사고방식이다. 하지만 데이터 처리의 세계에서는 "언제 처리할 것인가" 자체가 아키텍처를 결정하는 첫 번째 질문이 된다.어제 하루치 주문 데이터를 집계해서 리포트를 만든다 → 배치최근 10초간 쌓인 클릭 로그를 모아서 대시보드를 갱신한다 → 마이크로배치사용자가 결제 버튼을 누른 바로 그 순간 이상 거래를 탐지한다 → 스트리밍 세 가지 모델은 "진화의 단계"가 아니다. 각각 고유한 트레이드오프를 가진 선택지다. 이 글에서는 세 모델의 차이를 명확히 정리하고, 스트리밍이 필요한 순간에 왜 Apache Flink가 강력한 선택지인지를 이야기한다.레이턴시처리 모델대표 기술일 단위BatchSpark, Hive분 단위Micro-batchSpark Stru.. 2026. 3. 25.
Data Skew 진단과 해결 Spark on Kubernetes 클러스터에서 ETL 잡을 돌리다 보면, 대부분의 Executor Pod는 멀쩡한데 딱 한두 개 Pod만 OOMKilled로 죽는 상황을 마주하게 된다. 로그를 열어보면 해당 Pod에 할당된 파티션의 데이터가 다른 파티션 대비 수십~수백 배 많다. 이것이 Data Skew 문제다. Data Skew는 Spark만의 문제가 아니다. 데이터를 키(key) 기반으로 분산하는 모든 시스템 — Kafka, Flink, DB 샤딩, MapReduce — 에서 동일한 구조적 원인으로 발생한다. 이 글에서는 Data Skew가 왜 발생하는지 근본 원인을 파악하고, Spark에서의 구체적 해결법과 함께 분산 시스템 전반에 적용 가능한 포괄적 전략을 다룬다.목차Data Skew란 무엇인.. 2026. 3. 17.
JVM Container OOMKilled 트러블슈팅 가이드 JVM 위에서 돌아가는 서비스를 Kubernetes/컨테이너로 운영하다 보면, OOMKilled라는 메시지를 한 번쯤 마주하게 된다. OOMKilled는 Linux 커널의 OOM(Out Of Memory) Killer가 메모리 한도를 초과한 프로세스를 강제 종료(SIGKILL) 하는 것을 말한다. 컨테이너 환경에서는 cgroup(Control Group — Linux 커널이 프로세스 그룹별로 CPU, 메모리 등 자원 사용량을 격리·제한하는 메커니즘)이 설정한 메모리 limit을 프로세스의 RSS(Resident Set Size — 프로세스가 실제로 점유하고 있는 물리 메모리 크기) + Page Cache(파일 I/O 시 커널이 디스크 데이터를 RAM에 캐싱해 둔 영역)가 초과하면 발생한다. 프로세스는 .. 2026. 3. 11.