eBay에서 Pulsar라는 실시간 데이터 분석 툴을 오픈소스로 공개하였다.
공식 문서에 따르면, Pulsar는 Scalability, Availability, Flexibility를 강조한 실시간 데이터 분석 및 모니터링 툴이다.
Pulsar의 key point와 정리는 다음의 포스트를 참고하기 바란다.
eBay Pulsar: real-time analytics platform
위의 포스팅에서 간략하게 정리가 되어있기 때문에, 이번 포스팅에서는 Pulsar의 구성에 관해 설명하고 설치 방법에 대하여 번역하였다. 해당 원문은 다음 링크에서 확인 가능하다.
https://github.com/pulsarIO/realtime-analytics/wiki/Get-Started
Pulsar는...
스트리밍 SQL을 사용한 인터넷 스케일 실시간 분석 툴이다.
Pipeline Components
Pulsar pipeline은 Jetstream framework의 상단에 내장되어 있다. 이 pipeline은 아래와 같은 구성으로 되어있다.
1. Collector : 이벤트를 지역 정보 분류와 기기 타입을 탐지하여 REST endpoint를 통해 수집한다. 2. Sessionizer : 이벤트를 세션화 한 후, 그 세션 상태를 관리하고 마커 이벤트를 만들어 낸다. 3. Distributor : 이벤트 라우터처럼 다른 consumer들에 이벤트를 필터하고 변화시킨다. 4. Metrics Calculator : 다양한 방면에 대한 측정 기준을 계산하고 metrics store에 지속시킨다. 5. Replay : 이벤트들을 downstream 애플리케이션으로 진행하게 하지 못했을 때, Pipeline 애플리케이션들은 문제가 발생한 이벤트를 kafka에 지속시킨다. Replay는 이벤트들을 kafka에서 가져오고, pipeline에서 100%의 신뢰도를 주기 위해 원래의 downstream 애플리케이션으로 진행하게 하는 역할을 한다. 6. ConfigApp - 모든 pipeline을 위한 Dynamic provision configuration들은 Jetstream framework에 built-in app에서 설정 할 수 있다.
Dependencies
pipeline을 실행하려면 다음의 사항들이 요구된다.
1. Zookeeper 2. Mongo 3. Kafka 4. Cassandra
* Docker에 올려져 있는 이미지를 사용 하면 설치하기 쉽다.
Single node Deployment
한 개의 docker 호스트 안에서, 각 docker container instance들은 virtual network를 사용하여 통신한다.
Docker를 지원하는 node를 준비한다. (* Docker 이미지로 설치를 쉽게 할 수 있다. 이번 포스팅에서는 Docker로 설치하는 법만 포스팅하겠다.)
1. Docker를 지원하는 리눅스 instance를 준비한다. 이때 Docker 버전은 1.3.0 이상이어야 한다. 2. instance의 최소 사양은 8GB RAM | 2 VCPU | 30.0GB Disk
스크립트를 실행하여 docker에서 dependencies 항목에 있는 이미지와 pulsar, 그리고 데모까지 한번에 가져올 수 있다. (데모는 바로 실행 가능)
다운로드 링크 또는
run sh <(curl -shttps://raw.githubusercontent.com/pulsarIO/realtime-analytics/master/Demo/rundemo.sh)
또는 아래 스크립트를 실행하면 된다.
#!/bin/sh
echo '>>> Start external dependency'
sudo docker run -d --name zkserver -t "jetstream/zookeeper"
sleep 5
sudo docker run -d --name mongoserver -t "mongo"
sleep 5
sudo docker run -d --name kafkaserver -t "jetstream/kafka"
sleep 5
sudo docker run -d --name cassandraserver -t "poklet/cassandra"
echo '>>> Sleep 30 seconds'
sleep 30
mkdir /tmp/pulsarcql
wget https://raw.githubusercontent.com/pulsarIO/realtime-analytics/master/metriccalculator/pulsar.cql -O /tmp/pulsarcql/pulsar.cql
sudo docker run -it --rm --link cassandraserver:cass1 -v /tmp/pulsarcql:/data poklet/cassandra bash -c 'cqlsh $CASS1_PORT_9160_TCP_ADDR -f /data/pulsar.cql'
echo '>>> Sleep 10 seconds'
sleep 10
echo '>>> Start Pulsar pipeline'
sudo docker run -d -p 0.0.0.0:8000:9999 -p 0.0.0.0:8081:8080 --link zkserver:zkserver --link mongoserver:mongoserver -t "jetstream/config"
sleep 5
sudo docker run -d -p 0.0.0.0:8001:9999 --link zkserver:zkserver --link mongoserver:mongoserver --link kafkaserver:kafkaserver -t "pulsar/replay"
sleep 5
sudo docker run -d -p 0.0.0.0:8003:9999 --link zkserver:zkserver --link mongoserver:mongoserver --link kafkaserver:kafkaserver -t "pulsar/sessionizer"
sleep 5
sudo docker run -d -p 0.0.0.0:8004:9999 --link zkserver:zkserver --link mongoserver:mongoserver --link kafkaserver:kafkaserver -t "pulsar/distributor"
sleep 5
sudo docker run -d -p 0.0.0.0:8005:9999 --name metriccalculator --link zkserver:zkserver --link mongoserver:mongoserver --link kafkaserver:kafkaserver --link cassandraserver:cassandraserver -t "pulsar/metriccalculator"
sleep 5
sudo docker run -d -p 0.0.0.0:8002:9999 -p 0.0.0.0:8080:8080 --link zkserver:zkserver --link mongoserver:mongoserver --link kafkaserver:kafkaserver -t "pulsar/collector"
sleep 5
echo '>>> Start demo'
sudo docker run -d -p 0.0.0.0:8006:9999 -p 0.0.0.0:8083:8083 --name metricservice --link zkserver:zkserver --link mongoserver:mongoserver --link cassandraserver:cassandraserver -t "pulsar/metricservice"
sleep 5
sudo docker run -d -p 0.0.0.0:8007:9999 -p 0.0.0.0:8088:8088 --link zkserver:zkserver --link mongoserver:mongoserver --link metricservice:metricservice --link metriccalculator:metriccalculator -t "pulsar/metricui"
# The twitter sample use the twitter4j api, to run the app, it requires twitter OAUTH token (https://dev.twitter.com/oauth/overview/application-owner-access-tokens)
#sleep 5
#sudo docker run -d -p 0.0.0.0:8008:9999 --link zkserver:zkserver --link mongoserver:mongoserver -e TWITTER4J_OAUTH_CONSUMERKEY= -e TWITTER4J_OAUTH_CONSUMERSECRET= -e TWITTER4J_OAUTH_ACCESSTOKEN= -e TWITTER4J_OAUTH_ACCESSTOKENSECRET= -t pulsar/twittersample
#sleep 5
실행하기
dependency docker container 실행하기
1. zookeeper 실행하기
sudo docker run -d --name zkserver -t "jetstream/zookeeper"
2. mongo 실행하기
sudo docker run -d --name mongoserver -t "mongo"
3. kafka 실행하기
sudo docker run -d --name kafkaserver -t "jetstream/kafka"
4. Cassandra 실행하기
sudo docker run -d --name cassandraserver -t "poklet/cassandra"
Cassandra Tables 와 keyspace 생성하기
1. table을 설치하기 위하여 CQL Client를 실행하기
sudo docker run -it --rm --link cassandraserver:cass1 -v $PATH_CQL:/data poklet/cassandra bash -c 'cqlsh $CASS1_PORT_9160_TCP_ADDR -f /data/pulsar.cql'
2. Pulsar init CQL파일 : pulsar.cql을 적용한다.
Config app과 replay app 실행하기
1. Config 서버 실행하기
sudo docker run -d -p 0.0.0.0:8000:9999 -p 0.0.0.0:8081:8080 --link zkserver:zkserver --link mongoserver:mongoserver -t "jetstream/config"
2. Replay app 실행하기
sudo docker run -d -p 0.0.0.0:8001:9999 --link zkserver:zkserver --link mongoserver:mongoserver --link kafkaserver:kafkaserver -t "pulsar/replay"
Pipeline app 실행하기
1. Collector 실행하기
sudo docker run -d -p 0.0.0.0:8002:9999 -p 0.0.0.0:8080:8080 --link zkserver:zkserver --link mongoserver:mongoserver --link kafkaserver:kafkaserver -t "pulsar/collector"
2. Sessionizer 실행하기
sudo docker run -d -p 0.0.0.0:8003:9999 --link zkserver:zkserver --link mongoserver:mongoserver --link kafkaserver:kafkaserver -t "pulsar/sessionizer"
3. Distributor 실행하기
sudo docker run -d -p 0.0.0.0:8005:9999 --link zkserver:zkserver --link mongoserver:mongoserver --link kafkaserver:kafkaserver -t "pulsar/distributor"
4. Metric Calculator 실행하기
sudo docker run -d -p 0.0.0.0:8006:9999 --name metriccalculator --link zkserver:zkserver --link mongoserver:mongoserver --link kafkaserver:kafkaserver --link cassandraserver:cassandraserver -t "pulsar/metriccalculator"
Demo app 실행하기
1. MetricService 실행하기
sudo docker run -d -p 0.0.0.0:8006:9999 -p 0.0.0.0:8083:8083 --name metricservice --link zkserver:zkserver --link mongoserver:mongoserver --link cassandraserver:cassandraserver -t "pulsar/metricservice"
2. MetricUI 실행하기
sudo docker run -d -p 0.0.0.0:8007:9999 -p 0.0.0.0:8088:8088 --link zkserver:zkserver --link mongoserver:mongoserver --link metricservice:metricservice --link metriccalculator:metriccalculator -t "pulsar/metricui"
3. twittersample 실행하기
Twittersample은 twitter oauth token이 필요하다. 아래의 링크에서 token값을 얻어서 적용하면 된다.
https://dev.twitter.com/oauth/overview/application-owner-access-tokens
sudo docker run -d -p 0.0.0.0:8008:9999 --link zkserver:zkserver --link mongoserver:mongoserver -e TWITTER4J_OAUTH_CONSUMERKEY= -e TWITTER4J_OAUTH_CONSUMERSECRET= -e TWITTER4J_OAUTH_ACCESSTOKEN= -e TWITTER4J_OAUTH_ACCESSTOKENSECRET= -t pulsar/twittersample Twittersample requires twitter oauth token, seehttps://dev.twitter.com/oauth/overview/application-owner-access-tokens
Pipeline app 모니터링 하기
각 앱은 http port 로 모니터링 가능하다.
1. Replay - http://<hostname>:8001
2. Collector - http://<hostname>:8002, Collector Rest end point - http://<hostname>:8080
3. Sessionizer - http://<hostname>:8003
4. Distributor - http://<hostname>:8004
5. MetricCalculator - http://<hostname>:8005
6. Configuration - http://<hostname>:8000, Configuration UI - http://<hostname>:8081
7. Query data via CQL Client: sudo docker run -it --rm --link cassandraserver:cass "poklet/cassandra" cqlsh cass향향
8. MetricService - http://<hostname>:8006
9. MetricUI - http://<hostname>:8007, Dashboard port: http://<hostname>:8088
10. TwitterSample - http://<hostname>:8008
Distributed deployment
Pulsar app이 실행되고 있는 분산환경에서는 app container를 실행시킬 경우 zkserver와 mongoserver에 파라미터처럼 전달해야 한다. Pulsar app이 container host network에 직접 바인딩 할 수 있게 해야함과 동시에 각 app들은 다른 host에 전달해야 한다.
Dependency docker container 실행하기
1. zkServer 실행하기
sudo docker run -d -p 0.0.0.0:2181:2181 -t "jetstream/zookeeper"
2. mongo 실행하기
sudo docker run -d -p 0.0.0.0:27017:27017 -t "mongo"
3. kafka 실행하기
sudo docker run -d -p 0.0.0.0:9092:9092 -p 0.0.0.0:2181:2181 -t "jetstream/kafka"
4. cassandra 실행하기
sudo docker run -d -p 0.0.0.0:9106:9160 -p 0.0.0.0:22:22 -p 0.0.0.0:61621:61621 -p 0.0.0.0:7000:7000 -p 0.0.0.0:7001:7001 -p 0.0.0.0:7199:7199 -p 0.0.0.0:8012:8012 -p 0.0.0.0:9042:9042 -t "poklet/cassandra"
Config app과 Replay app 실행하기
1. Config server 실행하기
sudo docker run -d --net=host -e JETSTREAM_ZKSERVER_HOST="zkserverip" -e JETSTREAM_MONGOURL="mongo://mongoserverip:27017/config" -t "jetstream/config"
2. Replay app 실행하기
sudo docker run -d --net=host -e JETSTREAM_ZKSERVER_HOST="zkserverip" -e JETSTREAM_MONGOURL="mongo://mongoserverip:27017/config" -e PULSAR_KAFKA_ZK="kafkazkconn" -e PULSAR_KAFKA_BROKERS="kafkaborkers" -t "pulsar/replay"
Pipeline app 실행하기
1. Collector 실행하기
sudo docker run -d --net=host -e JETSTREAM_ZKSERVER_HOST="zkserverip" -e JETSTREAM_MONGOURL="mongo://mongoserverip:27017/config" -e PULSAR_KAFKA_BROKERS="kafkaborkers" -t "pulsar/collector"
2. Sessionizer 실행하기
sudo docker run -d --net=host -e JETSTREAM_ZKSERVER_HOST="zkserverip" -e JETSTREAM_MONGOURL="mongo://mongoserverip:27017/config" -e PULSAR_KAFKA_BROKERS="kafkaborkers" -t "pulsar/sessionizer"
3. Distributor 실행하기
sudo docker run -d --net=host -e JETSTREAM_ZKSERVER_HOST="zkserverip" -e JETSTREAM_MONGOURL="mongo://mongoserverip:27017/config" -e PULSAR_KAFKA_BROKERS="kafkaborkers" -t "pulsar/distributor"
4. Metriccalculator 실행하기
sudo docker run -d --net=host -e JETSTREAM_ZKSERVER_HOST="zkserverip" -e JETSTREAM_MONGOURL="mongo://mongoserverip:27017/config" -e PULSAR_KAFKA_BROKERS="kafkaborkers" -e PULSAR_CASSANDRA="cassandraseeds" -t "pulsar/metriccalculator"
Demo app 실행하기
1. MetricService 실행하기
sudo docker run -d --net=host -e JETSTREAM_ZKSERVER_HOST="zkserverip" -e JETSTREAM_MONGOURL="mongo://mongoserverip:27017/config" -e PULSAR_CASSANDRA="cassandraserverip" -t "pulsar/metricservice"
2. MetricUI 실행하기
sudo docker run -d --net=host -e JETSTREAM_ZKSERVER_HOST="zkserverip" -e JETSTREAM_MONGOURL="mongo://mongoserverip:27017/config" -e METRIC_SERVER_HOST="metricserverip" -e METRIC_CALCULATOR_HOST="metriccalculatorserverip" -t "pulsar/metricui"
3. twittersample 실행하기
Twittersample은 twitter oauth token이 필요하다. 아래의 링크에서 token값을 얻어서 적용하면 된다.
https://dev.twitter.com/oauth/overview/application-owner-access-tokens
sudo docker run -d --net=host -e JETSTREAM_ZKSERVER_HOST="zkserverip" -e JETSTREAM_MONGOURL="mongo://mongoserverip:27017/config" -e TWITTER4J_OAUTH_CONSUMERKEY= -e TWITTER4J_OAUTH_CONSUMERSECRET= -e TWITTER4J_OAUTH_ACCESSTOKEN= -e TWITTER4J_OAUTH_ACCESSTOKENSECRET= -t pulsar/twittersample
EC2 deplyment
EC2에 적용하는 법은 https://docs.docker.com/installation/amazon/ 에서 docker 설치 방법을 참고한 후, 위의 스텝을 실행해보면 된다.
이번 포스팅에서는 Pulsar 설치와 실행을 정리해 보았다.
Pulsar는 모든 app을 Docker 이미지로 만들어서 배포하고 있기때문에 매우 간단하게 설치 및 실행이 가능하다. 또한 클라우드 배포도 지원하기 때문에 Docker를 사용할 수 있는 instance에서는 쉽게 설치 및 사용할 수 있다고 한다.
다음 포스팅에서는 Pulsar에서 제공하는 White Paper를 정리해보기로 하면서 이번 포스팅을 마친다.
참고자료 : https://github.com/pulsarIO/realtime-analytics/wiki/Get-Started
'Real-time Big Data' 카테고리의 다른 글
eBay Pulsar 분석 - Pulsar Demo 실행을 통한 이해 (0) | 2015.06.10 |
---|---|
Pulsar - 실시간 분석 플랫폼 : White Paper (0) | 2015.05.27 |
Storm-Esper 성능 테스트 (1) | 2015.04.16 |
eBay Pulsar: real-time analytics platform (0) | 2015.03.13 |
Elasticsearch 1.0.1, Logstash 1.4.0, Kibana 3.0.0 GA installation and Kibana Tutorial (0) | 2014.04.15 |