이 글에서는 Virtual Box 기반으로 Confluent Kafka ver 7.9 (Community) 를 설치하는
방법을 알아보겠습니다. VirtualBox 의 OS 로는 Ubuntu 24.04 server 를 사용합니다.
시작하기 앞서서 Confluent Community 를 사용에서 사용할 예정이신 분들은
라이센스 정책을 한번 보시는 걸 추천드립니다.
https://www.virtualbox.org/wiki/Downloads 에 접속해서 자신의 OS 에 맞는
Virtual Box 를 설치하면 됩니다. 따로 자세한 내용은 작성하지 않겠습니다.

참고로
Virtual Box는Apple Silicon host가 처음 나왔을 때는 지원을 안했지만,
최근에는 지원이 됩니다!
이어서 Ubuntu 24.04 (LTS) 는 https://releases.ubuntu.com/noble/ 에 접속해서
Server Image 를 다운로드 받습니다.

혹여 Mac OS 를 사용하시고, CPU 가 ARM architecture 이신 분들은 https://cdimage.ubuntu.com/releases/24.04.2/release/
에 접속해서 다운로드 받으시기 바랍니다.
VirtualBox, Ubuntu 24.04 의 상세한 설치법은 내용이 쉽기도 하고,
이 글의 많은 부분을 차지하고 싶지 안아서 Skip 하겠습니다!
모르면 구글링하시기 바랍니다!
추후에 Host <-> VirtualBox OS 간의 통신을 필요해집니다.
이를 위해 Host-Only Network 를 생성하고, VirtualBox OS 에
고정 IP 를 하나 세팅해줘야 합니다.
이와 관련된 방법은 제가 자세한 설정법은 너무 장황해서 따로 글을 작성했으니 참고 바랍니다.
참고 링크: VirtualBox: Host-Only Network 설정 및 고정 아이피 할당 방법
저는 Confluent Kafka 7.9 버전을 설치해볼 겁니다.
이 버전을 선택한 이유는 Ubuntu 24.04 에 맞는 7.x 버전대가 7.9 밖에 없어서 그렇습니다.
( 8.0 버전은 아직 마이너 버전이 낮은 감이 있어서 Skip )

본격적인 Kafka 설치에 앞서서 먼저 JDK 를 설치해야 합니다.
왜냐하면 Kafka 가 기반이 Java 이기 때문이죠.
여기서 주의할 점은 JDK 도 Kafka 와의 호환성을 신경써서 설치해야 된다는 점입니다.

https://docs.confluent.io/platform/current/installation/versions-interoperability.html#java 참고
저는 jdk 17 를 설치해야겠네요.
아래처럼 설치 및 확인을 해보겠습니다.
# 일단 기본 업데이트 먼저 해주고
sudo apt update
# jdk 설치
sudo apt install openjdk-17-jdk vim -y # 겸사겸사 vim 도 같이 설치했습니다
# 설치 완료 후 가볍게 검사
java --version

앞서 봤지만 저의 OS 에는 Kafka 7.9 가 지원됩니다.
그러니 https://packages.confluent.io/archive/ 에 접속해서
저에게 맞는 Kafka 의 tar.gz 파일의 링크를 복사합니다.

복사한 링크를 통해서 curl 로 해당 tar.gz 를 다운로드 받고 압축해제합니다.
cd ~ # 일단 home 디렉토리로 이동하고 작업합시다.
curl -LO https://packages.confluent.io/archive/7.9/confluent-community-7.9.2.tar.gz
tar -xvf confluent-community-7.9.2.tar.gz
mv confluent-7.9.2/ confluent # 끝에 버전명이 붙어있는게 보기 안 좋아서 제거
이후에 .bashrc 파일을 맨 끝에 아래 2줄을 추가해서 전역변수를 세팅해줍니다.
export CONFLUENT_HOME="$HOME/confluent"
export PATH=$PATH:$CONFLUENT_HOME/bin
이후에 로그아웃했다가 다시 로그인하면 됩니다.
여기까지 했다면 일단 설치는 끝입니다.
ZooKeeper 실행
zookeeper-server-start $CONFLUENT_HOME/etc/kafka/zookeeper.properties
# zookeeper.properties 는 zookeeper 의 설정 파일입니다.
Kafka 실행
kafka-server-start $CONFLUENT_HOME/etc/kafka/server.properties
# server.properties 는 kafka 의 설정 파일입니다.
그런데 이렇게 매번 길고 장황하게 작성해서 실행시키려니 귀찮습니다.
.bashrc 파일에 맨 끝에 아래처럼 alias 를 지정하겠습니다.
alias start-kafka="$CONFLUENT_HOME/bin/kafka-server-start $CONFLUENT_HOME/etc/kafka/server.properties"
alias start-zoo="$CONFLUENT_HOME/bin/zookeeper-server-start $CONFLUENT_HOME/etc/kafka/zookeeper.properties"
이제 start-zoo, start-kafka 를 통해서 쉽게 ZooKeeper, Kafka 를 기동할 수 있습니다.
참고로 실행한 화면에서
ctrl + c를 입력하면 종료됩니다.
다만 웬만하면 항상 kafka 를 먼저 종료한 후, zookeeper 를 종료하시기 바랍니다.
기본적으로 $CONFLUENT_HOME/etc/kafka/server.properties 에서 변경해야될 설정이 있습니다.

이 log.dirs 는 카프카의 로그를 저장하는 디렉토리 경로인데,
기본적으로 위처럼 /tmp 에 위치하다보니 os reboot 를 하면 이전에 남겼던 로그들이
삭제됩니다.
그러므로 영구적으로 보존이 될 수 있는 경로로 바꾸도록 합니다.
저는 $HOME/data/kafka-logs 라는 디렉토리를 만들고 이
경로를 log.dirs 로 지정하도록 하겠습니다.
mkdir -p $HOME/data/kafka-logs
vim $CONFLUENT_HOME/etc/kafka/server.properties
# mkdir 로 생성한 디렉토리 절대 경로로 log.dirs 값 수정

이어서 zookeeper 설정도 dataDir 이라는 설정이 있는데,
앞서 수정한 kafka 설정과 마찬가지로 tmp 디렉토리가 잡혀 있습니다.
이것도 수정해줘야 합니다.

저는 아래처럼 작업했습니다.
mkdir -p $HOME/data/zookeeper
vim $CONFLUENT_HOME/etc/kafka/zookeeper.properties
# mkdir 로 생성한 디렉토리의 절대경로를 dataDir 의 값으로 부여합니다.

이후에 kafka, zookeeper 를 모두 껏다가 다시 켜면 수정된 설정 반영됩니다.
이상으로 Confluent Kafka 설치가 완료됐습니다!!