Spark → Kafka → Postgres 파이프라인에서 UUID가 터트린 지뢰

Kafka와 Spark Structured Streaming을 이용해서 데이터 파이프라인을 구축하고 있었습니다. 완전히 컨테이너화된 시스템. 스택 구성은 이렇습니다: Kafka → 거래 데이터를 스트리밍으로 전송 Spark Structured Streaming → 실시간 처리 및 이상 거래 탐지 Postgres → 데이터 웨어하우스 모든 게 순조로웠습니다. 그런데 갑자기 등장한 한 놈. UUID 필드. 맞습니다 — UUID. 이제 어떤 일이 벌어졌는지 정확히 보여드릴게요. ✅ 원래 설계 Postgres 테이블을 이렇게 설계했죠: CREATE TABLE fact_transaction ( transaction_id UUID PRIMARY KEY, customer_id UUID REFERENCES dim_customer(customer_id), merchant_id UUID REFERENCES dim_merchant(merchant_id), ... ); Kafka는 UUID를 문자열로 직렬화해서 이벤트를 잘 뿌려주고 있었습니다 (JSON은 원래 UUID 타입이 없으니까요). ...

6월 7, 2025

🛡️ Spark Docker 스트리밍에서 Kerberos 사용자 인증 문제 해결

Spark, Kafka, Docker를 사용하여 실시간 스트리밍 파이프라인을 구축하던 중, Kerberos를 사용하지도 않았는데 Kerberos 인증과 관련된 Spark 오류가 발생했습니다. org.apache.hadoop.security.KerberosAuthException: failure to login: javax.security.auth.login.LoginException: java.lang.NullPointerException: invalid null input: name ❓ 문제가 발생한 원인은? 공식 apache/spark:3.5.0 Docker 이미지를 사용하고 있었습니다. Docker 내부의 Spark가 Hadoop의 기본 인증 메커니즘을 해결하려고 시도했습니다. Hadoop은 다음을 통해 현재 OS 사용자를 검색하려고 했습니다: UnixPrincipal(name) Docker 컨테이너 내부에서 앱이 적절한 사용자명 매핑이 없는 UID/GID로 실행되고 있었습니다. 이로 인해 다음과 같은 오류가 발생했습니다: invalid null input: name UnixPrincipal()이 null을 받았기 때문입니다. ...

6월 7, 2025

🫙 Spark Streaming의 마지막 장애물: 왜 --jars 만으로 Kafka가 안 될까

데이터 엔지니어로서 복잡한 분산 시스템을 구축하면서 마지막 장애물을 넘었을 때 느끼는 성취감은 정말 특별합니다. 오늘은 Apache Spark Structured Streaming + Kafka를 사용할 때 굉장히 답답한 문제를 공유하려고 합니다: 👉 바로 악명 높은 Failed to find data source: kafka 에러입니다. 🧨 문제: 모든 게 정상인데 Kafka만 안 된다 상황을 떠올려봅시다: Spark 클러스터 정상 구동 Postgres 연결도 문제 없음 Kafka에서 이벤트도 잘 발행됨 코드에서 .readStream.format("kafka") 호출 그런데 갑자기 다음과 같은 에러가 발생: ...

6월 7, 2025