941 words
5 minutes
[kafka]02. Kafka 설치하기
Introduction
환경 세팅
카프카는 윈도우, MacOS, 리눅스 등 다양한 운영체제에서 설치 할 수 있다.
Docker 컨테이너를 활용하여 보다 쉽게 카프카를 설치할 수도 있지만, 이 글에서는 리눅스 환경에 직접 설치하는 방법을 다룬다.
사전에 자바 17버전을 설치했다고 가정하고 진행한다. 카프카와 카프카의 메타데이터를 관리하는 주키퍼를 설치한다.
주키퍼 설치
일반적으로 /usr/local/ 디렉토리에 카프카를 설치하지만 여기서는 실습의 편의를 위해 ~/.local 디렉토리에 설치한다.
1. 작업 디렉토리 생성
# .local 폴더가 없다면 생성mkdir ~/.local2. 주키퍼 다운로드 및 압축해제
# 설치할 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.gz3. 주키퍼 디렉토리 이름 변경
mv apache-zookeeper-${ZOOKEEPER_VERSION} ~/.local/zookeeper4. 주키퍼 설정파일 생성
주키퍼 설정 디렉토리로 이동 후 설정파일을 생성
ZOOKEEPER_HOME=~/.local/zookeeper
cd $ZOOKEEPER_HOME/conf
# sample 설정 파일을 복사cp zoo_sample.cfg zoo.cfg4. 주키퍼 실행
cd $ZOOKEEPER_HOME/bin
./zkServer.sh start5. 주키퍼 실행상태 확인
telnet 명령어로 주키퍼 서버 실행 상태를 확인
telnet localhost 2181srvr 명령어로 주키퍼 서버의 상태를 확인
# 주키퍼 정상실행시 출력
Zookeeper version: 3.9.3-c26634f34490bb0ea7a09cc51e05ede3b4e320ee, built on 2024-10-17 23:21 UTCLatency min/avg/max: 0/0.0/0Received: 1Sent: 0Connections: 1Outstanding: 0Zxid: 0x183Mode: standaloneNode count: 161Connection closed by foreign host.이 과정을 간단히 스크립트로 만들면 이렇다.
#!/bin/bash
# VariablesZOOKEEPER_HOST="localhost"ZOOKEEPER_PORT="2181"STATUS_COMMAND="srvr"
# Check if ZooKeeper is runningecho $STATUS_COMMAND | nc $ZOOKEEPER_HOST $ZOOKEEPER_PORT >/dev/null 2>&1
# Check the responseif [ $? -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. 카프카 다운로드 및 압축 해제
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}.tgz2. 디렉토리 이름 변경
mv kafka_2.13-${KAFKA_VERSION}/ kafka3. Kafka Broker 실행 스크립트 작성
실행을 위한 간단한 스크립트를 작성해서 ~/.local/scripts/ 하위에 둔다.
#!/bin/bash
KAFKA_HOME=/home/$USER/.local/kafkaKAFKA_PROPERTIES=$KAFKA_HOME/config/server.properties
echo "=================================="echo "KAFKA_HOME: $KAFKA_HOME"echo "KAFKA_PROPERTIES: $KAFKA_PROPERTIES"echo "=================================="
echo "Starting Kafka Broker"
# Error Handlingerror_handling() { echo "==================================" echo " [ERROR] Kafka Broker failed to start." echo "==================================" exit 1}
# Check Pathif [ ! -d "$KAFKA_HOME" ]; then echo "==================================" echo " [ERROR] Kafka Home directory not found: $KAFKA_HOME" echo "==================================" error_handlingfi
if [ ! -f "$KAFKA_PROPERTIES" ]; then echo "==================================" echo " [ERROR] Kafka Properties file not found: $KAFKA_PROPERTIES" echo "==================================" error_handlingfi
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_handlingfi
echo "Kafka Broker Started successfully"4. 실행 권한 부여 및 실행
chmod +x ~/.local/scripts/start_kafka_broker.sh
./.local/scripts/start_kafka_broker.sh몇가지 체크용 스크립트
주키퍼와 카프카 브로커가 정상적으로 실행되었는지 확인하기 위한 간단한 스크립트를 작성한다. 핸들링해야 할 브로커의 수가 많아질 경우 스크립트 보다는 UI 기반의 툴을 사용하는 좋다.
TOPIC 생성
#!/bin/bash
KAFAKA_HOME=/home/$USER/.local/kafkaKAFAKA_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/kafkaKAFAKA_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_NAMETOPIC 상세정보 확인
#!/bin/bash
KAFAKA_HOME=/home/$USER/.local/kafkaKAFAKA_PROPERTIES=$KAFAKA_HOME/config/server.properties
# Define the first argument as a variableTOPIC_NAME=$1cd $KAFAKA_HOME
echo "Describing Kafka Topic"
// Topic 정보 확인bin/kafka-topics.sh --describe \ --bootstrap-server localhost:9092 \ --topic $TOPIC_NAMETOPIC List 확인
#!/bin/bash
KAFAKA_HOME=/home/$USER/.local/kafkaKAFAKA_PROPERTIES=$KAFAKA_HOME/config/server.propertiesTOPIC_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:9092Reference
- 카프카 핵심 가이드
[kafka]02. Kafka 설치하기
https://yjinheon.netlify.app/posts/02de/kafka/de-kafka-02-install/