일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- heapq
- 하둡
- programmers
- 파이썬
- 분산
- 코딩테스트
- Data Engineering
- 우선순위큐
- 아파치 스파크
- Spark
- 분산처리
- Hadoop
- 프로그래머스
- 아파치 카프카
- 아파치 하둡
- 티스토리챌린지
- 오블완
- Apache Hadoop
- 빅데이터
- Apache Spark
- docker
- apache kafka
- 도커
- Python
- DP
- 알고리즘
- 리트코드
- 이진탐색
- leetcode
- 딕셔너리
- Today
- Total
래원
[Kafka] Apache Kafka 설치 본문
이번 글에서는 Apache Kafka 설치 방법에 대해 소개할 예정이다.
Kafka 3.9.0 버전을 사용했으며, KRaft 모드를 사용할 예정이다.
큰 목차는 다음과 같다.
1. 환경
2. Java 설치
3. Kafka 설치
4. Kafka Cluster ID 설정
5. Kafka 설정 파일 편집
6. Kafka 스토리지 초기화
7. Broker 실행
8. Topic 생성
9. Producer/Consumer 테스트
환경
설치를 위해 VM 3대를 사용하였으며, 환경은 다음과 같다.
OS | Ubuntu 20.04 |
Java | openjdk-11 |
Kafka | 3.9.0 |
Java 설치
Kafka를 실행하려면 Java Runtime Environment(JRE)가 필요하기 때문에 OpenJDK 11을 설치한다.
sudo apt update
sudo apt install openjdk-11-jdk
# 환경 변수 설정
echo "export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" >> ~/.bashrc
echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> ~/.bashrc
source ~/.bashrc
Kafka 설치
https://www.apache.org/dyn/closer.cgi?path=/kafka/3.9.0/kafka_2.13-3.9.0.tgz
위 사이트에서 다운 링크를 복사하여 wget으로 받아온다.
$ wget https://dlcdn.apache.org/kafka/3.9.0/kafka_2.13-3.9.0.tgz
그 후, 압축 해제하고 심볼릭 링크를 만들고, kafka로 이동한다.
$ tar -xzf kafka_2.13-3.9.0.tgz
$ ln -s kafka_2.13-3.9.0 kafka
$ cd kafka
Kafka Cluster ID 설정
KRaft 모드를 사용하기 위해 클러스터 ID를 생성하고 이를 Kafka 설정에 추가해야한다. vm-1에서 아래와 같이 수행하고 출력된 값을 복사한다.
# vm-1
$ KAFKA_CLUSTER_ID=$(bin/kafka-storage.sh random-uuid)
$ echo $KAFKA_CLUSTER_ID
복사한 값을 이용해 나머지 노드에서 아래와 같이 수행한다.
# Others
$ KAFKA_CLUSTER_ID=<복사한 값>
Kafka 설정 파일 편집
$ vim config/kraft/server.properties
먼저 node.id를 수정해 준다. 이는 Broker의 고유 id로, 클러스터 내에서 Broker를 식별하는 값이다.
vm-1에서는 0, vm-2에서는 1, vm-3에서는 2로 설정하였다.
다음으로 controller.quorum.voters를 수정해준다.
이 설정은 KRaft 모드에서 컨트롤러 쿼럼을 정의한다.
- 0@vm-1:9093,1@vm-2:9093,2@vm-3:9093
--> node.id가 0인 브로커는 vm-1에서 실행되고, 포트는 9093을 사용
--> node.id가 1인 브로커는 vm-2에서 실행되고, 포트는 9093을 사용
--> node.id가 2인 브로커는 vm-3에서 실행되고, 포트는 9093을 사용.
다음으로 listeners와 advertised.listeners를 수정해준다. 이는 Kafka Broker가 통신하는 방식을 설정하는 중요한 항목이다.
#vm-1
listeners=PLAINTEXT://vm-1:9092,CONTROLLER://vm-1:9093
...
advertised.listeners=PLAINTEXT://vm-1:9092,CONTROLLER://vm-1:9093
#vm-2
listeners=PLAINTEXT://vm-2:9092,CONTROLLER://vm-2:9093
...
advertised.listeners=PLAINTEXT://vm-2:9092,CONTROLLER://vm-2:9093
#vm-3
listeners=PLAINTEXT://vm-3:9092,CONTROLLER://vm-3:9093
...
advertised.listeners=PLAINTEXT://vm-3:9092,CONTROLLER://vm-3:9093
위와 같이 각 노드에 맞는 IP와 포트를 입력해야한다.
모든 수정을 완료했으면 :wq를 통해 저장하고 빠져나오면 된다.
Kafka 스토리지 초기화
다음으로 Kafka Broker의 로그 디렉토리를 초기화 한다.
# 모든 서버
$ bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
Broker 실행
이제 모든 설정은 끝났다. 각 서버에서 Broker를 실행해보자 명령어는 다음과 같다. -daemon 옵션을 사용하면 백그라운드에서 실행된다.
$ bin/kafka-server-start.sh -daemon config/kraft/server.properties
# jps로 확인
$ jps
# 종료 명령어
# bin/kafka-server-stop.sh
모든 서버에서 정상적으로 실행됨을 확인할 수 있다.
Topic 생성
Kafka가 정상적으로 실행되는지 확인하기 위해 토픽을 생성해보자.
아래 명령어로 test-topic이라는 토픽을 생성할 수 있다. 이는 3개의 파티션과 3개의 복제본을 가지는 test-topic이 생성된다.
$ bin/kafka-topics.sh --create --topic test-topic --bootstrap-server vm-1:9092 --partitions 3
--replication-factor 3
# Topic 확인
$ bin/kafka-topics.sh --list --bootstrap-server vm-1:9092
test-topic이 잘 생성된 것을 확인할 수 있다.
Producer/Consumer 테스트
다음으로 Producer가 test-topic에 데이터를 잘 보내는지와 Consumer가 test-topic에서 데이터를 잘 읽어오는지 확인해보자.
Producer 실행
$ bin/kafka-console-producer.sh --topic test-topic --bootstrap-server vm-1:9092
Hello Kafka! 라는 메시지를 test-topic에 보냈다.
Consumer 실행
$ bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server vm-2:9092
test-topic에 저장된 Hello Kafka!라는 메시지를 잘 읽어 오는 것을 확인할 수 있다.
마무리
이번 글에서는 Kafka 설치 과정과 간단한 Topic 생성 및 Producer/Consumer 테스트를 진행하였다.
Kafka의 KRaft 모드를 활용하여 간단히 클러스터를 설정하고, 기본적인 메시징 기능이 정상적으로 작동하는지 확인할 수 있었다.
이러한 Kafka를 타 시스템과 연동하여 사용하면 좋은 시너지를 낼 것 같다.
'Data Engineering > Kafka' 카테고리의 다른 글
[Kafka] Zookeeper와 KRaft(Kafka Raft) (0) | 2025.01.07 |
---|---|
[Kafka] Kafka 데이터 흐름 이해하기: Partition과 Offset (0) | 2025.01.07 |
[Kafka] Apache Kafka 개요 (0) | 2024.12.28 |