Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

More Related Content

Slideshows for you

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

  1. 1. 지금 핫한 Real-­‐'me In-­‐memory Stream Processing 이야기 tedwon iamtedwon@gmail.com
  2. 2. 우리 나라 사람들이 특히 좋아하는 이야기
  3. 3. 빠르면 빠를 수록 좋치요~
  4. 4. About me • JBoss User Group Korea 온오프라인 개발자 커뮤니티 운영자 • Facebook 그룹 실시간빅데이터처리기술 온라인 커뮤니티 운영자 • 실시간 빅데이터 플랫폼 전문 개발자 • 현 DaumKakao 개발자 • 전 kth DAISY 개발자 • www.facebook.com/tedwon • tedwon.atlassian.net
  5. 5. 언제 어디서 Streaming 기술이 유용할까요??
  6. 6. Streaming 기술의 Use Cases 알고리즘 주식 트레이딩 지난 30분간의 주문 상품 Top10 온라인몰 사용자 클릭 스트림기반 개인화 추천 모바일 광고 타겟팅 서비스 실시간 금융 사기 방지
  7. 7. Streaming 기술의 Use Cases • 테러 방지 • 실시간 분석/추천/광고 • 실시간 모니터링 • 제조 공정 관리 • 보안 관제 • 금융/통신 • 의료/헬스케어 • IoT(Internet of Things)
  8. 8. Streaming 기술의 Use Cases
  9. 9. Streaming 시스템의 Data Flow
  10. 10. Fast Data
  11. 11. funcEon(events, Eme)
  12. 12. 실시간의 개념부터 살짝 정리하고 시작합시다!
  13. 13. 실시간 Searching 실시간 Batch Job 실시간 Streaming
  14. 14. Real-­‐'me == Streaming 전제하에 이야기를 진행 하겠습니다
  15. 15. Real-­‐Eme 시스템의 특징 • EDA 기반 아키텍처로 구현해야 함! – Event-­‐driven Architecture • 실시간이란 상대적인 개념 • 요건에 따라 실시간의 범위가 정의될 수 있음 • 실시간 서비스 수준 정의가 필요 • 실시간 시스템의 SLA 정의 및 합의 필요
  16. 16. Real-­‐Eme 시스템의 키포인트 • 낮은 수준의 지연 시간 – Low latency • 일정한 응답 속도의 보장 – RegulariEes in Response Eme • 예측 가능한 성능 제공 – Providing predictable performance ü 결국 낮은 지연 시간을 일정하게 최대한 오래 유지 (24/7)
  17. 17. Real-­‐Eme 서비스 수준 정의 • Latency 정규 분포 통계 계산 Throughput 995,900 (active 0 pending 0) 나노세컨드 단위 측정 5 μs 수준의 성능
  18. 18. Real-­‐Eme 서비스 수준 정의 • Near Real-­‐'me – Minutes 수준의 지연 시간 보장 • Real-­‐'me – Seconds, Milliseconds 수준 보장 • Real Real-­‐'me – Microseconds 수준 보장 ü 구체적인 범위 정의는 비즈니스 SLA 요구 수준에 따라 결정됨
  19. 19. Streaming의 EDA 아키텍처 • EDA기반으로 사람의 감각 기관 및 반응 구조와 유사 – Event-­‐driven Architecture 눈, 귀 등의 감각 기관 생각, 판단 손, 발의 반응
  20. 20. Streaming과 일반 방식의 비교 배치, 요청/응답 방식 스트리밍 방식 Request/Response EDA 동기 처리 비동기 처리 Response ReacEon 선저장 후처리 선처리 후저장
  21. 21. 가장 먼저 실시간 로그 수집부터 이슈
  22. 22. 실시간 분산 로그 수집기
  23. 23. Apache KaVa 이야기
  24. 24. Apache KaVa 이야기
  25. 25. Apache KaVa 이야기
  26. 26. Apache KaVa 이야기 • Publish-­‐subscribe 방식의 고성능 분산 메시징 시스템 • Topic과 Queue 개념이 합쳐진 모델 • LinkedIn SNA팀에서 개발하고 서비스에 사용 중 – 2011년 시작 – Scala, Java 구현 • LinkedIn에서 2014년 기준 300개가 넘는 브로커 운영 – 18,000개의 토픽 – 하루에 2,200억 메세지 처리
  27. 27. Apache KaVa 이야기 h^p://www.slideshare.net/fullscreen/cloudera/introducEon-­‐to-­‐apache-­‐kaVa/1
  28. 28. Apache KaVa 이야기 • 사용하기 쉬운 API, 설정 옵션 • Zero-­‐copy 방식으로 고성능 읽기 기능 • Scale-­‐out 아키텍처 • Producer측에서 파티셔너를 구현해 분산 저장 조절 • 배치 단위 전송, 압축 기능등 효율적인 전송 기능 • 성능을 위해 OS와 Log 디스크 드라이브를 분리 • KaVa + Stream Processor 조합으로 활용
  29. 29. KaVa in Neclix h^ps://gigaom.com/2013/12/09/neclix-­‐open-­‐sources-­‐its-­‐data-­‐traffic-­‐cop-­‐suro
  30. 30. Apache KaVa 이야기 h^p://www.cloudera.com/content/cloudera/en/developers/home/cloudera-­‐labs/apache-­‐kaVa.html
  31. 31. 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
  32. 32. Apache KaVa 이야기 High Level Consumer API Simple Consumer API
  33. 33. Apache KaVa 모니터링 • JBoss RHQ 모니터링 통합 플랫폼
  34. 34. Apache KaVa 모니터링 • QuanEfind의 KaVa Offset Monitor
  35. 35. Apache KaVa 모니터링 • QuanEfind의 KaVa Offset Monitor
  36. 36. 써보니 결국 각자 R&R이 있었습니다
  37. 37. Complex Event Processing
  38. 38. Esper CEP 이야기 • 1990년대부터 시작된 전통적인 Event Stream 처리 기술 • Complex Event Processing을 구현 오픈 소스 Esper • 복합적인 event를 참조하여 패턴을 알아 차리는 기술 • Data Window, Pa^ern matching 기능이 핵심 • ConEnuous Query EPL 제공 • 10억분의 1초(ns) 단위의 성능 è 초고성능 가능
  39. 39. Esper 이야기 • Esper 기본 아키텍처
  40. 40. Esper 이야기 • 실시간 ETL 처리 후 HDFS 저장 Thrift Server Hadoop FileSystem API ETL EPL 작성 (Extract, Transform, Load)
  41. 41. Esper CEP 이야기 최근 30분내 강남에 있었던 급여가 10M 이상이며 나이가 30~35세 이상이고 취미가 쇼핑인 여성 select * from customer(age=‘30~35’, gender=‘female’, salary>10M, location=‘강남’, hobby=‘shopping’).win:time(30 min)
  42. 42. 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) )]
  43. 43. Esper CEP 이야기 단일 노드(JVM)의 한계
  44. 44. Apache Storm 이야기
  45. 45. Apache Storm 이야기 • Twi^er의 실시간 스트리밍 데이터 분석 솔루션 • Real-­‐Eme Hadoop 같은 존재 • 스트림 분산 처리 아키텍처 • Transac'onal 스트림 처리 기능 • 분산 RPC 기능 • 이벤트 처리 보장 기능 • 지속적인 버전업 중, 커뮤니티 활발 • 국내 레퍼런스 많음
  46. 46. Apache Storm 키워드 Nimbus Supervisor Worker Spout/Bolt Transac'onal Spout/Bolt Trident
  47. 47. Apache Storm 이야기 JobTracker • Real-­‐Eme MapReduce TaskTracker
  48. 48. Apache Storm 이야기
  49. 49. Apache Storm 이야기
  50. 50. 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 적용 가능 수준 상태
  51. 51. Apache Storm 이야기
  52. 52. Apache Storm Distributed RPC
  53. 53. Apache Storm Trident • Codes
  54. 54. Apache Storm Trident • Compile Down
  55. 55. Apache Storm 이야기 좀 더 간단하면 안되겠니??
  56. 56. 현재 실시간 플랫폼의 아쉬운점 • 실시간 분산 환경에서 고성능으로 데이터 공유의 어려움 • 분산 환경에서 Time Window 제공이 어려움 • 로우 레벨 코드 작업이 큼 • 배치 분석 시스템과 개별 운영 공수 필요 • 클러스터 리소스 공유의 어려움
  57. 57. 실시간 시스템 아키텍처 사례
  58. 58. JBoss Infinispan 이야기 • JBoss 커뮤니티의 오픈 소스 프로젝트 – Scala, Java • Data Grid, In-­‐memory NoSQL, 분산 케시 • In-­‐memory HDFS 같은 존재 • 메모리 기반의 대용량 데이터 저장소 • 운영 중 노드 추가 가능, replica 기능 지원 • 안정적인 클러스터 운영 기능
  59. 59. JBoss Infinispan 이야기 • 메타 데이터 관리 è 시스템 관리 • 성능/에러 모니터링 데이터 저장소 è Live Charts 로 연동 • 마이닝 데이터 저장소 è 추천 • 실시간 데이터 저장소 • 등등 포텐 대박!!
  60. 60. 새로운 분석 플랫폼의 등장
  61. 61. 새로운 분석 플랫폼 Apache Spark One pla[orm to rule them all … and blurs boundary between SQL, machine learning, streams & graphs
  62. 62. 현재 분석 플랫폼의 아키텍처 h^p://spark-­‐summit.org/wp-­‐content/uploads/2013/10/Stoica-­‐SparkSummit-­‐Ion.final_.pdf
  63. 63. Spark Streaming 새로운 스트리밍 플랫폼
  64. 64. Spark Streaming 이야기 RDD Resilient Distributed Datasets Immutable Parallelized Collec6ons
  65. 65. Spark Streaming 이야기 DStreams Discre6zed Streams 연속된 RDD
  66. 66. Spark Streaming 이야기
  67. 67. Spark Streaming 이야기
  68. 68. Spark Streaming 이야기
  69. 69. Spark Streaming 이야기 • 초단위 latency • Streaming도 작은 배치의 연속으로 구현 • Storm의 TransacEonal 토폴로지와 유사한 개념 • 실제 실행은 마이크로 배치 잡처럼 수행 • 배치 윈도우 시간 내에 처리 가능하도록 만들어줘야함 • 각 배치 사이즈를 시간 간격 설정으로 조절 가능
  70. 70. Spark Streaming 이야기 • Simple한 프로그래밍 모델 제공 • 분산 처리 환경에서 Time Window API 제공 • Stateful 스트림 프로세싱 기능 가능 • Task 실패시 재시도 기능 제공 è fault-­‐tolerance • CMS GC가 잘 동작 • Spark 배치와 동일한 관리자 UI 제공 • 로컬 테스트 용이
  71. 71. 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개의 태스크 수행
  72. 72. Spark Streaming 이야기
  73. 73. Spark Streaming 이야기 Stream을 Transforma6on 하고 또 해서 Ac6on 하는 스토리 요런게 스트림 그래프 (DAG)
  74. 74. 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)
  75. 75. Spark Streaming 이야기 • Ac'on API print() foreachRDD(func) saveAsTextFiles(prefix, [suffix]) saveAsHadoopFiles(prefix, [suffix]) saveAsObjectFiles(prefix, [suffix])
  76. 76. Spark Streaming 이야기 Scala로된 샘플 코드 한 번 보실래요?
  77. 77. Spark Streaming 이야기
  78. 78. Spark Streaming 이야기
  79. 79. Spark Streaming 이야기
  80. 80. Spark Streaming on YARN
  81. 81. 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 추가
  82. 82. Summary • 실시간 프로젝트를 위한 기본 개념은 필수 • 각 오픈 소스의 장점을 활용한 아키텍처 구성 필요 • 안정적인 데이터 수집 관리를 위해서는 KaVa는 현재 최고의 선택 • 운영 중 동적인 스트리밍 처리 로직 변경이 필요한 경우는 Esepr • 실시간 분산 전처리용으로 Storm, Spark Streaming • 인메모리 프로세싱과 Infinsipan은 찰떡 궁합 • 실시간의 특성상 성능 관리와 모니터링 중요
  83. 83. Summary h^p://www.reacEvemanifesto.org • ReacEve Manifesto
  84. 84. Streaming 기술이 더욱 활발히 적용되길 바랍니다.
  85. 85. Special thanks to co-­‐workers!
  86. 86. Thank you!
  87. 87. 개발자 커뮤니티에서 함께해요~ hjps://www.facebook.com/groups/jbossusergroup hjps://www.facebook.com/groups/open.real'mecep
  88. 88. 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

×