brunch

You can make anything
by writing

C.S.Lewis

by 유윤식 Jun 08. 2018

Python: Spark-Kafka-Streaming

# 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 을 통해 재미있는 프로젝트를 기획하고 있다면 함께 이야기 해보고 싶다.


이번에는 코드를 따로 올릴 수 있는 부분이 없다.

대부분이 환경설정에 달려있는 프로젝트 였기에, 도움이 필요 하다면 자세한 내용을 따로 공유해 주고싶다.

요청이 있다면.

작가의 이전글 Python: Async-Webserver
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari