만들기/EagleEye

[EagleEye][환경세팅] 카프카 설치

pythaac 2022. 4. 26. 04:16

https://twofootdog.tistory.com/90

 

리눅스에 아파치 카프카(Apache Kafka) 설치하기

이번 글에서는 리눅스에 아파치 카프카(Apache Kafka)를 설치한 후 주키퍼와 연결해 볼 것이다. 이 글의 순서는 다음과 같다. 1. 사전준비 2. 아파치 카프카 설치 3. 아파치 카프카 실행/종료 4. Systemd

twofootdog.tistory.com

 

준비

  • root 계정으로 변경
    >> su
  • 호스트네임 변경
    >> hostnamectl set-hostname kafka01
    (나는 주키퍼 서버에 설치하기 때문에 zk01, zk02, zk03 사용)

 

카프카 다운로드

 

환경설정

  • 데이터 디렉토리 생성 (컨슈머가 메시지를 가져가도 데이터를 임시보관하는 기능이 있음)
    >> mkdir -p /data1 && mkdir -p /data2
  • 환경설정 파일 수정
    >> vi /usr/local/kafka/config/server.properties
############################# Server Basics #############################
broker.id=0
...

############################# Log Basics #############################
log.dirs=/tmp/kafka-logs
...

############################# Zookeeper ############################# zookeeper.connect=localhost:2181
...

1) broker.id : 브로커를 구분하는 아이디다. 이 글에서는 카프카 브로커 아이디를 호스트 명에 맞게 숫자로 지정해주겠다
(zk01 -> 1, zk02 -> 2, zk03 -> 3)
 
2) log.dir : 로그가 저장되는 위치다. 조금 전 생성했던 카프카 저장 디렉토리인 /data1, /data2를 입력해준다.
 
3) zookeeper.connect : 주키퍼 접속 정보다. 주키퍼 앙상블에 해당하는 호스트명:포트번호를 입력한다. 그런데 그냥 호스트명:포트번호만 입력하면, 여러 개의 카프카에서 주키퍼에 접근하여 지노드를 사용할 때 동일한 지노드를 사용하게 되어 충돌이 발생할 수 있으므로, 호스트명:포트번호 뒤에 지노드 이름을 추가로 입력해야 한다(이 글에서는 지노드 이름을 카프카 호스트명 + _znode 로 입력할 것이다)
// kafka01(zk01) 호스트 기준

############################# Server Basics #############################
broker.id=1
...

############################# Log Basics ############################# log.dirs=/data1,/data2
...

############################# Zookeeper ############################# zookeeper.connect=zk01:2181,zk02:2181,zk03:2181/kafka01_znode
그 외에도 환경설정 파일에는 설정할 수 있는 여러 옵션이 있다.
- delete.topic.enable : 토픽 삭제 기능을 ON/OFF (enable = 토픽 삭제 가능)
- default.replication.factor : 리플리케이션 팩터(Replication Factor) 옵션을 주지 않았을 경우의 기본값
- min.insync.replicas : 최소 리플리케이션 팩터
- auto.create.topic.enable : 존재하지 않는 토픽으로 퍼블리셔가 메시지를 보냈을 때 자동으로 토픽 생성
- log.retention.hours : 저장된 로그의 보관 주기
- compression.type : 토픽의 최종 압축 형태. gzip, snappy, lz4 등의 표준 압축 포맷 지원
- zookeeper.session.timeout.ms : 브로커와 주키퍼 사이의 최대 연결 대기 시간. 해당 시간동안 주키퍼와 연결되지 않으면 타임아웃
- message.max.bytes : 카프카에서 허용되는 가장 큰 메시지 크기
좀 더 자세한 환결설정 정보는 아파치 카프카 웹페이지에서 확인하자(kafka.apache.org/documentation/#brokerconfigs)

 

카프카 실행/종료

  • 카프카 실행
    >> /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
  • 방화벽 설정
    >> ufw allow 9092

 

systemd를 이용한 카프카 관리

  • service 파일 생성
    >> vi /etc/systemd/system/kafka-server.service
[Unit]
Description=kafka-server
After=network.target

[Service]
Type=simple
User=root
Group=root
SyslogIdentifier=kafka-server
WorkingDirectory=/usr/local/kafka
Restart=no
RestartSec=0s
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh
  • systemd 재시작
    >> systemctl daemon-reload
  • 서비스 실행
    >> systemctl start kafka-server.service
  • 실행 확인
    >> systemctl status kafka-server.service
    >> netstat -ntlp | grep 9092

 

주키퍼 연결 확인

  • 주키퍼 CLI 접속
    >> /usr/loca/zookeeper/bin/zkCli.sh
  • 명령어 입력
    >> ls /