환경 구성 및 사전 준비
- 운영체제: 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."