1. 개요
Linux 환경에서 kafka를 설치 과정을 공유하겠다.
필자는 Rocky Linux 8.10을 사용하고 있고, kafka 3.5.1 버전 설치를 완료했다.
그럼 설치를 진행해보자.
2. 설치 방법
a. java 설치
- kafka를 실행하기 위해서는 java가 필요하다. java를 설치해주자.
$ dnf install java-17-openjdk
b. kafka 다운로드 및 압축 해제
- kafka.3.5.1 버전 다운로드
wget https://archive.apache.org/dist/kafka/3.5.1/kafka_2.13-3.5.1.tgz
- 압축 해제
$ tar -xvf kafka_2.13-3.5.1.tgz
c. zookeeper, kafka 실행
- kafka는 기본적으로 zookeeper가 필요하다.
- 먼저 zookeeper를 실행한 다음 kafka를 실행하자.
$ /path/kafka_2.13-3.5.1/bin/zookeeper-server-start.sh config/zookeeper.properties # zookeeper 실행
$ /path/kafka_2.13-3.5.1/bin/kafka-server-start.sh config/server.properties # kafka 실행
3. kafka 설정 변경(선택 사항)
a. kafka 디렉토리 이동(선택 사항)
필자는 kafka를 별도의 디렉토리로 옮겨서 관리할 것이다.
mv /path/kafka_2.13-3.5.1 /etc/kafka # /path/kafka_2.13-3.5.1를 /etc/kafka로 변경
b. kafka 네트워크 설정(선택 사항)
외부 클라이언트 접속을 허용하기 위해 네트워크 설정이 필요하다.
vi 편집기로 /etc/kafka/config/server.properties를 열어 몇가지 수정해주자.
연결 설정
- listeners=PLAINTEXT://:9092 이 부분을 찾아 아래와 같이 수정해주자.
- 0.0.0.0 으로 설정을 하면 모든 ip에서 접속이 가능하다.
listeners=PLAINTEXT://0.0.0.0:9092
hostname 설정
advertised.listeners=PLAINTEXT://your.host.name:9092 이 부분을 찾아 아래와 같이 수정해주자.
advertised.listeners=PLAINTEXT://[ip 주소]:9092
c. data 저장 경로 수정(선택 사항)
- kafka 브로커가 메시지 데이터를 저장하는 디럭터리 경로를 수정해주자.
- 마찬가지로 vi 편집기로 /etc/kafka/config/server.properties를 열어 수정해주자.
- log.dirs=/tmp/kafka-logs 이 부분을 찾아 원하는 log 경로를 잡아주면 된다.
log.dirs=/path/kafka-logs
d. zookeeper, kafka 서비스 등록(선택 사항)
서비스로 관리하기 위해 zookeeper, kafka 각각 서비스 파일을 생성하여 아래 내용을 추가해주자.
/etc/systemd/system/zookeeper.service
[Unit]
Description=Apache Zookeeper
After=network.target
[Service]
User=root
Group=root
ExecStart=/etc/kafka/bin/zookeeper-server-start.sh /etc/kafka/config/zookeeper.properties
ExecStop=/etc/kafka/bin/zookeeper-server-stop.sh
[Install]
WantedBy=multi-user.target
/etc/systemd/system/kafka.service
- kafka는 zookeeper가 필요하기 때문에, After, Requires 옵션에 zookeeper 서비스를 추가해주자.
[Unit]
Description=Apache Kafka
Documentation=http://kafka.apache.org/documentation.html
After=network.target zookeeper.service
Requires=zookeeper.service
[Service]
User=root
Group=root
ExecStart=/etc/kafka/bin/kafka-server-start.sh /etc/kafka/config/server.properties
ExecStop=/etc/kafka/bin/kafka-server-stop.sh
[Install]
WantedBy=multi-user.target
e. 서비스 실행
$ systemctl start zookeeper.service # zookeeper 서비스 시작
$ systemctl enable zookeeper.service # zookeeper 서비스 데몬 등록
$ systemctl status zookeeper.service # zookeeper 서비스 상태 확인
$ systemctl start kafka.service # kafka 서비스 시작
$ systemctl enable kafka.service # kafka 데몬 등록
$ systemctl status kafka.service # kafka 서비스 상태 확인
f. SELinux 보안 컨텍스트 설정(서비스 실행 실패 시)
- 서비스 실행 실패 시 SELinux로 인해서 실행이 안되는 경우도 있을 수 있다.
- 아래 커멘드를 통해 보안 컨텍스트를 설정한 뒤 서비스를 다시 실행보자.
$ sudo semanage fcontext -a -t bin_t "/etc/kafka/bin/zookeeper-server-start.sh"
$ sudo restorecon /etc/kafka/bin/zookeeper-server-start.sh
$ sudo semanage fcontext -a -t bin_t "/etc/kafka/bin/zookeeper-server-stop.sh"
$ sudo restorecon /etc/kafka/bin/zookeeper-server-stop.sh
$ sudo semanage fcontext -a -t bin_t "/etc/kafka/bin/kafka-server-start.sh"
$ sudo restorecon /etc/kafka/bin/kafka-server-start.sh
$ sudo semanage fcontext -a -t bin_t "/etc/kafka/bin/kafka-server-stop.sh"
$ sudo restorecon /etc/kafka/bin/kafka-server-stop.sh
g. 방화벽 설정(선택 사항)
- 외부에서 접속하기 위해서 방화벽을 열어줘야 한다. kafka와 zookeeper 모두 기본 포트를 사용한다면 아래와 같이 방화벽을 설정해주자.
sudo firewall-cmd --add-port=9092/tcp --permanent # kafka port 열기
sudo firewall-cmd --add-port=2181/tcp --permanent # zookeeper port 열기
sudo firewall-cmd --reload # reload
sudo firewall-cmd --list-all # 활성화된 규칙 확인
4. 서비스 상태 확인 및 테스트
a. zookeper 서비스 실행 상태 확인
b. kafka 서비스 실행 상태 확인
c. kafka producer - consumer 테스트
- kafka 실행이 되었다면, 실제로 잘동작하는지 테스트 해보자.
- test_topic으로 메시지를 produce(게시)하고, consumer가 제대로 동작하는 확인해보자.
$ /etc/kafka/bin/kafka-console-consumer.sh --bootstrap-server [ip 주소]:9092 --topic test_topic --from-beginning # consumer 테스트
$ /etc/kafka/bin/kafka-console-producer.sh --broker-list [ip 주소]:9092 --topic test_topic # producer 테스트
producer
consumer
'Data Infra > Kafka' 카테고리의 다른 글
[Apache Kafka] 카프카 기본 정리 (0) | 2023.09.25 |
---|