지금 핫한 real-time in-memory stream processing 이야기

93
지금 핫한 Real’me Inmemory Stream Processing 이야기 tedwon [email protected]

Upload: ted-won

Post on 07-Jul-2015

7.313 views

Category:

Data & Analytics


4 download

DESCRIPTION

실시간 데이터 처리 프로젝트를 위한 오픈 소스와 아키텍처 사례 소개

TRANSCRIPT

Page 1: 지금 핫한 Real-time In-memory Stream Processing 이야기

지금  핫한    Real-­‐'me  In-­‐memory    

Stream  Processing  이야기  tedwon  

[email protected]  

Page 2: 지금 핫한 Real-time In-memory Stream Processing 이야기

우리 나라 사람들이  

특히 좋아하는 이야기  

Page 3: 지금 핫한 Real-time In-memory Stream Processing 이야기

빠르면 빠를 수록 좋치요~  

Page 4: 지금 핫한 Real-time In-memory Stream Processing 이야기

About  me  •  JBoss  User  Group  Korea  온오프라인 개발자 커뮤니티 운영자  •  Facebook 그룹 실시간빅데이터처리기술 온라인 커뮤니티 운영자  •  실시간 빅데이터 플랫폼 전문 개발자  •  현 DaumKakao  개발자  

•  전 kth  DAISY  개발자  •  www.facebook.com/tedwon  •  tedwon.atlassian.net  

Page 5: 지금 핫한 Real-time In-memory Stream Processing 이야기

언제 어디서  Streaming  기술이  유용할까요??  

Page 6: 지금 핫한 Real-time In-memory Stream Processing 이야기

알고리즘 주식 트레이딩  

지난 30분간의 주문 상품 Top10  

온라인몰 사용자 클릭 스트림기반 개인화 추천

모바일 광고 타겟팅 서비스

실시간 금융 사기 방지  

Streaming  기술의  Use  Cases  

Page 7: 지금 핫한 Real-time In-memory Stream Processing 이야기

Streaming  기술의  Use  Cases  

•  테러 방지  •  실시간 분석/추천/광고  •  실시간 모니터링  •  제조 공정 관리  •  보안 관제  •  금융/통신  •  의료/헬스케어  •  IoT(Internet  of  Things)  

Page 8: 지금 핫한 Real-time In-memory Stream Processing 이야기

Streaming  기술의  Use  Cases  

Page 9: 지금 핫한 Real-time In-memory Stream Processing 이야기

Streaming  시스템의  Data  Flow  

Page 10: 지금 핫한 Real-time In-memory Stream Processing 이야기
Page 11: 지금 핫한 Real-time In-memory Stream Processing 이야기
Page 12: 지금 핫한 Real-time In-memory Stream Processing 이야기

Fast  Data  

Page 13: 지금 핫한 Real-time In-memory Stream Processing 이야기

funcEon(events,  Eme)  

Page 14: 지금 핫한 Real-time In-memory Stream Processing 이야기

실시간의 개념부터 살짝  

정리하고 시작합시다!  

Page 15: 지금 핫한 Real-time In-memory Stream Processing 이야기

실시간  Searching  

실시간 Batch  Job  

실시간 Streaming  

Page 16: 지금 핫한 Real-time In-memory Stream Processing 이야기

Real-­‐'me  ==  Streaming  전제하에 이야기를  진행 하겠습니다  

Page 17: 지금 핫한 Real-time In-memory Stream Processing 이야기

Real-­‐Eme  시스템의 특징  

•  EDA  기반 아키텍처로 구현해야 함!  

–  Event-­‐driven  Architecture  

•  실시간이란 상대적인 개념  

•  요건에 따라 실시간의 범위가 정의될 수 있음  

•  실시간 서비스 수준 정의가 필요  

•  실시간 시스템의 SLA 정의 및 합의 필요  

Page 18: 지금 핫한 Real-time In-memory Stream Processing 이야기

Real-­‐Eme  시스템의 키포인트  

•  낮은  수준의  지연  시간  –  Low  latency  

•  일정한  응답  속도의  보장  –  RegulariEes  in  Response  Eme  

•  예측  가능한  성능  제공  

–  Providing  predictable  performance    ü 결국 낮은 지연 시간을 일정하게 최대한 오래 유지 (24/7)  

