CentOS에서 Kafka 중앙 메시지 브로커 설치 및 설정

환경 구성 및 사전 준비

  • 운영체제: CentOS Linux 7.6.1810 (Core)
  • Kafka 버전: kafka_2.12-2.2.0
  • JDK 버전: 1.8.0_212 이상

설치 단계

1. 패키지 다운로드

Apache 공식 저장소에서 Kafka 압축 파일을 다운로드합니다.

curl -O https://archive.apache.org/dist/kafka/2.2.0/kafka_2.12-2.2.0.tgz

접속이 불가할 경우 다른 미러를 사용하세요.

wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.2.0/kafka_2.12-2.2.0.tgz

2. 설치 디렉터리 생성 및 압축 해제

mkdir -p /usr/local/kafka
tar -xzf kafka_2.12-2.2.0.tgz -C /usr/local/kafka/

3. 구성 파일 수정

Kafka 서버 설정 (/usr/local/kafka/kafka_2.12-2.2.0/config/server.properties)

  • 로그 경로 지정: log.dirs=/usr/local/kafka/kafka_2.12-2.2.0/kafka-logs
  • 외부 접근 허용: listeners=PLAINTEXT://<IP>:9092 (주석 제거)
  • 공개 주소 설정: advertised.listeners=PLAINTEXT://<IP>:9092 (실제 서버 IP 입력)

ZooKeeper 설정 (/usr/local/kafka/kafka_2.12-2.2.0/config/zookeeper.properties)

  • 데이터 저장 위치 변경: dataDir=/usr/local/kafka/kafka_2.12-2.2.0/zookeeper_data

4. 서비스 시작

ZooKeeper 실행:

nohup /usr/local/kafka/kafka_2.12-2.2.0/bin/zookeeper-server-start.sh \
/usr/local/kafka/kafka_2.12-2.2.0/config/zookeeper.properties \
> /var/log/kafka/zookeeper.log 2>&1 &

Kafka 서버 실행:

nohup /usr/local/kafka/kafka_2.12-2.2.0/bin/kafka-server-start.sh \
/usr/local/kafka/kafka_2.12-2.2.0/config/server.properties \
> /var/log/kafka/kafka.log 2>&1 &

5. 기능 검증

테스트용 토픽 생성:

/usr/local/kafka/kafka_2.12-2.2.0/bin/kafka-topics.sh \
--create \
--zookeeper localhost:2181 \
--replication-factor 1 \
--partitions 1 \
--topic test-topic

생성된 토픽 목록 확인:

/usr/local/kafka/kafka_2.12-2.2.0/bin/kafka-topics.sh \
--list \
--zookeeper localhost:2181

메시지 발행:

/usr/local/kafka/kafka_2.12-2.2.0/bin/kafka-console-producer.sh \
--bootstrap-server localhost:9092 \
--topic test-topic

메시지 수신:

/usr/local/kafka/kafka_2.12-2.2.0/bin/kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic test-topic \
--from-beginning

6. 자동 설치 스크립트

다음 스크립트는 시스템의 실시간 IP 주소를 추출하여 Kafka 설정을 자동 적용합니다.

#!/bin/bash

# Kafka 다운로드
wget -q https://archive.apache.org/dist/kafka/2.2.0/kafka_2.12-2.2.0.tgz -O /tmp/kafka.tar.gz

# 설치 폴더 생성 및 압축 해제
mkdir -p /usr/local/kafka
tar -xzf /tmp/kafka.tar.gz -C /usr/local/kafka/

# IP 주소 자동 감지
INTERFACE=$(ip a | grep '2: ' | awk '{print $2}' | sed 's/://' )
IP_ADDR=$(ifconfig "$INTERFACE" | grep -oP '(?<=inet\s)\d+\.\d+\.\d+\.\d+' | head -1)

if [ -n "$IP_ADDR" ]; then
    CONFIG_FILE="/usr/local/kafka/kafka_2.12-2.2.0/config/server.properties"
    
    # 설정값 업데이트
    sed -i "s|#listeners=PLAINTEXT://:9092|listeners=PLAINTEXT://$IP_ADDR:9092|" "$CONFIG_FILE"
    sed -i "s|log.dirs=.*|log.dirs=/usr/local/kafka/kafka_2.12-2.2.0/kafka-logs|" "$CONFIG_FILE"
    sed -i "s|#advertised.listeners=PLAINTEXT://localhost:9092|advertised.listeners=PLAINTEXT://$IP_ADDR:9092|" "$CONFIG_FILE"
else
    echo "Error: Could not detect network interface IP. Manual configuration required."
    exit 1
fi

# 서비스 시작
nohup /usr/local/kafka/kafka_2.12-2.2.0/bin/zookeeper-server-start.sh \
/usr/local/kafka/kafka_2.12-2.2.0/config/zookeeper.properties \
> /var/log/kafka/zookeeper.log 2>&1 &

nohup /usr/local/kafka/kafka_2.12-2.2.0/bin/kafka-server-start.sh \
/usr/local/kafka/kafka_2.12-2.2.0/config/server.properties \
> /var/log/kafka/kafka.log 2>&1 &

echo "Kafka and ZooKeeper services started."

7. 참고 문서

태그: kafka ZooKeeper CentOS Message Broker distributed system

7월 14일 17:50에 게시됨