941 words
5 minutes
[kafka]02. Kafka 설치하기

Introduction#

환경 세팅#

카프카는 윈도우, MacOS, 리눅스 등 다양한 운영체제에서 설치 할 수 있다.

Docker 컨테이너를 활용하여 보다 쉽게 카프카를 설치할 수도 있지만, 이 글에서는 리눅스 환경에 직접 설치하는 방법을 다룬다.

사전에 자바 17버전을 설치했다고 가정하고 진행한다. 카프카와 카프카의 메타데이터를 관리하는 주키퍼를 설치한다.

주키퍼 설치#

일반적으로 /usr/local/ 디렉토리에 카프카를 설치하지만 여기서는 실습의 편의를 위해 ~/.local 디렉토리에 설치한다.

1. 작업 디렉토리 생성

Terminal window
# .local 폴더가 없다면 생성
mkdir ~/.local

2. 주키퍼 다운로드 및 압축해제

Terminal window
# 설치할 zookeeper 버전
ZOOKEEPER_VERSION=3.6.3
# zookeeper 다운로드
wget https://downloads.apache.org/zookeeper/zookeeper-${ZOOKEEPER_VERSION}/apache-zookeeper-${ZOOKEEPER_VERSION}-bin.tar.gz
tar -xvfz apache-zookeeper-${ZOOKEEPER_VERSION}-bin.tar.gz

3. 주키퍼 디렉토리 이름 변경

Terminal window
mv apache-zookeeper-${ZOOKEEPER_VERSION} ~/.local/zookeeper

4. 주키퍼 설정파일 생성

주키퍼 설정 디렉토리로 이동 후 설정파일을 생성

Terminal window
ZOOKEEPER_HOME=~/.local/zookeeper
cd $ZOOKEEPER_HOME/conf
# sample 설정 파일을 복사
cp zoo_sample.cfg zoo.cfg

4. 주키퍼 실행

Terminal window
cd $ZOOKEEPER_HOME/bin
./zkServer.sh start

5. 주키퍼 실행상태 확인

telnet 명령어로 주키퍼 서버 실행 상태를 확인

Terminal window
telnet localhost 2181

srvr 명령어로 주키퍼 서버의 상태를 확인

Terminal window
# 주키퍼 정상실행시 출력
Zookeeper version: 3.9.3-c26634f34490bb0ea7a09cc51e05ede3b4e320ee, built on 2024-10-17 23:21 UTC
Latency min/avg/max: 0/0.0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x183
Mode: standalone
Node count: 161
Connection closed by foreign host.

이 과정을 간단히 스크립트로 만들면 이렇다.

#!/bin/bash
# Variables
ZOOKEEPER_HOST="localhost"
ZOOKEEPER_PORT="2181"
STATUS_COMMAND="srvr"
# Check if ZooKeeper is running
echo $STATUS_COMMAND | nc $ZOOKEEPER_HOST $ZOOKEEPER_PORT >/dev/null 2>&1
# Check the response
if [ $? -eq 0 ]; then
RESPONSE=$(echo $STATUS_COMMAND | nc $ZOOKEEPER_HOST $ZOOKEEPER_PORT)
echo -e "ZooKeeper is running and responding with \n \"$RESPONSE\" "
else
echo -e "ZooKeeper is not running or not reachable on port $ZOOKEEPER_PORT."
fi

카프카 브로커 설치#

1. 카프카 다운로드 및 압축 해제

Terminal window
cd ~/.local
# 설치할 카프카 버전
KAFKA_VERSION=3.8.0
# 카프카 다운로드
wget https://downloads.apache.org/kafka/${KAFKA_VERSION}/kafka_2.13-${KAFKA_VERSION}.tgz
# 압축 해제
tar -xvzf kafka_2.13-${KAFKA_VERSION}.tgz

2. 디렉토리 이름 변경

Terminal window
mv kafka_2.13-${KAFKA_VERSION}/ kafka

3. Kafka Broker 실행 스크립트 작성

실행을 위한 간단한 스크립트를 작성해서 ~/.local/scripts/ 하위에 둔다.

