kafka 서버를 구축하는 방법을 단계별로 자세히 작성

Java Gradle 환경에서 Kafka 서버를 구축하는 방법을 단계별로 자세히 정리하면 다음과 같습니다. 여기서는 Apache Kafka 공식 배포판(3.x 버전 기준) 설치 및 단일 노드(KRaft 모드) 구성을 기준으로 설명합니다.


Kafka 서버 구축 단계별 안내

1. Java 환경 준비

  • Kafka는 Java 기반으로 동작하므로 JDK가 필수입니다.

  • OpenJDK 11 이상을 설치합니다.

    bash
    sudo apt update
    sudo apt install openjdk-11-jdk
  • 설치 후 환경변수도 설정합니다.

    bash
    echo "export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))" >> ~/.bashrc
    echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> ~/.bashrc
    source ~/.bashrc

2. Kafka 다운로드 및 설치

  • Apache Kafka 공식 웹사이트에서 원하는 버전의 Kafka 패키지를 다운로드합니다.

    bash
    wget https://dlcdn.apache.org/kafka/3.9.0/kafka_2.13-3.9.0.tgz
  • 다운로드한 tarball의 압축을 풉니다.

    bash
    tar -xzf kafka_2.13-3.9.0.tgz
  • 편의를 위해 심볼릭 링크를 만듭니다.

    bash
    ln -s kafka_2.13-3.9.0 kafka
    cd kafka

3. Kafka KRaft 모드 클러스터 ID 생성

  • Kafka 3.3.0부터 주키퍼 없이 Kafka만 단일 노드 클러스터로 실행할 수 있는 KRaft 모드를 지원합니다.

  • 클러스터 ID를 생성합니다.

    bash
    KAFKA_CLUSTER_ID=$(bin/kafka-storage.sh random-uuid)
    echo $KAFKA_CLUSTER_ID

4. Kafka 설정 파일 수정

  • config/kraft/server.properties 파일을 편집합니다.

  • 다음 주요 항목을 수정합니다.

    • node.id : 브로커의 고유 아이디 (예: 1)

    • process.roles : broker,controller 입력

    • controller.quorum.voters : 1@localhost:9093 (노드ID@호스트:포트)

    • listeners : PLAINTEXT://localhost:9092

    • log.dirs : 로그 저장 경로 (예: /tmp/kraft-combined-logs)

    • cluster.id : 앞서 생성한 클러스터 ID를 입력

  • 설정 완료 후 저장합니다.


5. Kafka 스토리지 초기화

  • Kafka 브로커가 로그를 저장할 디렉토리를 초기화합니다.

    bash
    bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties

6. Kafka 브로커 실행

kafka 서버를 구축하는 방법을 단계별로 자세히 작성

  • Kafka 서버를 백그라운드 데몬으로 실행합니다.

    bash
    bin/kafka-server-start.sh -daemon config/kraft/server.properties
  • 실행 중인지 확인하려면 jps (Java 프로세스 확인 도구)를 사용할 수 있습니다.


7. Kafka 토픽 생성

  • 테스트용 토픽을 생성합니다.

    bash
    bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1

8. Kafka 테스트 (Producer/Consumer)

  • Kafka 설치 디렉토리 내 bin 폴더에서 제공하는 쉘 스크립트로 메시지 보내기/받기 테스트 가능합니다.

  • Java 클라이언트에서 메시지 쓰기/읽기도 위 샘플 코드처럼 진행할 수 있습니다.


참고

  • 주키퍼 없이 Kafka 자체로 클러스터 관리하는 KRaft 모드를 권장합니다.

  • 다중 노드 클러스터 구성 시 controller.quorum.voters에 각 노드 정보를 추가하고, 각 서버 설정파일별로 노드 ID, IP/포트 등을 다르게 설정합니다.

  • 브로커가 실행중일 때 토픽 생성, 메시지 송수신 작업을 수행하세요.

원문 설명과 명령어 예시는 최신 Kafka 3.9.0 버전을 기준으로 하며, Ubuntu 리눅스 환경에서 진행하는 절차입니다.