# Spark, # Python, # Kafka, # Websocket
이전에 Python Async 관련 글을 좀 적어 보았다.
Python 매우 매력적이고 위험한 언어!
잘 쓰면 너무나도 편리하게 업무를 끝낼 수 있다. 하지만...
반대의 경우는 거의 시간만 소비하고 스크립트 언에에 대한 반감을 가지게 된다.
오늘의 서론은 여기까지.
요새는 Spark 를 통해서 복잡한 데이터 가공 및 계산을 함으로써 데이터를 Handling 하는 Overhead를 줄이고자 노력하고 있다. 이전에는 kafka 의 데이터를 실시간으로 Polling 하는 방식으로 데이터를 가공 / 처리 했었는데 만족 할 수 없었다.
열심히 조사해본 결과, 다른 메이저급 회사에서는 이렇게 Spark / Python or Scala / Kafka / Websocket 을 잘 묶어서 사용하고 있다.
<시나리오>
1. 각 웹서버, IoT 장비의 로그를 Kafka 로 모은다.
2. Spark 를 통해서 kafka 의 Queue 를 Streaming 받는다.
3. 데이터 가공 / 처리한다.
4. Websocket Server 를 통해서 데이터를 Client 로 전송한다.
단순한 시나리오 안에서 좀 멋져 보이는 부분은 바로 'Streaming' 이다.
Realtime, 그 알 수 없는 세계에서 이를 가능하게 해주는 것이 바로 Spark 의 Streaming 함수다.
실제로 얼마나 많은 데이터를 Spark 위에서 처리 할 수 있는지는 테스트 할 수 없었다.
1주일 이상의 나름(?) Hard 하게 테스트를 진행하였고, 초 당 200개 정도의 JSON 로그를 가공 / 처리하는 작업을 통해서 안정성과 성능을 어느정도 인지하고 있는 상태이다.
나는 사내 DNS 관련 로그를 통해서 ML 을 구현하였다.
이를 Spark 위로 가져오는데는 환경설정 1주일 / 구현 하루.
의 시간이 소요되었다.
<개요>
1. DNS 사용량을 통계치로 만든다.
2. Query / Answer 를 나누고 특정 IP / DNS 를 찾아낸다.
3. 아웃라이어 / 플러드 와 같은 트래픽 이상징후를 찾아낸다.
단순한 개요.
이러한 결과들은 React 를 통해서 구현한 간단한 웹 페이지에서 실시간 변동 사항과 경고를 통해서
Slack 과 Git 을 통해서 받아 볼 수 있다.
React 를 일주일 정도 공부하다보니,
역시 나도 남들과 크게 다르지 않다는 사실을 알 수 있었다.
나 역시도 Redux 가 제일 짜증이 난다.
<정리>
1. kafka 도 좋다. Redis 도 좋다. 잘쓰면 다 좋다. 데이터 Queue 가 필요한 시점에서 잘 선택해서 쓰면 될 것 같다.
2. Spark 는 그냥 좋다. 데이터 가공 / 처리를 통한 통계적 수치계산, ML 을 한다면 일단 1순위로 고려해 볼 만 하다.
3. Websocket 서버는 한 번 잘 만들어 놓으면 된다.
4. React 는 대세다!
혹시!
데이터 쪽에서 좋은 경험이나 ML 을 통해 재미있는 프로젝트를 기획하고 있다면 함께 이야기 해보고 싶다.
이번에는 코드를 따로 올릴 수 있는 부분이 없다.
대부분이 환경설정에 달려있는 프로젝트 였기에, 도움이 필요 하다면 자세한 내용을 따로 공유해 주고싶다.
요청이 있다면.