#!/bin/bash
KAFKA_HOME=/home/$USER/.local/kafka
KAFKA_PROPERTIES=$KAFKA_HOME/config/server.properties
echo "=================================="
echo "KAFKA_HOME: $KAFKA_HOME"
echo "KAFKA_PROPERTIES: $KAFKA_PROPERTIES"
echo "=================================="
echo "Starting Kafka Broker"
# Error Handling
error_handling() {
echo "=================================="
echo " [ERROR] Kafka Broker failed to start."
echo "=================================="
exit 1
}
# Check Path
if [ ! -d "$KAFKA_HOME" ]; then
echo "=================================="
echo " [ERROR] Kafka Home directory not found: $KAFKA_HOME"
echo "=================================="
error_handling
fi
if [ ! -f "$KAFKA_PROPERTIES" ]; then
echo "=================================="
echo " [ERROR] Kafka Properties file not found: $KAFKA_PROPERTIES"
echo "=================================="
error_handling
fi
echo "Kafka Home: $KAFKA_HOME"
echo "Kafka Properties: $KAFKA_PROPERTIES"
# Kafka Broker 시작
$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_PROPERTIES
# Kafka 시작 상태 확인
if [ $? -ne 0 ]; then
error_handling
fi
echo "Kafka Broker Started successfully"

4. 실행 권한 부여 및 실행

Terminal window
chmod +x ~/.local/scripts/start_kafka_broker.sh
./.local/scripts/start_kafka_broker.sh

몇가지 체크용 스크립트#

주키퍼와 카프카 브로커가 정상적으로 실행되었는지 확인하기 위한 간단한 스크립트를 작성한다. 핸들링해야 할 브로커의 수가 많아질 경우 스크립트 보다는 UI 기반의 툴을 사용하는 좋다.

TOPIC 생성#

#!/bin/bash
KAFAKA_HOME=/home/$USER/.local/kafka
KAFAKA_PROPERTIES=$KAFAKA_HOME/config/server.properties
# 첫 번째 인자를 변수에 저장
TOPIC_NAME=$1
echo "The first argument is: $TOPIC_NAME"
echo "Creating Kafka Topic"
echo "Kafka Home: $KAFAKA_HOME"
echo "Kafka Properties: $KAFAKA_PROPERTIES"
cd $KAFAKA_HOME
bin/kafka-topics.sh --bootstrap-server localhost:9092 \
--create --topic $TOPIC_NAME \
--partitions 1 \
--replication-factor 1
echo "Kafka Topic $TOPIC_NAME created successfully"

TOPIC에 데이터 쓰기#

#!/bin/bash
KAFAKA_HOME=/home/$USER/.local/kafka
KAFAKA_PROPERTIES=$KAFAKA_HOME/config/server.properties
TOPIC_NAME=$1
echo "write kafka topic"
echo "Kafka Home: $KAFAKA_HOME"
echo "Kafka Properties: $KAFAKA_PROPERTIES"
cd $KAFAKA_HOME
bin/kafka-console-producer.sh --bootstrap-server localhost:9092 \
localhost:9092 --topic $TOPIC_NAME

TOPIC 상세정보 확인#

#!/bin/bash
KAFAKA_HOME=/home/$USER/.local/kafka
KAFAKA_PROPERTIES=$KAFAKA_HOME/config/server.properties
# Define the first argument as a variable
TOPIC_NAME=$1
cd $KAFAKA_HOME
echo "Describing Kafka Topic"
// Topic 정보 확인
bin/kafka-topics.sh --describe \
--bootstrap-server localhost:9092 \
--topic $TOPIC_NAME

TOPIC List 확인#

#!/bin/bash
KAFAKA_HOME=/home/$USER/.local/kafka
KAFAKA_PROPERTIES=$KAFAKA_HOME/config/server.properties
TOPIC_NAME=$1
echo "Reading Kafka Topic"
echo "Kafka Home: $KAFAKA_HOME"
echo "Kafka Properties: $KAFAKA_PROPERTIES"
cd $KAFAKA_HOME
bin/kafka-topics.sh --list \
--bootstrap-server localhost:9092

Reference#

  • 카프카 핵심 가이드
[kafka]02. Kafka 설치하기
https://yjinheon.netlify.app/posts/02de/kafka/de-kafka-02-install/
Author
Datamind
Published at
2024-11-23
License
CC BY-NC-SA 4.0