Page 19: 지금 핫한 Real-time In-memory Stream Processing 이야기

Real-­‐Eme  서비스 수준 정의  

•  Latency  정규 분포 통계 계산   Throughput 995,900 (active 0 pending 0)

5 µs 수준의 성능

나노세컨드 단위 측정

Page 20: 지금 핫한 Real-time In-memory Stream Processing 이야기

Real-­‐Eme  서비스 수준 정의  

•  Near  Real-­‐'me  

–  Minutes  수준의  지연  시간  보장  

•  Real-­‐'me  

–  Seconds,  Milliseconds  수준  보장  

•  Real  Real-­‐'me  

–  Microseconds  수준  보장  

ü 구체적인  범위  정의는  비즈니스  SLA  요구  수준에  따라  결정됨  

Page 21: 지금 핫한 Real-time In-memory Stream Processing 이야기

Streaming의 EDA 아키텍처  •  EDA기반으로 사람의 감각 기관 및 반응 구조와 유사  

–  Event-­‐driven  Architecture  

눈, 귀 등의 감각 기관 생각, 판단 손, 발의 반응

Page 22: 지금 핫한 Real-time In-memory Stream Processing 이야기

Streaming과 일반 방식의 비교  배치, 요청/응답 방식   스트리밍 방식  Request/Response   EDA  

동기 처리   비동기 처리  Response   ReacEon  

선저장 후처리   선처리 후저장  

Page 23: 지금 핫한 Real-time In-memory Stream Processing 이야기

가장 먼저  

실시간 로그 수집부터 이슈  

Page 24: 지금 핫한 Real-time In-memory Stream Processing 이야기

 

실시간 분산 로그 수집기  

Page 25: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  KaVa  이야기  

Page 26: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  KaVa  이야기  

Page 27: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  KaVa  이야기  

Page 28: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  KaVa  이야기  

•  Publish-­‐subscribe  방식의 고성능 분산 메시징 시스템  

•  Topic과 Queue  개념이 합쳐진 모델  

•  LinkedIn  SNA팀에서 개발하고 서비스에 사용 중  

–  2011년 시작  

–  Scala,  Java 구현  

•  LinkedIn에서 2014년 기준 300개가 넘는 브로커 운영  

–  18,000개의 토픽  

–  하루에 2,200억 메세지 처리  

Page 29: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  KaVa  이야기  

h^p://www.slideshare.net/fullscreen/cloudera/introducEon-­‐to-­‐apache-­‐kaVa/1  

Page 30: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  KaVa  이야기  

•  사용하기 쉬운 API,  설정 옵션  

•  Zero-­‐copy  방식으로 고성능 읽기 기능  

•  Scale-­‐out  아키텍처  

•  Producer측에서 파티셔너를 구현해 분산 저장 조절  

•  배치 단위 전송,  압축 기능등 효율적인 전송 기능  

•  성능을 위해 OS와 Log  디스크 드라이브를 분리  

•  KaVa  +  Stream  Processor  조합으로 활용

Page 31: 지금 핫한 Real-time In-memory Stream Processing 이야기

KaVa  in  Neclix  

h^ps://gigaom.com/2013/12/09/neclix-­‐open-­‐sources-­‐its-­‐data-­‐traffic-­‐cop-­‐suro  

Page 32: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  KaVa  이야기  

h^p://www.cloudera.com/content/cloudera/en/developers/home/cloudera-­‐labs/apache-­‐kaVa.html  

Page 33: 지금 핫한 Real-time In-memory Stream Processing 이야기
Page 34: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  KaVa  이야기  주키퍼 시작 > bin/zookeeper-server-start.sh config/zookeeper.properties 카프카 서버 시작 > bin/kafka-server-start.sh config/server.properties 토픽 생성 > bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test 로그 생성 > bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 로그 처리 > bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

Page 35: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  KaVa  이야기  

High  Level  Consumer  API  

Simple  Consumer  API  

Page 36: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  KaVa  모니터링  •  JBoss  RHQ  모니터링 통합 플랫폼

Page 37: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  KaVa  모니터링  •  QuanEfind의 KaVa  Offset  Monitor

Page 38: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  KaVa  모니터링  •  QuanEfind의 KaVa  Offset  Monitor

