Airflow Issue #62945 — forward reference warning 버그 분석
분석 계기 Apache Airflow 공식 저장소의 good first issue 레이블을 훑다가 이 이슈를 발견했다. 재현 코드도 명확하고 범위가 좁아서 분석해봤다. https://github.com/apache/airflow/issues/62945 문제 상황 Airflow에는 TaskFlow API라는 기능이 있는데, @task 데코...
분석 계기 Apache Airflow 공식 저장소의 good first issue 레이블을 훑다가 이 이슈를 발견했다. 재현 코드도 명확하고 범위가 좁아서 분석해봤다. https://github.com/apache/airflow/issues/62945 문제 상황 Airflow에는 TaskFlow API라는 기능이 있는데, @task 데코...
LOAD DATA LOCAL INFILE이란? MySQL에서는 로컬 파일 시스템에 있는 CSV나 TSV 데이터를 테이블로 불러올 때 LOAD DATA LOCAL INFILE 명령을 쓴다. 예시: LOAD DATA LOCAL INFILE '/path/to/data.csv' INTO TABLE users FIELDS TERMINATED BY ','...
개요 Spark Structured Streaming을 사용해 Kafka로부터 데이터를 처리하는 과정에서 inputRowsPerSecond, processedRowsPerSecond, batchDuration 등의 지표를 Prometheus로 수집해 모니터링할 수 있도록 구성했다. Spark 3.5 버전은 Prometheus Sink를 기본적으로 ...
배경 Prometheus로 Kafka와 Spark 애플리케이션을 모니터링한 뒤, 이번에는 EC2 서버 자체의 자원(CPU, 메모리, 디스크, 네트워크 등)을 모니터링하기 위해 Node Exporter를 설치하고 Grafana와 연동했다. 이 과정에서 포트 충돌, systemd 등록 오류, Grafana 대시보드 설정 등 실무에서도 자주 겪는 이슈를 ...
배경 Prometheus로 Kafka와 Spark의 상태를 모니터링하던 중 메트릭 수집 실패 및 포트 충돌 에러가 발생했다. Kafka와 Spark 모두 JVM 기반 애플리케이션이라 Prometheus에서 직접 지표를 긁어오려면 JMX Exporter 설정이 필요하다. 이번 글에서는 기존 사이드카 컨테이너 방식에서 Java Agent 방식으로 전환...
배경 Airflow를 이용해 데이터 파이프라인을 운영하다 보면, Spark 작업을 DAG에서 실행해야 할 때가 많다. 보통은 Airflow DAG에서 BashOperator로 docker exec을 사용해 Spark 컨테이너에 명령을 전달하는 방식을 많이 쓴다. 그런데 이 과정에서 docker.sock 권한 문제 때문에 DAG 실행이 실패하는 상황...
배경 Redis Stack에서 제공하는 TimeSeries (TSDB) 모듈은 실시간 시계열 데이터를 저장할 때 자주 사용된다. 그런데 Kafka → Spark Streaming → Redis로 데이터를 흘려보내다 보면, 같은 timestamp 값이 중복으로 들어오는 경우가 생기는데, 이때 DUPLICATE_POLICY 설정에 따라 동작이 달라진다....
배경 Kafka를 Docker 기반으로 실행하다 보면, Spark Streaming과 연동 시 Listener 설정 불일치 때문에 접속 에러가 발생할 수 있다. 이번 글에서는 StreamingQueryException: Failed to create new KafkaAdminClient 에러를 다루고, 내부/외부 Listener 설정 차이로 인해 생...
Kafka 개발 환경에서 마주친 문제 ETL 파이프라인과 스트리밍 처리를 위해 Kafka를 Docker Compose로 띄우던 중, 컨테이너를 내렸다가 다시 올릴 때마다 아래와 같은 에러가 발생했다. kafka.common.InconsistentClusterIdException: The Cluster ID XXX-XXX doesn't match ...
배경 실시간 스트리밍 처리를 위해 Kafka 토픽(topic)에 쌓이는 데이터를 Spark Streaming으로 읽어와야 했다. Kafka에서 토픽은 메시지가 저장되는 기본 단위다. 프로듀서(Producer)가 데이터를 특정 토픽으로 보내면, 컨슈머(Consumer)는 해당 토픽을 구독(subscribe)해서 메시지를 받아간다. 즉, 토픽은 “실시...