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