CentOS 7.5에서 Kafka 클러스터 설치 및 구성

환경 설정 및 사전 준비

3대의 서버로 구성된 Kafka 클러스터를 구축하기 위해 먼저 시스템 환경을 정리합니다.

  • 운영체제: CentOS Linux release 7.5.1804 (Core)
  • 메모리: 각 노드별 8GB 이상 권장 (가상머신 사용 시 2GB도 가능)
  • 노드 수: 3개 (CDHNode1, CDHNode2, CDHNode3)

필수 소프트웨어 버전

소프트웨어버전다운로드 링크
Javajdk-8u172-linux-x64다운로드
ZooKeeperzookeeper-3.4.5-cdh5.14.2다운로드
Kafkakafka_2.12-1.1.0다운로드
Kafka Managerkafka-manager-1.3.3.4 (사전 컴파일 버전)다운로드

노드 역할 분배

호스트명IP 주소ZooKeeperKafka
CDHNode1192.168.223.201YesYes
CDHNode2192.168.223.202YesYes
CDHNode3192.168.223.203YesYes

시스템 초기화 작업

모든 노드에서 다음 작업을 수행합니다.

  1. SELinux 비활성화:
  2. sed -i 's/^SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config
    setenforce 0
  3. firewalld 및 iptables 중단:
  4. systemctl disable firewalld; systemctl stop firewalld
    systemctl disable iptables; systemctl stop iptables
  5. 시간 동기화 설정:
  6. echo "*/5 * * * * /usr/sbin/ntpdate asia.pool.ntp.org | logger -t NTP" >> /var/spool/cron/root
  7. 언어 및 시간대 설정:
  8. echo 'export TZ=Asia/Shanghai' >> /etc/profile
    echo 'export LANG=en_US.UTF-8' >> /etc/profile
    . /etc/profile
  9. kafka 사용자 생성 및 권한 설정:
  10. useradd -m kafka
    echo '123456' | passwd --stdin kafka
    
    su - kafka
    echo 'export PS1="\u@\h:\$PWD>"' >> ~/.bash_profile
    echo "alias mv='mv -i'; alias rm='rm -i'" >> ~/.bash_profile
    . ~/.bash_profile
  11. SSH 무결성 설정 (CDHNode1에서 키 생성 후 복사):
  12. ssh-keygen -t rsa
    cd .ssh
    cat id_rsa.pub > authorized_keys
    chmod 600 authorized_keys
    zip -r ssh.zip .ssh
    
    scp ssh.zip CDHNode2:/home/kafka
    scp ssh.zip CDHNode3:/home/kafka
    # 이후 압축 해제 및 권한 조정

JDK 1.8 설치

모든 노드에 동일하게 적용됩니다.

tar zxvf jdk-8u172-linux-x64.tar.gz
mkdir -p /home/kafka/app
mv jdk-8u172-linux-x64 /home/kafka/app/jdk
rm -f jdk-8u172-linux-x64.tar.gz

# 환경변수 설정
echo '#java
export JAVA_HOME=/home/kafka/app/jdk
export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin' >> ~/.bash_profile
. ~/.bash_profile

java -version

ZooKeeper 설치 및 구성

CDHNode1에서 시작하여 다른 노드로 배포합니다.

tar zxvf zookeeper-3.4.5-cdh5.14.2.tar.gz
mv zookeeper-3.4.5-cdh5.14.2 /home/kafka/app/zookeeper
rm -f zookeeper-3.4.5-cdh5.14.2.tar.gz

# 환경 변수
echo '#zk
export ZOOKEEPER_HOME=/home/kafka/app/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin' >> ~/.bash_profile
. ~/.bash_profile

# 설정 파일 작성
vim /home/kafka/app/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/kafka/data/zookeeper/zkdata
dataLogDir=/home/kafka/data/zookeeper/zkdatalog
clientPort=2181
server.1=CDHNode1:2888:3888
server.2=CDHNode2:2888:3888
server.3=CDHNode3:2888:3888
mkdir -p /home/kafka/data/zookeeper/zkdata
mkdir -p /home/kafka/data/zookeeper/zkdatalog
mkdir -p /home/kafka/app/zookeeper/logs

# myid 파일 생성
echo 1 > /home/kafka/data/zookeeper/zkdata/myid

# 로그 설정
vim /home/kafka/app/zookeeper/libexec/zkEnv.sh
ZOO_LOG_DIR="$ZOOKEEPER_HOME/logs"
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"

vim /home/kafka/app/zookeeper/conf/log4j.properties
zookeeper.root.logger=INFO, ROLLINGFILE
zookeeper.log.dir=/home/kafka/app/zookeeper/logs
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender

CDHNode2, CDHNode3로 배포:

