-->

[Kafka] 설치 및 환경구축

 

Oracle VM이나 AWS freetier로 리눅스 서버를 생성한다.

환경구축이 되어있다면 바로 환경을 구축한다.

 

JDK 설치

java 11을 사용하려고 한다.

$ sudo apt-get install openjdk-11-jdk
...
$ java -version
openjdk version "11.0.20" 2023-07-18

 

Confluent Kafka 설치

kafka는 왜 Apache가 아니고 Confluent를 사용하느냐면 Confluent에는 ksqldb나 schema-registry 등 기본적으로 필요한 라이브러리가 포함되어 있고 admin UI가 존재한다.

Apache Kafka는 kafka core만 있어 따로 설치를 해야한다.

다운로드해서 sftp 이용해도 되지만 수고로우니 wget으로 서버 내에 다운로드하자.

$ cd ~ # home 으로 이동
$ sudo wget https://packages.confluent.io/archive/7.1/confluent-community-7.1.2.tar.gz?_ga=2.134073358.1620010104.1705371707-1047466751.1705371655&_gl=1*182lsyw*_ga*MTA0NzQ2Njc1MS4xNzA1MzcxNjU1*_ga_D2D3EGKSGD*MTcwNTM3MTY1NS4xLjEuMTcwNTM3MTgwMi42MC4wLjA.
$ sudo tar -xvf "/confluent/confluent-community-7.1.2.tar.gz?_ga=2.168151329.1620010104.1705371707-1047466751.1705371655"

환경 변수 설정

$ sudo vi ~/.bashrc
 
# 아래 2줄 추가 (confluent kafka 압축 해제한 폴더로)
export KAFKA_HOME=/home/tkbell/confluent-7.1.2
export PATH=.:$PATH:$KAFKA_HOME/bin
 
$ . .bashrc # 수정사항 반영
 
# 터미널 재시작 후 정상적으로 환경변수 등록 확인
$ echo $KAFKA_HOME
/home/tkbell/confluent-7.1.2
$ echo $PATH
.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/tkbell/confluent-7.1.2/bin

home/$user 경로는 현재 자신 서버에 맞게 설정하면 된다.

 

Kafka 실행

기동은 Zookeeper를 먼저 실행하고 Kafka를 실행한다.

$ cd $KAFKA_HOME/etc/kafka/ # 해당 경로에 properties 파일들이 존재. 여기서 zookeeper.properties 파일과 함께 올려서 실행시킨다.
 
$ zookeeper-server-start ./zookeeper.properties  mkdir: cannot create directory ‘/confluent/bin/../logs’: Permission denied # 아 sudo 안썼구나
[0.001s][error][logging] Error opening log file '/confluent/bin/../logs/zookeeper-gc.log': No such file or directory
[0.002s][error][logging] Initialization of output 'file=/confluent/bin/../logs/zookeeper-gc.log' using options 'filecount=10,filesize=100M' failed.
Invalid -Xlog option '-Xlog:gc*:file=/confluent/bin/../logs/zookeeper-gc.log:time,tags:filecount=10,filesize=100M', see error log for details.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
 
$ sudo zookeeper-server-start ./zookeeper.properties
sudo: zookeeper-server-start: command not found # 아.....
 
# 그냥 쉘 스크립트를 실행하자....
$ sudo sh zookeeper-server-start $KAFKA_HOME/etc/kafka/zookeeper.properties

어차피 나중에 쉘로 실행할 거니까.. 일단 주키퍼 띄우고 그 상태에서 새 터미널을 띄워 kafka를 띄워보자.

$ cd $CONFLUENT_HOME
$ sudo sh kafka-server-start $KAFKA_HOME/etc/kafka/server.properties
 
...
[2024-01-16 12:07:57,039] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
[2024-01-16 12:07:57,189] INFO [BrokerToControllerChannelManager broker=0 name=alterIsr]: Recorded new controller, from now on will use broker ubuntu-20-minhalee.tkbell.gmarket.nh:9092 (id: 0 rack: null) (kafka.server.BrokerToControllerRequestThread)
[2024-01-16 12:07:57,213] INFO [BrokerToControllerChannelManager broker=0 name=forwarding]: Recorded new controller, from now on will use broker ubuntu-20-minhalee.tkbell.gmarket.nh:9092 (id: 0 rack: null) (kafka.server.BrokerToControllerRequestThread)

 

또 새 터미널을 띄워 topic을 만들어보자.

$ kafka-topics --bootstrap-server localhost:9092 --create --topic welcome-topic
Created topic welcome-topic.

 

종료할 때도 카프카를 먼저 죽이고 주키퍼를 죽이면 된다.

편하게 하게 위해서 일단 주키퍼 & 카프카 실행 쉘 스크립트를 만들어준다.

$ cd ~
$ sudo vi zoo_start.sh
sudo sh $KAFKA_HOME/bin/zookeeper-server-start $KAFKA_HOME/etc/kafka/zookeeper.properties
 
$ sudo vi kafka_start.sh
sudo sh $KAFKA_HOME/bin/kafka-server-start $KAFKA_HOME/etc/kafka/server.properties
 
$ sudo chmod +x *.sh # 누구나 실행할 수 있도록 권한 변경
 
$ ./zoo_start.sh
# 새 터미널 띄워서
$ ./kafka_start.sh

정상적으로 실행되면 완료!

 

로그 경로 변경

$ cd $KAFKA_HOME/etc/kafka
$ ls
connect-console-sink.properties    connect-mirror-maker.properties  server.properties
connect-console-source.properties  connect-standalone.properties    tools-log4j.properties
connect-distributed.properties     consumer.properties              trogdor.conf
connect-file-sink.properties       kraft                            zookeeper.properties
connect-file-source.properties     log4j.properties
connect-log4j.properties           producer.properties
$ sudo vi server.properties
 
...
# A comma separated list of directories under which to store log files
log.dirs=/home/tkbell/data/kafka-logs
...
 
$ sudo vi zookeeper.properties
 
...
dataDir=/home/tkbell/data/zookeeper
...

Virtual Box를 이용해서 kafka 테스트를 진행한다면 tmp 경로가 날아가니까 다른 데로 변경해야 하는데 Tinker 사용한다면 딱히 바꿀 필요는 없다.

그래도 운영서버에 구축한다면 주로 로그를 많이 봐야 하므로 zookeeper와 kafka의 로그 경로를 home으로 변경해 준다. 

카프카의 환경설정 파일은 server.properties 이고 Zookeeper의 환경 설정 파일은 zookeeper.properties 이다.

 

정상적으로 로그가 남는지 확인해 본다.

$ cd
$ kafka-topics --bootstrap-server localhost:9092 --create --topic welcome-topic # 신규 토픽 생성
Created topic welcome-topic.
$ cd ./data/kafka-logs/
$ ls
cleaner-offset-checkpoint    meta.properties                   replication-offset-checkpoint
log-start-offset-checkpoint  recovery-point-offset-checkpoint  welcome-topic-0

welcome-topic-0이라는 이름으로 토픽이 생성되었다. 파티션 단위로 로그가 생겨나는 것을 확인할 수 있다.

 

+ Recent posts