Page 39: 지금 핫한 Real-time In-memory Stream Processing 이야기

써보니 결국 각자  R&R이 있었습니다  

Page 40: 지금 핫한 Real-time In-memory Stream Processing 이야기

 

Complex  Event  Processing  

Page 41: 지금 핫한 Real-time In-memory Stream Processing 이야기

Esper  CEP  이야기  

•  1990년대부터 시작된 전통적인 Event  Stream 처리 기술  

•  Complex  Event  Processing을 구현 오픈 소스 Esper  

•  복합적인 event를 참조하여 패턴을 알아 차리는 기술  

•  Data  Window,  Pa^ern  matching  기능이 핵심  

•  ConEnuous  Query  EPL  제공  

•  10억분의 1초(ns) 단위의 성능 è 초고성능 가능

Page 42: 지금 핫한 Real-time In-memory Stream Processing 이야기

Esper  이야기  •  Esper  기본 아키텍처  

Page 43: 지금 핫한 Real-time In-memory Stream Processing 이야기

Esper  이야기  •  실시간 ETL  처리 후 HDFS 저장  

Hadoop FileSystem API Thrift Server

ETL EPL 작성 (Extract, Transform, Load)

Page 44: 지금 핫한 Real-time In-memory Stream Processing 이야기

Esper  CEP  이야기  

최근 30분내 강남에 있었던 급여가 10M  이상이며  

나이가 30~35세 이상이고 취미가 쇼핑인 여성

select * from customer(age=‘30~35’, gender=‘female’, salary>10M, location=‘강남’, hobby=‘shopping’).win:time(30 min)

Page 45: 지금 핫한 Real-time In-memory Stream Processing 이야기

Esper  CEP  이야기  

“Asset이 서로 다른 Zone으로 이동 후

10초 이상 머무르면,  경보를 알려라”

select Part.zone from pattern [ every Part=CountZone(cnt in (1, 2)) -> ( not CountZone(zone=Part.zone, cnt in (0, 3)) and timer:interval(10 sec) )]

Page 46: 지금 핫한 Real-time In-memory Stream Processing 이야기

Esper  CEP  이야기  

단일 노드(JVM)의 한계  

Page 47: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  Storm  이야기  

Page 48: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  Storm  이야기  

•  Twi^er의 실시간 스트리밍 데이터 분석 솔루션

•  Real-­‐Eme  Hadoop 같은 존재  

•  스트림 분산 처리 아키텍처  

•  Transac'onal 스트림 처리 기능  

•  분산 RPC  기능  

•  이벤트 처리 보장 기능

•  지속적인 버전업 중, 커뮤니티 활발

•  국내 레퍼런스 많음  

Page 49: 지금 핫한 Real-time In-memory Stream Processing 이야기

Nimbus  Supervisor  Worker  

Spout/Bolt  Transac'onal  Spout/Bolt  

Trident  

Apache  Storm 키워드  

Page 50: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  Storm  이야기  

•  Real-­‐Eme  MapReduce  JobTracker  

TaskTracker  

Page 51: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  Storm  이야기  

Page 52: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  Storm  이야기  

Page 53: 지금 핫한 Real-time In-memory Stream Processing 이야기

KaVa  +  Storm  IntegraEon  

•  Storm  프로젝트의 통합 모듈에 포함  

–  h^ps://github.com/apache/storm/tree/master/external/storm-­‐kaVa  

•  Simple  Consumer  API로 구현  

•  Storm  Spout에서 KaVa  메세지 offset  직접 관리  

•  KaVa  +  Storm  조합 사용 사례 많음  

•  ProducEon  적용 가능 수준 상태  

Page 54: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  Storm  이야기  

Page 55: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  Storm  Distributed  RPC  

Page 56: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  Storm  Trident  •  Codes

Page 57: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  Storm  Trident  •  Compile  Down

Page 58: 지금 핫한 Real-time In-memory Stream Processing 이야기
Page 59: 지금 핫한 Real-time In-memory Stream Processing 이야기

Apache  Storm  이야기  

좀 더 간단하면 안되겠니??  

Page 60: 지금 핫한 Real-time In-memory Stream Processing 이야기

현재 실시간 플랫폼의 아쉬운점  