scp -pr /home/kafka/app/zookeeper CDHNode2:/home/kafka/app
scp -pr /home/kafka/app/zookeeper CDHNode3:/home/kafka/app
ssh CDHNode2 "echo 2 > /home/kafka/data/zookeeper/zkdata/myid"
ssh CDHNode3 "echo 3 > /home/kafka/data/zookeeper/zkdata/myid"

시작 및 상태 확인:

/home/kafka/app/zookeeper/bin/zkServer.sh start
/home/kafka/app/zookeeper/bin/zkServer.sh status
jps

Kafka 설치 및 설정

CDHNode1에서 시작합니다.

tar zxvf kafka_2.12-1.1.0.tgz
mv kafka_2.12-1.1.0 /home/kafka/app/kafka
rm -f kafka_2.12-1.1.0.tgz

# 환경 변수
echo '#kafka
export KAFKA_HOME=/home/kafka/app/kafka
export PATH=$PATH:$KAFKA_HOME/bin' >> ~/.bash_profile
. ~/.bash_profile

# server.properties 설정
vim /home/kafka/app/kafka/config/server.properties
broker.id=0
port=9092
log.dirs=/home/kafka/data/kafka/kafka-logs
num.partitions=3
default.replication.factor=3
zookeeper.connect=CDHNode1:2181,CDHNode2:2181,CDHNode3:2181
log.retention.hours=168
log.retention.bytes=1073741824
message.max.byte=5242880
replica.fetch.max.bytes=5242880
export KAFKA_HEAP_OPTS="-Xmx3G -Xms3G"
mkdir -p /home/kafka/data/kafka/kafka-logs

# 다른 노드로 복사
scp -pr /home/kafka/app/kafka CDHNode2:/home/kafka/app
scp -pr /home/kafka/app/kafka CDHNode3:/home/kafka/app
ssh CDHNode2 "mkdir -p /home/kafka/data/kafka/kafka-logs"
ssh CDHNode3 "mkdir -p /home/kafka/data/kafka/kafka-logs"

# broker.id 수정
# CDHNode2: broker.id=1
# CDHNode3: broker.id=2

클러스터 시작:

/home/kafka/app/kafka/bin/kafka-server-start.sh -daemon /home/kafka/app/kafka/config/server.properties
jps

Kafka 기본 명령어

테스트용 토픽 생성:

/home/kafka/app/kafka/bin/kafka-topics.sh --zookeeper CDHNode1:2181,CDHNode2:2181,CDHNode3:2181 --create --topic test --replication-factor 3 --partitions 3

토픽 목록 확인:

/home/kafka/app/kafka/bin/kafka-topics.sh --zookeeper CDHNode1:2181,CDHNode2:2181,CDHNode3:2181 --list

메시지 생산:

/home/kafka/app/kafka/bin/kafka-console-producer.sh --broker-list CDHNode1:9092,CDHNode2:9092,CDHNode3:9092 --topic test

메시지 소비 (그룹 기반):

/home/kafka/app/kafka/bin/kafka-console-consumer.sh --bootstrap-server CDHNode1:9092,CDHNode2:9092,CDHNode3:9092 --group test_group --topic test --reset-offsets earliest

Consumer 그룹 조회:

/home/kafka/app/kafka/bin/kafka-consumer-groups.sh --bootstrap-server CDHNode1:9092,CDHNode2:9092,CDHNode3:9092 --list

Leader 리밸런싱 실행:

/home/kafka/app/kafka/bin/kafka-preferred-replica-election.sh --zookeeper CDHNode1:2181,CDHNode2:2181,CDHNode3:2181

Kafka Manager 설치 및 활용

CDHNode1에서 설치:

unzip kafka-manager-1.3.3.4.zip
mv kafka-manager-1.3.3.4 /home/kafka/app/kafka-manager
mkdir -p /home/kafka/app/kafka-manager/logs
rm -f kafka-manager-1.3.3.4.zip

# 설정 파일 수정
vim /home/kafka/app/kafka-manager/conf/application.conf
kafka-manager.zkhosts="CDHNode1:2181,CDHNode2:2181,CDHNode3:2181"
basicAuthentication.enabled=true
basicAuthentication.username="admin"
basicAuthentication.password="password"
basicAuthentication.realm="Kafka-Manager"

서비스 시작:

nohup /home/kafka/app/kafka-manager/bin/kafka-manager -Dconfig.file=/home/kafka/app/kafka-manager/conf/application.conf -Dhttp.port=8080 > /home/kafka/app/kafka-manager/logs/server.log 2>&1 &

접속: http://CDHNode1:8080

관리자 인증 정보는 설정 파일에서 변경 가능하며, JMX 모니터링 활성화 시 추가 설정 필요.

태그: kafka ZooKeeper CentOS distributed-system message-broker

10월 2일 03:21에 게시됨