대용량 메시지 처리 큐 시스템인 아파치 카프카를 설치해 보고, 간단하게 메시지 전달과 수신에 대해서 테스트를 진행해 본다.


1. 아파치 카프카는 무엇인가?

대용량, 대규모 메시지 데이터를 빠르게 처리할 수 있도록 개발된 메시지 큐잉 플랫폼이라고 간단하게 정의할 수 있다.

대용량 처리를 위해 ZooKeeper 기반 분산 서버 운영 환경을 지원한다.

처음 링크드인에서 내부 서비스를 위해 개발하여 사용하다가 2011년 초에 아파치 공식 오픈 소스로 세상에 공개되었다.


아파치 카프카는 기업에서 필요한 모든 데이터 시스템 및 서비스의 중앙 플랫폼 역할로 서비스 기반 아키텍처(SOA, Service Oriented Architecture)를 위한 핵심 구성 요소인 엔터프라이즈 서비스 버스(ESB, Enterprise Service Bus)를 쉽게 구현할 수 있도록 한다.



2. 카프카 동작 방식은?

카프카는 기본적으로 메시징 서버로 동작하며, 메시지 보내느 메커니즘 중에 PUB/SUB 모델을 기반으로 하하고 있다.

보내는 측인 Producer, 받는 측인 Consumer로 구성하여 메시지를 전달하고 받는 구조를 제공한다. 

동작 방식에 대한 도식화된 그림은 아래와 같다.




3.설치 환경

- OS: Mac OS High Sierra 10.13.4

- PC: MacBook Pro (Retina, 13-inch, Mid 2014)


4. 카프카 다운로드


아래의 사이트에서 다운로드 할 수 있다.

https://kafka.apache.org/downloads



카프카 설치를 위해 카프카 1.1.0 버전의 패키지 중에 Scala 2.12 기반 버전을 다운 받았다.


다운로드 후에 압축을 풀면 kafka_2.12-1.1.0 디렉토리를 확인할 수 있다.


5. JDK 설치

카프카는  Scala 언어로 개발되어 카프카 실행을 위해서는 JVM이 설치되어야 한다.

JDK 8 버전을 설치하자.


아래 다운로드 페이지에서 다운로드하여 설치하도록 한다.


http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html


※ 혹시 JDK 8 이상 버전을 사용하시면 JDK 8을 설치하여 사용하는게 정신 건강에 이롭다.


상위버전을 사용하면 ZooKeeper 실행 시 아래와 같은 오류 메시지를 확인할 수 있다.

 


bin/zookeeper-server-start.sh config/zookeeper.properties
Unrecognized VM option 'PrintGCDateStamps'


6. ZooKeeper 설정 및 실행

카프카 다운받고 압축해제 한 후 카프카 디렉토리로 이동하면 아래와 같은 폴더로 되어 있다.


~/kafka_2.12-1.1.0 » ls                                                                                      

LICENSE             bin                  

NOTICE              config               libs                logs                site-docs        

~/kafka_2.12-1.1.0


카프카 설치 디렉토리에서 아래와 같이 입력하면 ZooKeeper가 실행된다.


bin/zookeeper-server-start.sh config/zookeeper.properties


정상적으로 실행되면 아래와 같은 메시지가 출력된다.

[2018-05-16 11:48:48,523] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory)


※ 여러 대의 서버로 ZooKeeper를 구성하고자 한다면 아래의 링크를 참조하여 구성하면 된다.


http://programist.tistory.com/entry/Apache-Kafka-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81-%EA%B5%AC%EC%B6%95-%EB%B0%8F-%ED%85%8C%EC%8A%A4%ED%8A%B8


7. 카프카 실행 

카프카 설치 디렉토리에서 아래와 같이 입력하면 아파치 카프카가 실행된다.


bin/kafka-server-start.sh config/server.properties


정상적으로 실행되면 아래와 같은 메시지가 출력된다.

[2018-05-16 11:59:58,654] INFO Kafka version : 1.1.0 (org.apache.kafka.common.utils.AppInfoParser)

[2018-05-16 11:59:58,654] INFO Kafka commitId : fdcf75ea326b8e07 (org.apache.kafka.common.utils.AppInfoParser)

[2018-05-16 11:59:58,658] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)

[2018-05-16 11:59:58,706] INFO [ReplicaAlterLogDirsManager on broker 0] Added fetcher for partitions List() (kafka.server.ReplicaAlterLogDirsManager)


※ 여러 대의 서버로 카프카를 구성하고자 한다면 아래의 링크를 참조하여 구성하면 된다.


http://programist.tistory.com/entry/Apache-Kafka-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81-%EA%B5%AC%EC%B6%95-%EB%B0%8F-%ED%85%8C%EC%8A%A4%ED%8A%B8


8. 토픽 관리

토픽 생성

아래의 명령어를 입력하여 토픽을 생성할 수 있다.

~/kafka_2.12-1.1.0 » bin/kafka-topics.sh -create -zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test


Created topic "test".


토픽 확인

아래의 명령어를 입력하면 생성된 토픽 리스트를 확인 할 수 있다.

