신입개발자

Apache Kafka 설치부터 실행 본문

개인 개발 공부

Apache Kafka 설치부터 실행

dks_a 2023. 8. 31. 13:53

Kafka - 개념 및 용어

https://victorydntmd.tistory.com/344

https://freedeveloper.tistory.com/396?category=909995

https://engkimbs.tistory.com/691

 

아파치 카프카(Apache Kafka) 아키텍처 및 동작 방식

| 아파치 카프카(Apache Kafka)란? 아파치 카프카(Apache Kafka)는 분산 스트리밍 플랫폼이며 데이터 파이프 라인을 만들 때 주로 사용되는 오픈소스 솔루션입니다. 카프카는 대용량의 실시간 로그처리

engkimbs.tistory.com

 

설치 가이드


https://kafka.apache.org/quickstart - APACHE KAFKA QUICKSTART

NOTE: Your local environment must have Java 8+ installed.

windows 인 경우 Kafka with ZooKeeper 로 설치

 

1. 사용자 추가

sudo adduser kafka

passwd kafka
kafka 사용자의 비밀 번호 변경 중
새  암호:
새  암호 재입력:
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.

 

2. 생성된 사용자(유저) 확인

tail -n 3 /etc/passwd

3. 포트 확인

firewall-cmd --list-all

[서버1]
ports: 18992/tcp 3306/tcp 9998/tcp 19997/tcp 9093/tcp 9092/tcp 7777/tcp 50001/tcp 50003/tcp

[서버2]
ports: 8991/tcp 18992/tcp 19998/tcp 9998/tcp 19999/tcp 8992/tcp 12311/tcp 12312/tcp 51000/tcp 54000/tcp 54001/tcp 51001/tcp 4564/tcp 9090/tcp 51002/tcp 7897/tcp 9093/tcp 9092/tcp 38992/tcp 9091/tcp 9095/tcp 9999/tcp 9997/tcp

[서버3]
ports: 3306/tcp 9998/tcp 19999/tcp 52000/tcp 9093/tcp 9092/tcp 52001/tcp 5432/tcp 6379/tcp 38080/tcp 50001/tcp

#[각각 서버에 동일하게 수행]
systemctl enable firewalld
systemctl start firewalld

firewall-cmd --permanent --zone=public --add-port=19093/tcp
firewall-cmd --permanent --zone=public --add-port=19092/tcp

sudo firewall-cmd --reload

firewall-cmd --list-all

 

3. kafka tgz 파일 해당 서버 폴더에 업로드 후 압축 해제

카프카 다운로드 페이지
https://kafka.apache.org/downloads

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

 


tar -xvzf [파일 명]

tar -xvzf kafka_2.13-3.4.0.tgz


mv [원본 이름] [변경할 이름]

mv kafka_2.13-3.4.0 kafka


https://github.com/inomera/kafka-3-cluster 참고해서 작업하기

cd /home/kafka/kafka
mkdir logs
mkdir data
mkdir data/metadata-logs
mkdir data/kraft-combined-logs
mkdir scripts

cd /home/kafka/kafka/config/kraft/
cp server.properties server22.properties

 

  • server22.properties 변경 부분
controller.quorum.voters=1@서버1IP:19093,2@서버2IP:19093,3@서버3IP:19093
listeners=PLAINTEXT://서버1IP:19092,CONTROLLER://서버1IP:19093
advertised.listeners=PLAINTEXT://서버1IP:19092
log.dirs=/home/kafka/kafka/data/kraft-combined-logs
metadata.log.dir=/home/kafka/kafka/data/metadata-logs
num.partitions=3
  • 클러스터 ID 생성 (/home/kafka/kafka 위치에서)
    ./bin/kafka-storage.sh random-uuid
HlpJYlLjS0C191Om1WlogA

주의 사항 : 동일한 클러스터 ID로 서버2, 서버3 도 만들 것

  • 스토리지 디렉토리 포맷

./bin/kafka-storage.sh format -t  (/bin/kafka-storage.sh random-uuid으로 출력된 값) -c ./config/kraft/server22.properties

