Data Generators -> Kafka -> Spark Streaming -> PostgreSQL -> Grafana
- 랜덤 생성된 데이터들을 카프카 토픽으로 보냄 (Topics: iot, words)
- data-generators/iot_devices.py
- data-generators/words.py
- data-generators/seoul_bike_api.py (Not fake!)
- iot, words, bike 토픽을 구독하고 처리함
- 5초마다 토픽별로 필터링, 집계 및 timestamp관련 작업(for 실시간 시각화)을 한 후 PostgreSQL의 pipeline_db로 적재.
- StreamHandler.scala
- PostgreSQL에 담겨지는 데이터들을 시각화
Docker & docker-compose로 작성했으므로 간단히 실행해보자.
Dockerfile 링크: Docker Images repo
git clone https://github.com/JHLeeeMe/fake-data-pipeline.git
cd fake-data-pipeline && docker-compose up -d
# Check
docker-compose ps
여기까지하면 아래와 같은 컨테이너가 실행된다.
Spark: master(10.0.0.10), slave-1, slave-2, slave-3 (10.0.0.11 ~ 10.0.0.13)
Kafka: kafka-single-node(10.0.0.30)
PostgreSQL: postgresql(10.0.0.40)
Grafana: grafana(10.0.0.50)
master container에서 python script들을 실행하자.
docker exec -it master /bin/bash
# master container
master$ cd ~/fake-data-pipeline
master$ pip3 install -r requirements.txt
master$ python3 data-generators/iot_devices.py <home || seoul>
작성한 스크립트가 데몬실행에 적절하지 않음.
그러므로 3개의 콘솔창에 각 docker master로 접근해서 실행하면 된다.
아니면 스크립트 수정하자.
e.g.
3번 과정에 의해 fake 데이터들이 iot, words 토픽으로 보내지는 중
StreamHandler
를 실행시켜 데이터를 정제 후 PostgreSQL로 저장.
spark-submit 실행 스크립트를 만들어두었다.
docker exec -it master /bin/bash
# master container
master$ cd /root/fake-data-pipeline/StreamHandler
master$ ./run-spark-submit.sh
웹 브라우저를 켜고 localhost:3000
로 접속
(초기 id: admin, password: admin)
data source를 postgresql로 만들고 시각화
위 스크린샷에서 보여지는 대쉬보드는 grafana/dashboards에 올려둠
import해서 쓰면 될것이다. (이것까지 자동화해서 작성할 수 있어보이던데 귀찮아서 더 안찾아봄...)