데이터 과학/빅데이터 실험실 - 4부 중 4편: 3노드 클러스터의 Ubuntu를 통한 Kafka와 Zookeeper
데이터 과학/빅데이터 실험실을 Raspberry Pi 4 또는 VM 클러스터에서 Hadoop, Spark, Hive, Kafka, Zookeeper 및 PostgreSQL로 조립하기
서문은 같아 생략. 모든 구성 파일은 1편의 [1]에서 확인할 수 있습니다:
4부분으로 구성된 원 문서의 번역 링크를 아래에 올립니다. 글의 출처인 처음 문서의 링크는 1편 아래 참고 문서에 있습니다. 즐 개발하세요.
- Part 1: Introduction, Operational System and Networking
- Part 2: Hadoop and Spark
- Part 3: PostgreSQL and Hive
- Part 4: Kafka, Zookeeper, and Conclusion
6. 카프카
카프카(https://kafka.apache.org/)는 파이프라인을 인스턴스화하는 데 널리 사용되는 강력한 메시지 브로커입니다. 보존 기능을 통해 정보 급증이나 유지 관리를 위해 소비자를 오프라인으로 전환해야 하는 필요성을 처리할 수 있습니다.
게다가 거의 모든 빅데이터 솔루션과 마찬가지로 카프카는 복제를 통해 단일 노드에서 전체 클러스터로 빠르게 확장됩니다.
카프카를 배우기 위한 주요 문헌은 "카프카: 확정적 가이드"[2]라는 책입니다. 이 전자책은 다음에서 무료로 제공됩니다.
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였습니다:
평소처럼 /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]을 참고하세요:
사용 가능한 도구에 대한 개요를 제공합니다. Kafka 자체에는 이러한 도구가 없습니다.
O는 Kafka 도구를 설치하기로 했습니다. 개인용으로는 무료이며, 제 경우입니다. Kafka 도구는 Windows, Mac 및 Linux에 설치할 수 있습니다. 저는 라즈베리의 작업 부하를 줄이기 위해 Windows 노트북에 설치하기로 했습니다.
https://www.kafkatool.com/?source=post_page-----47631730d240--------------------------------
아래에는 분산 노드에 대한 실제 인터페이스가 나와 있습니다:
마지막으로 다음 게시물에서는 Kafka 도구에 대한 추가 정보를 제공합니다[4]:
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개 모두 번역 포스팅을 했다. 훔쳐왔으면 누구도 훔쳐온 줄 모르게 새로 만들어야 한다. 아이폰처럼...
'Bigdata Hadoop' 카테고리의 다른 글
라즈베리파이 5 클러스터를 구축하고 싶으신가요? (4) | 2024.08.02 |
---|---|
처음부터 라즈베리 파이 하둡/스파크 클러스터 구축하기 (3) | 2024.07.25 |
데이터 과학/빅데이터 실험실 - 4부 중 3부: 3노드 클러스터의 Ubuntu를 통한 Hive 및 Postgres (6) | 2024.07.23 |
AB BLE 게이트웨이 V4 사용자 가이드 (1) | 2024.07.22 |
데이터 과학/빅데이터 실험실 - 4부 중 2부: 3노드 클러스터에서 Ubuntu 20.04를 통한 Hadoop 3.2.1 및 Spark 3.0.0 사용하기 (1) | 2024.07.22 |
BigData-02 (0) | 2024.07.21 |
Bigdata- 01 (1) | 2024.07.20 |
Unit sshd.service could not be found 에러 해결 (3) | 2024.07.19 |
더욱 좋은 정보를 제공하겠습니다.~ ^^