# 결과출력
Formatting /home/kafka/kafka/data/kraft-combined-logs with metadata.version 3.3-IV3.
Formatting /home/kafka/kafka/data/metadata-logs with metadata.version 3.3-IV3.

 

  • 스토리지 생성 및 kafka 서버 (백그라운드) 기동(/home/kafka 위치에서)
    ./kafka/bin/kafka-server-start.sh -daemon ./kafka/config/kraft/server1.properties
  • 혹은 /home/kafka/ 위치에 start.sh과 shutdown.sh 생성 후 실행
    • start.sh
KAFKA_HOME=/home/kafka/kafka
KAFKA_CLUSTER_ID= (./bin/kafka-storage.sh random-uuid 명령으로 출력된 값)

$KAFKA_HOME/bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c $KAFKA_HOME/config/kraft/server.properties
$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/kraft/server.properties

주의사항 : server.properties는 수정된 server.properties로 변경해야 합니다.

  • shutdown.sh
KAFKA_HOME=/home/kafka/kafka
$KAFKA_HOME/bin/kafka-server-stop.sh -daemon $KAFKA_HOME/config/kraft/server.properties

[kafka 시작되었는지 확인하기]

[kafka:/home/kafka] jps
10839 Jps
2714 Kafka


[토픽생성]
./kafka/bin/kafka-topics.sh --bootstrap-server 서버1IP:19092 --replication-factor 2 --partitions 3 --topic testnewtopic --create
--> 제대로 동작한다면

Created topic testnewtopic.

[토픽확인]
./kafka/bin/kafka-topics.sh --bootstrap-server 서버1IP :19092 --list

testnewtopic

[토픽 상세]
./kafka/bin/kafka-topics.sh --bootstrap-server 서버1IP :19092 --topic testnewtopic --describe

Topic: testnewtopic     TopicId: mn8cdYL7SWW-kqISvE8AAw PartitionCount: 3       ReplicationFactor: 2    Configs: segment.bytes=1073741824
        Topic: testnewtopic     Partition: 0    Leader: 2       Replicas: 2,3   Isr: 2,3
        Topic: testnewtopic     Partition: 1    Leader: 3       Replicas: 3,1   Isr: 3,1
        Topic: testnewtopic     Partition: 2    Leader: 1       Replicas: 1,2   Isr: 1,2

[ 토픽 삭제 ]

./kafka/bin/kafka-topics.sh --bootstrap-server 서버1IP:19092 --delete --topic testnewtopic


[컨슈머 그룹 생성]
./kafka/bin/kafka-console-consumer.sh --bootstrap-server 서버1IP:19092 --topic testnewtopic --group first-group


[컨슈머 그룹 리스트 확인]
./kafka/bin/kafka-consumer-groups.sh --bootstrap-server 서버1IP:19092 --list


[컨슈머 상태와 오프셋 확인]
./kafka/bin/kafka-consumer-groups.sh --bootstrap-server 서버1IP:19092 --group first-group --describe


[ 카프카 모니터링 툴 ]

[ Ui for Apache Kafka ]

  • java17 다운

https://jdk.java.net/archive/

  • 서버에 tar파일 업로드 및 kafka-ui-tool 폴더 생성
mkdir kafka-ui-tool
tar -xvzf openjdk-17.0.2_linux-x64_bin.tar.gz
mv jdk-17.0.2 jdk-17
  • root 로 들어가 port 열어주기
firewall-cmd --list-all

firewall-cmd --permanent --zone=public --add-port=19094/tcp
sudo firewall-cmd --reload
firewall-cmd --list-all
nohup /home/kafka/jdk-17/bin/java -Dspring.config.additional-location=/home/kafka/kafka-ui-tool/application.yml --add-opens java.rmi/javax.rmi.ssl=ALL-UNNAMED -jar /home/kafka/kafka-ui-tool/kafka-ui-api-v0.7.0.jar & > kafka-ui.log

'개인 개발 공부' 카테고리의 다른 글

Kafka Stream  (0) 2023.08.31
Kafka Producer  (1) 2023.08.31
JUnit 테스트  (0) 2023.08.31
Burp Suite  (0) 2023.08.31
gw-manger / portal docker 실행  (0) 2023.08.31
Comments