데이터 과학/빅데이터 실험실 - 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였습니다:
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]을 참고하세요:
사용 가능한 도구에 대한 개요를 제공합니다. 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 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.
귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.
캐어랩