← Apache Flink 코스

Courses · Day 4

실습 — 개인 PC 로컬 환경에서 직접 돌려보기

스텝 13 / 17

13 / 17
실습 flink-course-13

PyFlink로 Kafka 소스 windowed aggregation 구현

실습 순서

  1. 가상환경에서 `pip install apache-flink`를 실행한다.
  2. 간단한 Python 프로듀서(또는 kafka-console-producer)로 `sensor-readings` 토픽에 `{"sensor_id": "A", "temperature": 23.5, "event_time": <ms>}` 형태의 JSON 이벤트를 몇 초 간격으로 계속 흘려보낸다.
  3. PyFlink 스크립트를 작성한다: Kafka 소스 연결 → JSON 파싱 → Day 2에서 배운 event_time 기준 WatermarkStrategy.forBoundedOutOfOrderness(초 단위) 적용 → keyBy(sensor_id) → Day 3에서 배운 Tumbling Window(1분) → 평균 온도 집계.
  4. 스크립트를 실행하고, 콘솔(또는 print sink)에 1분마다 sensor_id별 평균 온도가 찍히는지 관찰한다.
  5. Flink Web UI의 Jobs 탭에서 방금 제출한 잡이 RUNNING 상태로 보이는지, 처리된 레코드 수(Records Sent/Received)가 올라가는지 확인한다.

기대 결과

1분(윈도우 크기)마다 sensor_id별 평균 온도 값이 콘솔에 출력되고, Flink Web UI의 잡 그래프에서 소스→keyBy→window→sink로 이어지는 연산자 체인과 레코드 처리량을 확인할 수 있다.

Troubleshooting

PyFlink 스크립트가 Kafka 커넥터를 못 찾는다는 에러

PyFlink는 Kafka 커넥터 jar를 별도로 다운로드해 classpath에 추가해야 한다(pip 패키지에 기본 포함 안 됨) — 공식 문서의 'Kafka SQL Connector' 다운로드 안내를 따른다.

윈도우 결과가 전혀 안 찍힌다

watermark가 윈도우 종료 시점을 넘어서야 결과가 나온다는 점(Day 3-1)을 다시 떠올려본다 — 프로듀서가 계속 새 이벤트를 보내고 있는지, event_time이 실제로 증가하고 있는지 확인.