~/kafka_2.12-1.1.0 » bin/kafka-topics.sh --list --zookeeper localhost:2181                                                                         

test

토픽 삭제

아래의 명령어를 입력하면 원하는 토픽을 삭제할 수 있다.

~/kafka_2.12-1.1.0 » bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test


9. 메시지 송신 및 수신

Producer 실행

Producer는 아래와 같이 실행할수 있다.

test라는 토픽을 구독하는 Consumer에게 보내겠다고 브로커에게 메시지를 보내는 것이다.


bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test


Consumer 실행

Consumer는 아래와 같이 실행할 수 있다.

test라는 토픽에 메시지가  들어오면 받겠다는 것이다.


bin/kafka-console-consumer.sh -zookeeper localhost:2181 --topic test --from-beginning


메시지 전송

Producer 콘솔창에 보내고자 하는 메시지를 입력하면 아래와 같이 Consumer 콘솔창에 메시지가 수신되어 나타난다.


> msg 1



Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].

 msg 1



반응형
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,

Docker Hub 이미지를 이용한 Spark 설치하기

 

Apacher Spark 이미지

Docker Hub 이미지 중 가장많은 별포인트를 받은 아래의 Spark 이미지를 설치한다.

[Docker Hub] https://hub.docker.com/r/jupyter/all-spark-notebook/

[Git Hub] https://github.com/jupyter/docker-stacks

 

아래 명령어로 docker hub에서 이미지를 가져온다.


sudo docker pull jupyter/all-spark-notebook  


위의 명령어를 실행하면 아래와 같이 이미지를 다운받고 extract 하는 과정을 볼 수가 있다.

 

 

Image 다운이 다 되었으면, 아래의 명령어를 통해 다운 받은 Docker Image를 확인할 수가 있다.

 

sudo docker images


 

제대로 설치가 되었다면 아래와 유사한 목록 리스트가 나타나야 한다.

 

sudo docker images

 

 

컨테이너를 만들고 실행시키기 위해서 아래의 명령어를 이용한다.

 

sudo docker run -d -p [외부포트]:[컨테이너내부포트] -e GRANT_SUDO=yes --name [컨테이너 이름] jupyter/all-spark-notebook

ex) sudo docker run -d -p 8888:8888 -e GRANT_SUDO=yes --name test_spark jupyer/all-spark-notebook

ex) sudo docker run -d -p 8888:8888 jupyter/all-spark-notebook


 

docker ps 명령을 통해 해당 컨테이너가 잘 실행되었는지를 확인하자.

 

sudo docker ps


방금 만든 컨테이너가 보인다면, 해당 서비스가 잘 구동되어 있음을 나타내는 것이다.

이제 웹상에서 해당 machine의 ip와 port(ex) 8888)를 친후 ipython-notebook을 실행해보자.

 

[Docke Hub] https://hub.docker.com/r/sequenceiq/spark/

Apache Spark on Docker

 

This repository contains a Docker file to build a Docker image with Apache Spark. This Docker image depends on our previous Hadoop Docker

image, available at the SequenceIQ GitHub page.
The base Hadoop Docker image is also available as an official Docker image.

##Pull the image from Docker Repository

 

docker pull sequenceiq/spark:1.6.0

Building the image

docker build --rm -t sequenceiq/spark:1.6.0 .

Running the image

  • if using boot2docker make sure your VM has more than 2GB memory
  • in your /etc/hosts file add $(boot2docker ip) as host 'sandbox' to make it easier to access your sandbox UI
  • open yarn UI ports when running container
    docker run -it -p 8088:8088 -p 8042:8042 -h sandbox sequenceiq/spark:1.6.0 bash
    
    or
    docker run -d -h sandbox sequenceiq/spark:1.6.0 -d

Versions

Hadoop 2.6.0 and Apache Spark v1.6.0 on Centos

 

Testing

There are two deploy modes that can be used to launch Spark applications on YARN.

YARN-client mode

In yarn-client mode, the driver runs in the client process, and the application master is only used for requesting resources from YARN.

# run the spark shell
spark-shell \
--master yarn-client \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 1

# execute the the following command which should return 1000
scala> sc.parallelize(1 to 1000).count()

 

YARN-cluster mode

In yarn-cluster mode, the Spark driver runs inside an application master process which is managed by YARN on the cluster, and the client can go away after initiating the application.

Estimating Pi (yarn-cluster mode):

# execute the the following command which should write the "Pi is roughly 3.1418" into the logs
# note you must specify --files argument in cluster mode to enable metrics
spark-submit \
--class org.apache.spark.examples.SparkPi \
--files $SPARK_HOME/conf/metrics.properties \
--master yarn-cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 1 \
$SPARK_HOME/lib/spark-examples-1.6.0-hadoop2.6.0.jar

Estimating Pi (yarn-client mode):

# execute the the following command which should print the "Pi is roughly 3.1418" to the screen
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn-client \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 1 \
$SPARK_HOME/lib/spark-examples-1.6.0-hadoop2.6.0.jar
반응형

'IT > Apache Spark' 카테고리의 다른 글

Docker Jupyter Notebook Python, Scala, R, Spark, Mesos Stack  (0) 2016.06.06
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,