업무 관련으로 사내 적용을 위한 디렉토리 구성안이며,
디렉토리 용량 등은 임의로 지정된 부분임을 언급합니다.


설치/구성 (no script)


서버 구성

구분 버전 비고
환경 cloud VM 환경 또는 vmware/oracle vm을 통한 가상vm 환경 서버
- Version : Rocky 8 (release 8.9)
2node 테스트 시에는 oracle vm으로,
3node 테스트 시에는 GCP에서 서버 구성.
OS 선택 시 Linux 계열로 진행 하였고, 2node : centos 7, 3node : Rocky 8 로 수행
리소스 - 리소스 사양 : 4C 4G 
- 서버 대수 : 3EA
아래 kafka zookeeper의 기본 heap memory를 참고해서 서버 메모리는 조정하면 된다.
cloud 서비스를 이용한다면 각 리소스 제공 표에 따라 4C 4G 이상으로 진행 하면 좋다.

[ heap memory default setting ]
 - kafka : 1G (~bin/kafka-server-start.sh)
 - zookeeper : 512M (~bin/zookeeper-server-start.sh)

Disk 구성 [ os ]
/ : 30G                # os 영역

[kafka]
/kafka 10G          #엔진 영역
/kaf_data 20G     #
데이터 영역
/zoo_data 20G   #
데이터 영역
/svc_log 20G      #
서비스 로그 영역
os 영역은 현재 테스트 서버 만드는 형상 관련이니 참고만 한다.
 
kafka 용도를 위해 디스크를 별도 추가 할당 하여 구성 한다.
서버 생성 후 바로 디스크 세팅 해주면 되고
파일시스템은 centos7, rocky8 둘다 xfs 로 구성/포맷 했다.

# cd /
# mkdir kafka kaf_data zoo_data svc_log
그 다음 mount 처리 후 fstab에 마운트 포인트별로 등록한다.
별도의 디스크를 할당 받지 않고 / 이하에 그냥 생성했을 경우 fstab 작업 불필요
kafka kafka_2.13-3.7.0 로 진행 한다. Released Feb 27, 2024

 


kafka 구성

# 내용 명령어
계정 root 로 작업 수행
1 yum으로 필요한 프로그램들을 설치 한다.
** java openjdk 11로 설치
***
오른쪽 내용 중에 서버에 이미 설치 되어 있는 파일이 있을 수도 있음.
# yum install java-11-openjdk.x86_64 -y
# yum install vim-common.x86_64 -y
# yum install binutils.x86_64 -y
# yum install lsof -y
# yum install nmap-ncat.x86_64 –y
# yum install wget.x86_64 –y

 
# yum install java-11-openjdk-devel.x86_64 -y
(produce/consume 테스트 관련으로 javac 필요하여 설치)
2 /etc/hosts파일에 broker 서버 호스트명과 ip 매칭해주기
(이하 호스트명은 broker1, broker2, broker3 )
 

모든 서버의 /etc/hosts에 작업 필요.
 
, GCP, AWS 등 외부 IP가 있다면
입력 시 해당 서버의 broker는 내부 IP, 연동 서버는 외부 IP로 입력해준다
<< 예시 >>
호스트      내부 ip                 외부ip
broker1 10.123.123.123 35.123.123.123
broker2 10.123.123.124 35.123.123.124
broker3 10.123.123.125 35.123.123.125

ex) broker1번 수정 작업 시
## root 수행
# cp -a /etc/hosts /etc/hosts_orig

# vi /etc/hosts
10.123.123.123 broker1 ##10.x.x.x 내부 ip
35.123.123.124 broker2 ## 외부 ip
35.123.123.125 broker3 ## 외부 ip
3 kafka 솔루션 계정 생성 # useradd kafka
** 별도의 관리그룹이 있거나 한다면 옵션값 주면 됨.
# passws kafka
4 kafka 계정의 .bash_profile JAVJA_HOME jdk 위치 잡아주기
(export~)
# su - kafka  ##계정이 kafka가 아닌경우
# cd ~kafka
# vi .bash_profile

#####아래 확인/추가######
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.22.0.7-2-.el8.x86_64
export PATH=$PATH:$JAVA_HOME/bin

***
경로는 서버의 ls로 확인해서 복붙하는게 정확
5 서버 구성 시 포맷 및 mount 한 디렉토리에 대해
아래 depth로 디렉토리를 생성한다.

 /kafka/app/configuration
 /kafka/app/script
 /kafka/app/src

 /zoo_data/translog
 /svc_log/kaf_log
 /svc_log/zoo_log

그리고 디렉토리에 대해 전부 kafka 계정 권한을 부여한다.
# mkdir  /kafka/app/configuration /kafka/app/script /kafka/app/src
# mkdir /zoo_data/translog /svc_log/kaf_log /svc_log/zoo_log
 
디렉토리 권한은 아래와 같이 준다. (디렉토리 나열해서 되는진 안해봄ㅋㅋㅋ)

# chown kafka:kafka -R /kafka
# chown kafka:kafka -R /kaf_data
# chown kafka:kafka -R /zoo_data
# chown kafka:kafka -R /svc_log
이 시점부터 kafka 계정으로 진행합니다.
root로 되어있는 파일이나 디렉토리가 있는경우
chown -R kafka:kafka 디렉토리명 또는 파일명을 적어서 kafka 권한으로 변경합니다.
6 kafka_2.13-3.7.0.tgz (binary file, scala 2.13) /kafka/app/src로 파일 다운로드 및 /kafka에 압축 해제
  
# wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
# tar -zxvf kafka_2.13-3.7.0.tgz -C /kafka
7 /kafka/kafka_2.13-3.7.0/config 에서
server.properties, zookeeper.properties 2파일
/kafka/app/configuration
복사

/kafka/app/configuration 에서 원본파일용으로 한번 더 복사
# cp /kafka/kafka_2.13-3.7.0/config/server.properties /kafka/app/configuration
# cp /kafka/kafka_2.13-3.7.0/config/zookeeper.properties /kafka/app/configuration

# cd /kafka/app/configuration
# cp -a server.properties server.properties_org
# cp -a zookeeper.properties zookeeper.properties_org
8  /kafka/app/configuration
server.properties
zookeeper.properties 파일 수정 
    
  
[ kafka - server.properties ] 
    ##
주석 해제 및 수정
    - listeners=PLAINTEXT://:9092
    - advertised.listeners=PLAINTEXT://hostname:9092
    ##
내용 수정
   - broker.id=1 or 2 or 3 ###
이거 서버별로 설정하는거임.
    - log.dirs=/kaf_data
    - offsets.topic.replication.factor=3
    - zookeeper.connector~ /zoo_data
    ##
추가 config
    - min.insync.replicas=2
 [ zookeeper - zookeeper.properties ]
    ##
내용 수정
    - dataDir=/zoo_data (snapshot)
    ##
추가 config
    - dataLogDir=/zoo_data/translog
    - tickTime=2000
    - initLimit=10
    - syncLimit=5
    - server.1=broker1:2888:3888
    - server.2=broker2:2888:3888
    - server.3=broker3:2888:3888
9 /kafka/kafka_2.13-3.7.0/bin dir heap mem 수정해주기
(서버에 맞게)
export
해서 변경할 수 있으면 그렇게 변경해도 될 것 같으나 방법을 모르겠음..ㅋㅋ;;
 
kafka-server-start.sh : KAFKA_HEAP_OPTS :: default 1G
 zookeeper-server-start.sh : KAFKA_HEAP_OPTS :: default 512m
10 /zoo_data broker별로 myid 1,2,3 생성
    
broker1 서버
 # cd /zoo_date
 # echo 1 >> myid

broker2  서버
 # cd /zoo_date
 # echo 2 >> myid

broker3  서버
 # cd /zoo_data
 # echo 3 >> myid
11 서비스 기동
zookeeper -> kafka 순으로 기동하고,
kafka -> zookeeper 순으로 서비스를 내린다.

기동 명령어는 LOG_DIR 값을 export 해서 쓰지않고 명령어 라인으로 한줄에 넣는걸로 했다.
(사내에서는 간단하게 start, stop script로 해놔서 긴 줄 안쓰게 했다.)

LOG_DIR 값을 주지 않고 기동할 경우, 아래 "디렉토리 구성안" 의 AS-IS 형상에서 kafka~/logs 로 파일이 생기게 되므로,
상황에 따라서 설정 하면 되겠다.
zookeeper 기동
#LOG_DIR=/svc_log/zoo_log /kafka/kafka_2.13-3.7.0/bin/zookeeper-server-start.sh -daemon /kafka/app/configuration/zookeeper.properties


kafka 기동
# LOG_DIR=/svc_log/kaf_log /kafka/kafka_2.13-3.7.0/bin/kafka-server-start.sh -daemon /kafka/app/configuration/server.properties


/////// 중단 ///////
그냥 bin dir가서 kafka부터 내리면 되는데,
kafka가 내려가는데 시간이 좀 걸린다.
따라서 kafka가 내려간거 꼭 확인 한 다음 zookeeper를 내리는게 좋다.
(성질급해서 막 내렸다가 kafka 를 kill로 죽여야 할수 있다.)

대충 bin으로 가서
# ./kafka-server-stop.sh
# ./zookeeper-servere-stop.sh

디렉토리 구성안에 대한 원본/변경안 내역

더보기

data영역은 properties에서 변경할 수 있고,

솔루션 로그는 kafka-run-class.sh 에서 사용하는 LOG_DIR 을 통해 핸들링할 수 있다.

kafka-run-class.sh는 kafka의 bin DIR에 거의 모든 *.sh 파일에 들어있는데,

우리가 실질적으로 기동할 때 쓰는 형상의 스크립트 (ex, kafka-server-strat, zookeeper-server-start) 에서의 export 형식으로 값을 줘서 사용 해주거나 어딘가의 파일에 export 해서 사용하면 된다.

(위 11번 항목 참고)

 

첨에는 log를 다 쪼갰는데, mount point가 너무 많다는 지적으로 log를 줄였다.

data까지 줄이면 어떠냐는 질문에는 zoo_data의 snapshot 데이터의 약간의 복구 형상 관련으로 disk가 분리되는게 안전할것 같다 말하며 방어했다.

 

zoo_data의 snapshot 의 복구 기능은 사실 partition(kaf_data)의 껍데기 형상만의 복구지만,

아무것도 복구 안되는 것보단 낫긴하지만은 사실 프로세스가 다 내려간 상태에서는 전체 초기화가 될 수 있으므로 사실 좀 위험하기도 하다.

snapshot으로 여러번 테스트 했지만 복구는 역시 mirror-maker를 통해서 복구하는게 맞아보인다.
###mirror-maker는 아직 테스트를 하지 못했다..

728x90

+ Recent posts