•  실시간 분산 환경에서 고성능으로 데이터 공유의 어려움  

•  분산 환경에서 Time  Window  제공이 어려움  

•  로우 레벨 코드 작업이 큼  

•  배치 분석 시스템과 개별 운영 공수 필요  

•  클러스터 리소스 공유의 어려움  

Page 61: 지금 핫한 Real-time In-memory Stream Processing 이야기

실시간 시스템 아키텍처 사례  

Page 62: 지금 핫한 Real-time In-memory Stream Processing 이야기

JBoss  Infinispan  이야기  

•  JBoss  커뮤니티의 오픈 소스 프로젝트  

–  Scala,  Java  

•  Data  Grid,  In-­‐memory  NoSQL,  분산 케시  

•  In-­‐memory  HDFS 같은 존재  

•  메모리 기반의 대용량 데이터 저장소  

•  운영 중 노드 추가 가능, replica  기능 지원  

•  안정적인 클러스터 운영 기능  

Page 63: 지금 핫한 Real-time In-memory Stream Processing 이야기

JBoss  Infinispan  이야기  

•  메타 데이터 관리 è 시스템 관리  

•  성능/에러 모니터링 데이터 저장소 è Live  Charts  로 연동  

•  마이닝 데이터 저장소 è 추천  

•  실시간 데이터 저장소  

•  등등 포텐 대박!!  

Page 64: 지금 핫한 Real-time In-memory Stream Processing 이야기

새로운 분석 플랫폼의 등장  

Page 65: 지금 핫한 Real-time In-memory Stream Processing 이야기

새로운 분석 플랫폼 Apache  Spark  

