4. About
me
• JBoss
User
Group
Korea
온오프라인 개발자 커뮤니티 운영자
• Facebook 그룹 실시간빅데이터처리기술 온라인 커뮤니티 운영자
• 실시간 빅데이터 플랫폼 전문 개발자
• 현 DaumKakao
개발자
• 전 kth
DAISY
개발자
• www.facebook.com/tedwon
• tedwon.atlassian.net
17. Real-‐Eme
시스템의 특징
• EDA
기반 아키텍처로 구현해야 함!
– Event-‐driven
Architecture
• 실시간이란 상대적인 개념
• 요건에 따라 실시간의 범위가 정의될 수 있음
• 실시간 서비스 수준 정의가 필요
• 실시간 시스템의 SLA 정의 및 합의 필요
18. Real-‐Eme
시스템의 키포인트
• 낮은
수준의
지연
시간
– Low
latency
• 일정한
응답
속도의
보장
– RegulariEes
in
Response
Eme
• 예측
가능한
성능
제공
– Providing
predictable
performance
ü 결국 낮은 지연 시간을 일정하게 최대한 오래 유지 (24/7)
19. Real-‐Eme
서비스 수준 정의
• Latency
정규 분포 통계 계산
Throughput 995,900 (active 0 pending 0)
나노세컨드 단위 측정
5 μs 수준의 성능
20. Real-‐Eme
서비스 수준 정의
• Near
Real-‐'me
– Minutes
수준의
지연
시간
보장
• Real-‐'me
– Seconds,
Milliseconds
수준
보장
• Real
Real-‐'me
– Microseconds
수준
보장
ü 구체적인
범위
정의는
비즈니스
SLA
요구
수준에
따라
결정됨
21. Streaming의 EDA 아키텍처
• EDA기반으로 사람의 감각 기관 및 반응 구조와 유사
– Event-‐driven
Architecture
눈, 귀 등의 감각 기관 생각, 판단 손, 발의 반응
22. Streaming과 일반 방식의 비교
배치, 요청/응답 방식
스트리밍 방식
Request/Response
EDA
동기 처리
비동기 처리
Response
ReacEon
선저장 후처리
선처리 후저장
28. Apache
KaVa
이야기
• Publish-‐subscribe
방식의 고성능 분산 메시징 시스템
• Topic과 Queue
개념이 합쳐진 모델
• LinkedIn
SNA팀에서 개발하고 서비스에 사용 중
– 2011년 시작
– Scala,
Java 구현
• LinkedIn에서 2014년 기준 300개가 넘는 브로커 운영
– 18,000개의 토픽
– 하루에 2,200억 메세지 처리
29. Apache
KaVa
이야기
h^p://www.slideshare.net/fullscreen/cloudera/introducEon-‐to-‐apache-‐kaVa/1
30. Apache
KaVa
이야기
• 사용하기 쉬운 API,
설정 옵션
• Zero-‐copy
방식으로 고성능 읽기 기능
• Scale-‐out
아키텍처
• Producer측에서 파티셔너를 구현해 분산 저장 조절
• 배치 단위 전송,
압축 기능등 효율적인 전송 기능
• 성능을 위해 OS와 Log
디스크 드라이브를 분리
• KaVa
+
Stream
Processor
조합으로 활용
31. KaVa
in
Neclix
h^ps://gigaom.com/2013/12/09/neclix-‐open-‐sources-‐its-‐data-‐traffic-‐cop-‐suro
32. Apache
KaVa
이야기
h^p://www.cloudera.com/content/cloudera/en/developers/home/cloudera-‐labs/apache-‐kaVa.html
34. 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
41. Esper
CEP
이야기
• 1990년대부터 시작된 전통적인 Event
Stream 처리 기술
• Complex
Event
Processing을 구현 오픈 소스 Esper
• 복합적인 event를 참조하여 패턴을 알아 차리는 기술
• Data
Window,
Pa^ern
matching
기능이 핵심
• ConEnuous
Query
EPL
제공
• 10억분의 1초(ns) 단위의 성능 è 초고성능 가능
43. Esper
이야기
• 실시간 ETL
처리 후 HDFS 저장
Thrift Server Hadoop FileSystem API
ETL EPL 작성
(Extract, Transform, Load)
44. Esper
CEP
이야기
최근 30분내 강남에 있었던 급여가 10M
이상이며
나이가 30~35세 이상이고 취미가 쇼핑인 여성
select * from customer(age=‘30~35’,
gender=‘female’, salary>10M, location=‘강남’,
hobby=‘shopping’).win:time(30 min)
45. 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) )]
48. Apache
Storm
이야기
• Twi^er의 실시간 스트리밍 데이터 분석 솔루션
• Real-‐Eme
Hadoop 같은 존재
• 스트림 분산 처리 아키텍처
• Transac'onal 스트림 처리 기능
• 분산 RPC
기능
• 이벤트 처리 보장 기능
• 지속적인 버전업 중, 커뮤니티 활발
• 국내 레퍼런스 많음
53. 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
적용 가능 수준 상태
62. JBoss
Infinispan
이야기
• JBoss
커뮤니티의 오픈 소스 프로젝트
– Scala,
Java
• Data
Grid,
In-‐memory
NoSQL,
분산 케시
• In-‐memory
HDFS 같은 존재
• 메모리 기반의 대용량 데이터 저장소
• 운영 중 노드 추가 가능, replica
기능 지원
• 안정적인 클러스터 운영 기능
63. JBoss
Infinispan
이야기
• 메타 데이터 관리 è 시스템 관리
• 성능/에러 모니터링 데이터 저장소 è Live
Charts
로 연동
• 마이닝 데이터 저장소 è 추천
• 실시간 데이터 저장소
• 등등 포텐 대박!!
74. Spark
Streaming
이야기
• 초단위 latency
• Streaming도 작은 배치의 연속으로 구현
• Storm의 TransacEonal
토폴로지와 유사한 개념
• 실제 실행은 마이크로 배치 잡처럼 수행
• 배치 윈도우 시간 내에 처리 가능하도록 만들어줘야함
• 각 배치 사이즈를 시간 간격 설정으로 조절 가능
75. Spark
Streaming
이야기
• Simple한 프로그래밍 모델 제공
• 분산 처리 환경에서 Time
Window
API
제공
• Stateful
스트림 프로세싱 기능 가능
• Task
실패시 재시도 기능 제공 è
fault-‐tolerance
• CMS
GC가 잘 동작
• Spark
배치와 동일한 관리자 UI
제공
• 로컬 테스트 용이
76. 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개의 태스크 수행
86. 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 추가
87. Summary
• 실시간 프로젝트를 위한 기본 개념은 필수
• 각 오픈 소스의 장점을 활용한 아키텍처 구성 필요
• 안정적인 데이터 수집 관리를 위해서는 KaVa는 현재 최고의 선택
• 운영 중 동적인 스트리밍 처리 로직 변경이 필요한 경우는 Esepr
• 실시간 분산 전처리용으로 Storm,
Spark
Streaming
• 인메모리 프로세싱과 Infinsipan은 찰떡 궁합
• 실시간의 특성상 성능 관리와 모니터링 중요