본문 바로가기

Bigdata Hadoop

데이터 과학/빅데이터 실험실 - 4부 중 4편: 3노드 클러스터의 Ubuntu를 통한 Kafka와 Zookeeper

반응형

 

데이터 과학/빅데이터 실험실 - 4부 중 4편: 3노드 클러스터의 Ubuntu를 통한 Kafka와 Zookeeper 

 

데이터 과학/빅데이터 실험실을 Raspberry Pi 4 또는 VM 클러스터에서 Hadoop, Spark, Hive, Kafka, Zookeeper 및 PostgreSQL로 조립하기 

 

서문은 같아 생략. 모든 구성 파일은 1편의 [1]에서 확인할 수 있습니다: 

 

4부분으로 구성된 원 문서의 번역 링크를 아래에 올립니다. 글의 출처인 처음 문서의 링크는 1편 아래 참고 문서에 있습니다. 즐 개발하세요.

 

 

6. 카프카

 

카프카(https://kafka.apache.org/)는 파이프라인을 인스턴스화하는 데 널리 사용되는 강력한 메시지 브로커입니다. 보존 기능을 통해 정보 급증이나 유지 관리를 위해 소비자를 오프라인으로 전환해야 하는 필요성을 처리할 수 있습니다.

 

게다가 거의 모든 빅데이터 솔루션과 마찬가지로 카프카는 복제를 통해 단일 노드에서 전체 클러스터로 빠르게 확장됩니다.

 

카프카를 배우기 위한 주요 문헌은 "카프카: 확정적 가이드"[2]라는 책입니다. 이 전자책은 다음에서 무료로 제공됩니다. 

 

https://www.confluent.io/resources/kafka-the-definitive-guide/?source=post_page-----47631730d240--------------------------------

 

 

Confluent에 감사드립니다!

 

Kafka는 하루에 기가바이트에서 페타바이트까지 쉽게 처리할 수 있습니다. 이는 제 랩 클러스터 용량과는 거리가 멉니다. 그러나 저는 Kafka를 처음에는 단일 노드로 설치하고, 이후에는 Tweeter에서 실시간 정보를 수집하는 것과 같이 데이터 파이프라인을 사용할 수 있도록 분산하기로 결정했습니다.

 

6.1 Zookeeper

 

첫 번째 단계는 Zookeeper 서버를 설치하는 것입니다. Kafka는 메타데이터를 배포하기 위해 Zookeeper 서버에 의존하기 때문입니다. 저는 다음 사이트에서 제공되는 최신 안정 버전을 설치했습니다.

 

https://zookeeper.apache.org/releases.html

 

https://downloads.apache.org/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1.tar.gz 

 

pi@pi3:~/tmp$ wget https://downloads.apache.org/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz
pi@pi3:~/tmp$ tar -xzvf apache-zookeeper-3.6.1-bin.tar.gz
pi@pi3:~/tmp$ sudo mv apache-zookeeper-3.6.1-bin /opt/zookeeper
pi@pi3:~/tmp$ cd /opt/
pi@pi3:/opt$ ls
hadoop  hadoop_tmp  hive  zookeeper
pi@pi3:/opt$ sudo chown -R pi:pi zookeeper
[sudo] password for pi:
pi@pi3:/opt$
pi@pi3: /opt$ sudo mkdir /opt/zookeeper_data
pi@pi3: /opt$ sudo chown -R pi:pi zookeeper_data

 

파일 생성: /opt/zookeeper/conf/zoo.conf 

 

# see zoo_sample.cfg_old for information about parameters

tickTime=2000
dataDir=/opt/zookeeper_data
clientPort=2181
initLimit=20
syncLimit=5

# this parameters are for a zookeeper cluster (assemble)
#server.1=pi1:2888:3888
#server.2=pi2:2888:3888
#server.3=pi3:2888:3888

 

이제 단일 노드에서 주키퍼를 시작할 수 있습니다: 

 

pi@pi3:/opt$ /opt/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

 

서비스 확인: 

 

pi@pi3:/opt$ sudo netstat -plnt | grep 2181
tcp6  0  0 :::2181  :::*  LISTEN  2511/java

 

이제 파이3에서 로컬로 zookeeper를 실행합니다. 다음으로 Kafka를 설치합니다. 

 

6.2 KAFKA

 

단일 노트로 Kafka를 설치하는 것은 그렇게 번거롭지 않습니다. 저는 책의 지침을 따랐지만 설치 폴더를 /opt로 변경했고 제 사용자는 pi입니다.

 

저는 가장 최신의 안정적인 버전을 다운로드했는데, 그것은

 

kafka_2.13–2.5.0.tgz였습니다: 

 

https://www.apache.org/dyn/closer.cgi?path=%2Fkafka%2F2.5.0%2Fkafka_2.13-2.5.0.tgz&source=post_page-----47631730d240--------------------------------

 

Apache Download Mirrors

The requested file or directory is not on the mirrors. The object is in our archive : https://archive.apache.org/dist/kafka/2.5.0/kafka_2.13-2.5.0.tgz Verify the integrity of the files It is essential that you verify the integrity of the downloaded file us

www.apache.org

 

 

평소처럼 /home/pi/tmp에 저장했습니다.

 

다음 명령은 파일을 추출하여 /opt로 전송하고 폴더와 액세스 권한을 조정하는 것입니다: 

 

pi@pi3:~/tmp$ tar -xzvf kafka_2.13-2.5.0.tgz
pi@pi3:~/tmp$ sudo mv kafka_2.13-2.5.0 /opt/kafka
pi@pi3:~/tmp$ cd /opt/
pi@pi3:/opt$ ls
hadoop  hadoop_tmp  hive  kafka  zookeeper  zookeeper_data
pi@pi3:/opt$ sudo chown -R pi:pi kafka
pi@pi3:/opt$ sudo mkdir /opt/kafka-data
pi@pi3:/opt$ sudo chown -R pi:pi  /opt/kafka_data

 

파일 편집

 

/opt/kafka/config/server.properties,

 

다음 매개변수 변경:

 

log.dirs=/opt/kafka_data

 

 

Kafka 시작:

 

pi@pi3:/opt$ /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties

 

 

참고: 다른 방법을 지정하지 않으면 Kafka와 zookeeper에 열려 있는 터미널이 하나 필요합니다. 이러한 서비스를 시작할 때. 처음에는 각 서비스에 대해 하나의 터미널/원격 세션을 사용합니다. 튜토리얼이 끝나면 투명한 방식으로 수행하는 방법을 보여줍니다.

 

포트 9092 확인:

 

pi@pi3:/opt$ sudo netstat -plnt | grep 9092
tcp6  0  0 :::9092  :::*   LISTEN  3014/java

 

 

다음 명령을 사용하면 Kafka가 제대로 실행되는지 확인할 수 있습니다.

 

first start zookeeper:

 

pi@pi3:~$ /opt/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

 

 

이제 Kafka를 시작하고 프로듀서와 컨슈머가 있는 Kafka 토픽을 만들고 테스트할 수 있습니다. 

 

pi@pi3:~$ /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
pi@pi3:~$ /opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
Created topic test.
pi@pi3:~$ /opt/kafka/bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic test
Topic: test     PartitionCount: 1       ReplicationFactor: 1    Configs:
        Topic: test     Partition: 0    Leader: 0       Replicas: 0     Isr: 0
pi@pi3:~$ /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
>message test 1
>message test 2
pi@pi3:~$ /opt/kafka/bin/kafka-console-consumer.sh  --bootstrap-server localhost:9092 --topic test --from-beginning
message test 1
message test 2
^C Processed a total of 2 messages

 

 

6.3 Zookeeper와 Kafka를 클러스터로 변경

 

주의: Kafka와 Zookeeper 모두 홀수 개의 노드를 사용하라고 제안합니다. 저는 3개를 사용하는데 괜찮습니다.

 

pi1 

 

pi@pi1:~$  sudo mkdir /opt/zookeeper_data
pi@pi1:~$ sudo mkdir /opt/zookeeper
pi@pi1:~$ sudo mkdir /opt/kafka
pi@pi1:~$ sudo mkdir /opt/kafka_data
pi@pi1:~$ sudo chown -R pi:pi /opt/zookeeper_data
pi@pi1:~$ sudo chown -R pi:pi /opt/zookeeper
pi@pi1:~$ sudo chown -R pi:pi /opt/kafka
pi@pi1:~$ sudo chown -R pi:pi /opt/kafka_data

 

pi2 

 

pi@pi2:~$  sudo mkdir /opt/zookeeper_data
pi@pi2:~$ sudo mkdir /opt/zookeeper
pi@pi2:~$ sudo mkdir /opt/kafka
pi@pi2:~$ sudo mkdir /opt/kafka_data
pi@pi2:~$ sudo chown -R pi:pi /opt/zookeeper_data
pi@pi2:~$ sudo chown -R pi:pi /opt/zookeeper
pi@pi2:~$ sudo chown -R pi:pi /opt/kafka
pi@pi2:~$ sudo chown -R pi:pi /opt/kafka_data

 

pi3 

 

pi@pi3:/opt$ rsync -vaz  /opt/zookeeper/   pi2:/opt/zookeeper/
pi@pi3:/opt$ rsync -vaz  /opt/kafka/   pi2:/opt/kafka/
pi@pi3:/opt$ rsync -vaz  /opt/zookeeper/   pi1:/opt/zookeeper/
pi@pi3:/opt$ rsync -vaz  /opt/kafka/   pi1:/opt/kafka/

 

이전 주석(pi1, pi2, pi3)을 제거한 수정

 

/opt/zookeeper/conf/zoo.conf 

 

# see zoo_sample.cfg_old for information about parameters

tickTime=2000
dataDir=/opt/zookeeper_data
clientPort=2181
initLimit=20
syncLimit=5

# this parameters are for a zookeeper cluster (assemble)
server.1=pi1:2888:3888
server.2=pi2:2888:3888
server.3=pi3:2888:3888

 

파일 생성:

 

/opt/zookeeper_data/myid

 

파일에는 zookeeper 노드의 id만 있어야 합니다(GitHub 참조)

 

pi1 ->1,

 

pi2 ->2,

 

pi3 ->3,

 

Kafka의 경우, 다음을 편집해야 합니다(모든 노드에서):

 

/opt/kafka/config/server.properties 

 

############################# Server Basics #############################

# The id of the broker. This must be set to a unique integer for each broker.
## THIS IS FOR pi3 NODE
broker.id=3

############################# Socket Server Settings #############################

num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600

############################# Log Basics #############################

# A comma separated list of directories under which to store log files
log.dirs=/opt/kafka_data
num.partitions=1
num.recovery.threads.per.data.dir=1

############################# Internal Topic Settings  #############################
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1

############################# Log Retention Policy #############################
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000

############################# Zookeeper #############################
zookeeper.connect= pi1:2181, pi2:2181, pi3:2181
zookeeper.connection.timeout.ms=18000

############################# Group Coordinator Settings #############################
group.initial.rebalance.delay.ms=0

 

 

매개변수 변경하기: 

 

broker.id=1   # 2, 3 acoording to the node

 

(파이1은 1, 파이2는 2, 파이3은 3) 

 

and: 

 

zookeeper.connect= pi1:2181, pi2:2181, pi3:2181

 

 

이제 Kafka는 클러스터로 실행됩니다. 모든 노드에서 시작해야 합니다.

 

 

6.3.1 Kafka 클러스터 모니터링

 

Kafka 클러스터를 모니터링하기 위한 몇 가지 도구가 있습니다. 전체 환경을 살펴보는 것이 좋다고 생각합니다.

 

텍스트 [3]을 참고하세요: 

 

https://medium.com/@giorgosmyrianthous/overview-of-ui-monitoring-tools-for-apache-kafka-clusters-9ca516c165bd?source=post_page-----47631730d240--------------------------------

 

 

사용 가능한 도구에 대한 개요를 제공합니다. Kafka 자체에는 이러한 도구가 없습니다.

 

O는 Kafka 도구를 설치하기로 했습니다. 개인용으로는 무료이며, 제 경우입니다. Kafka 도구는 Windows, Mac 및 Linux에 설치할 수 있습니다. 저는 라즈베리의 작업 부하를 줄이기 위해 Windows 노트북에 설치하기로 했습니다. 

 

https://www.kafkatool.com/?source=post_page-----47631730d240-------------------------------- 

 

아래에는 분산 노드에 대한 실제 인터페이스가 나와 있습니다: 

 

 

마지막으로 다음 게시물에서는 Kafka 도구에 대한 추가 정보를 제공합니다[4]: 

 

https://medium.com/enfuse-io/gui-for-apache-kafka-e52698b00c42?source=post_page-----47631730d240--------------------------------

 

 

7. 클러스터 시작

 

저는 모든 서비스를 시작하기 위해 각 노드에 대해 하나의 스크립트를 코딩했습니다. 특정 서비스를 시작하는 것을 가끔 잊기 때문입니다. pi 사용자의 홈 폴더에서 cluster-start.sh라는 스크립트를 찾을 수 있습니다. 이 스크립트는 ssh 연결을 사용하여 다른 노드에서 서비스를 시작하고, 저는 모든 노드에 복사했습니다.

 

/home/pi/cluster-start.sh 

 

#!/bin/sh

echo zookeeper pi1
ssh pi1 '/opt/zookeeper/bin/zkServer.sh start > /dev/null 2>&1 &'
echo zookeeper pi2
ssh pi2 '/opt/zookeeper/bin/zkServer.sh start > /dev/null 2>&1 &'
echo zookeeper pi3
ssh pi3 '/opt/zookeeper/bin/zkServer.sh start > /dev/null 2>&1 &'

echo kafka pi1
ssh pi1 '/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties > /dev/null 2>&1 &'
echo kafka pi2
ssh pi2 '/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties > /dev/null 2>&1 &'
echo kafka pi3
ssh pi3 '/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties > /dev/null 2>&1 &'

echo start hadoop cluster
start-dfs.sh
echo start yarn
start-yarn.sh

echo hive metastore
ssh pi2 '/opt/hive/bin/hive --service metastore > /dev/null 2>&1 &'
echo hive hiveserver2
ssh pi1 '/opt/hive/bin/hive --service hiveserver2 > /dev/null 2>&1 &'

echo 'good to start!!!!!!!!'

 

Hadoop, Yarn, Hive 및 Kafka 도구의 웹 UI를 사용하여 클러스터 상태를 확인할 수 있습니다.

 

최종 아키텍처는 다음 다이어그램에 표시된 대로입니다. 

 

 

그리고 아래 표에 따라 서비스가 배포됩니다: 

 

 

저는 또한 노트북에서 VirtualBox 대신 Ubuntu 가상 머신을 사용하는데, RStudio, R, Anaconda, TensorFlow가 있습니다.

 

결론

 

모든 설치를 마무리하여 축하드립니다. 안도감과 기쁨을 느낍니다! :D

 

이제 실험하고 훈련할 수 있는 완전한 환경이 생겼습니다!

 

인용한 출처의 모든 저자에게 감사드리고 싶습니다.

 

출처가 인용되는 한 이 튜토리얼의 일부를 복사하는 것을 허가합니다. 중요한 부분이 필요한 경우 링크만 해주세요.

 

모든 의견과 질문을 환영합니다! 

 

 

[1] P. G. Taranti. https://github.com/ptaranti/RaspberryPiCluster

[2] N. Narkhede et al. Kafka: The Definitive Guide: Real-Time Data and Stream Processing at Scale. O’Reilly Media (2017)

[3] G. Myrianthous. Overview of UI monitoring tools for Apache Kafka clusters (2019)

[4] O. Grygorian. GUI for Apache Kafka (2019)

 

 

 

4개 모두 번역 포스팅을 했다. 훔쳐왔으면 누구도 훔쳐온 줄 모르게 새로 만들어야 한다. 아이폰처럼... 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^