One  pla[orm  to  rule  them  all    

…  and  blurs  boundary  between  SQL,  machine  learning,  streams  &  graphs  

Page 66: 지금 핫한 Real-time In-memory Stream Processing 이야기

h^p://spark-­‐summit.org/wp-­‐content/uploads/2013/10/Stoica-­‐SparkSummit-­‐Ion.final_.pdf  

현재 분석 플랫폼의 아키텍처  

Page 67: 지금 핫한 Real-time In-memory Stream Processing 이야기
Page 68: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming  

새로운 스트리밍 플랫폼  

Page 69: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming 이야기  

RDD  

Resilient  Distributed  Datasets  

Immutable  Parallelized  Collec6ons  

 

Page 70: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming 이야기  

DStreams  

Discre6zed  Streams  

연속된 RDD  

Page 71: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming 이야기  

Page 72: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming 이야기  

Page 73: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming 이야기  

Page 74: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming  이야기  

•  초단위 latency    

•  Streaming도 작은 배치의 연속으로 구현  

•  Storm의 TransacEonal  토폴로지와 유사한 개념  

•  실제 실행은 마이크로 배치 잡처럼 수행  

•  배치 윈도우 시간 내에 처리 가능하도록 만들어줘야함  

•  각 배치 사이즈를 시간 간격 설정으로 조절 가능  

Page 75: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming  이야기  

•  Simple한 프로그래밍 모델 제공  

•  분산 처리 환경에서 Time  Window  API  제공  

•  Stateful  스트림 프로세싱 기능 가능  

•  Task  실패시 재시도 기능 제공 è  fault-­‐tolerance  

•  CMS  GC가 잘 동작  

•  Spark  배치와 동일한 관리자 UI  제공  

•  로컬 테스트 용이  

 

Page 76: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming 튜닝 핵심 개념  SparkStreamingContext  'me  window:  10sec  blockInterval:  500ms  

으로 정의하면,    

RDD당 20개의 par''on  생성 (10,000/500)  20개의 태스크가 수행됨  

 

YARN에서 executor  1개 5개 vCore 할당시, 1vCore당 4개(20/5)  4개의 태스크 수행  

Page 77: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming  이야기  

Page 78: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming 이야기  

Stream을  Transforma6on  하고 또 해서  

Ac6on 하는 스토리  

요런게 스트림 그래프 (DAG)  

Page 79: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming 이야기  •  Transforma'on  API  

map(func)  

filter(func)  

flatMap(func)  

mapPar''ons(func)  

union(otherDataset)  

repar''on(numPar''ons)  

groupByKey([numTasks])  

reduceByKey(func,  [numTasks])  

updateStateByKey(func)  

Page 80: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming 이야기  •  Ac'on  API  

print()  

foreachRDD(func)  

saveAsTextFiles(prefix,  [suffix])  

saveAsHadoopFiles(prefix,  [suffix])  

saveAsObjectFiles(prefix,  [suffix])  

Page 81: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming 이야기  

Scala로된 샘플 코드 한 번 보실래요?  

Page 82: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming 이야기  

Page 83: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming 이야기  

Page 84: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming 이야기  

Page 85: 지금 핫한 Real-time In-memory Stream Processing 이야기

Spark  Streaming  on  YARN  

Page 86: 지금 핫한 Real-time In-memory Stream Processing 이야기

KaVa  +  Spark  IntegraEon  

•  KaVa  프로젝트 통합 모듈 존재  

–  KaVaInputDStream.scala  

–  h^ps://github.com/apache/spark/tree/master/external/kaVa  

•  High-­‐level  Consumer  API로 구현  

•  ProducEon  용은 아직 아닌 듯  

•  1.2.x  버전에서는 해결 될 듯  

–  ReliableKaVaReceiver.scala 추가  

Page 87: 지금 핫한 Real-time In-memory Stream Processing 이야기

Summary  

•  실시간 프로젝트를 위한 기본 개념은 필수  

•  각 오픈 소스의 장점을 활용한 아키텍처 구성 필요  

•  안정적인 데이터 수집 관리를 위해서는 KaVa는 현재 최고의 선택  

•  운영 중 동적인 스트리밍 처리 로직 변경이 필요한 경우는 Esepr  

•  실시간 분산 전처리용으로 Storm,  Spark  Streaming    

•  인메모리 프로세싱과 Infinsipan은 찰떡 궁합  

•  실시간의 특성상 성능 관리와 모니터링 중요  

Page 88: 지금 핫한 Real-time In-memory Stream Processing 이야기

Summary  

h^p://www.reacEvemanifesto.org  

•  ReacEve  Manifesto  

Page 89: 지금 핫한 Real-time In-memory Stream Processing 이야기

Streaming  기술이  

더욱 활발히 적용되길 바랍니다.  

Page 90: 지금 핫한 Real-time In-memory Stream Processing 이야기

Special  thanks  to  co-­‐workers!  

Page 91: 지금 핫한 Real-time In-memory Stream Processing 이야기

Thank  you!  

Page 92: 지금 핫한 Real-time In-memory Stream Processing 이야기

개발자 커뮤니티에서 함께해요~  hjps://www.facebook.com/groups/jbossusergroup  

hjps://www.facebook.com/groups/open.real'mecep  

Page 93: 지금 핫한 Real-time In-memory Stream Processing 이야기

References  •  h^p://kaVa.apache.org  •  h^p://esper.codehaus.org  •  h^p://storm.apache.org  •  h^p://spark.apache.org/docs/latest/programming-­‐guide.html  •  h^ps://www.usenix.org/system/files/conference/nsdi12/nsdi12-­‐final138.pdf  •  h^p://berlinbuzzwords.de/sites/berlinbuzzwords.de/files/media/documents/

andrew_psalEs_-­‐_sparkstreaming.pdf  •  h^p://www.michael-­‐noll.com/blog/2014/10/01/kaVa-­‐spark-­‐streaming-­‐integraEon-­‐example-­‐

tutorial  •  h^p://www.slideshare.net/ptgoetz/apache-­‐storm-­‐vs-­‐spark-­‐streaming  •  h^p://infinispan.org/infinispan-­‐7.0  •  h^p://blog.cloudera.com/blog/2014/07/jay-­‐kreps-­‐apache-­‐kaVa-­‐architect-­‐visits-­‐cloudera  •  h^p://www.slideshare.net/tedwon/realEmecepv26  •  h^p://www.slideshare.net/tedwon/real-­‐Eme-­‐bigdataanalyEcspracEcewithunstructureddata  •  h^p://www.slideshare.net/tedwon/complex-­‐event-­‐processing-­‐with-­‐esper-­‐11106262  •  h^p://www.slideshare.net/tedwon/red-­‐hat-­‐forum-­‐2012-­‐jboss-­‐rhq