JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

[실습] kafka 서버 총 3대 셋팅하기

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
Kafka
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Kafka 입문
slug
practice-setup-3-kafka-servers
type
post
updatedAt
Dec 6, 2025 05:39 AM

✅ kafka 서버 3대 셋팅하기

👨🏻‍🏫
이전 강의에서 kafka 노드 1대(= kafka 서버 1대)만 운용하면, 이 노드 1대가 고장나는 순간 서비스에 장애가 일어난다고 얘기했다. 이걸 방지하기 위해 kafka 노드 2대를 추가적으로 연결시켜보자. 현업의 구성처럼 구축하려면 각각의 EC2 인스턴스에 kafka 노드를 따로따로 설치해야 하지만, 비용 절감과 실습의 편의를 위해 하나의 EC2 인스턴스에 3개의 kafka 노드를 한꺼번에 셋팅할 것이다.
 
  1. kafka 설정 수정하기
    1. $ cd kafka_2.13-4.0.0/config $ vi server.properties
       
      server.properties
      ... # kafka 노드를 식별하는 ID node.id=1 # 클러스터를 구성할 컨트롤러의 노드 주소 목록을 설정 # (추가적인 노드의 컨트롤러를 19093, 29093번 포트에 실행시킬 예정) controller.quorum.bootstrap.servers={EC2 Public IP}:9093,{EC2 Public IP}:19093,{EC2 Public IP}:29093 # 브로커, 컨트롤러 프로세스를 실행시킬 포트를 지정 # (브로커를 PLAINTEXT, 컨트롤러를 CONTROLLER라고 지칭) listeners=PLAINTEXT://:9092,CONTROLLER://:9093 # 외부에서 접근할 수 있는 주소 advertised.listeners=PLAINTEXT://{EC2 Public IP}:9092,CONTROLLER://{EC2 Public IP}:9093 # kafka가 데이터(kafka 설정, 브로커가 받은 메시지, 로그 등)를 저장할 디렉터리 경로 설정 log.dirs=/tmp/kafka-logs-1 ...
       
  1. 설정 파일 복사하기
    1. $ cp server.properties server2.properties $ cp server.properties server3.properties
       
  1. 복사한 설정파일 수정하기
    1. server2.properties
      ... # kafka 노드를 식별하는 ID node.id=2 # 클러스터를 구성할 컨트롤러의 노드 주소 목록을 설정 # (추가적인 노드의 컨트롤러를 19093, 29093번 포트에 실행시킬 예정) controller.quorum.bootstrap.servers={EC2 Public IP}:9093,{EC2 Public IP}:19093,{EC2 Public IP}:29093 # 브로커, 컨트롤러 프로세스를 실행시킬 포트를 지정 # (브로커를 PLAINTEXT, 컨트롤러를 CONTROLLER라고 지칭) listeners=PLAINTEXT://:19092,CONTROLLER://:19093 # 외부에서 접근할 수 있는 주소 advertised.listeners=PLAINTEXT://{EC2 Public IP}:19092,CONTROLLER://{EC2 Public IP}:19093 # kafka가 데이터(kafka 설정, 브로커가 받은 메시지, 로그 등)를 저장할 디렉터리 경로 설정 log.dirs=/tmp/kafka-logs-2 ...
       
      server3.properties
      ... # kafka 노드를 식별하는 ID node.id=3 # 클러스터를 구성할 컨트롤러의 노드 주소 목록을 설정 # (추가적인 노드의 컨트롤러를 19093, 29093번 포트에 실행시킬 예정) controller.quorum.bootstrap.servers={EC2 Public IP}:9093,{EC2 Public IP}:19093,{EC2 Public IP}:29093 # 브로커, 컨트롤러 프로세스를 실행시킬 포트를 지정 # (브로커를 PLAINTEXT, 컨트롤러를 CONTROLLER라고 지칭) listeners=PLAINTEXT://:29092,CONTROLLER://:29093 # 외부에서 접근할 수 있는 주소 advertised.listeners=PLAINTEXT://{EC2 Public IP}:29092,CONTROLLER://{EC2 Public IP}:29093 # kafka가 데이터(kafka 설정, 브로커가 받은 메시지, 로그 등)를 저장할 디렉터리 경로 설정 log.dirs=/tmp/kafka-logs-3 ...
       
  1. 첫 노드는 클러스터를 초기화하고, 나머지 노드는 해당 클러스터에 연결하기
    1. cd .. # kafka 디렉터리로 이동 # kafka 종료하기 $ bin/kafka-server-stop.sh # 처음 실행하는 kafka 노드는 아래 명령어로 실행 $ KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)" $ KAFKA_CONTROLLER_ID="$(bin/kafka-storage.sh random-uuid)" $ bin/kafka-storage.sh format \ -t $KAFKA_CLUSTER_ID \ -c config/server.properties \ --initial-controllers "1@localhost:9093:$KAFKA_CONTROLLER_ID" # 추가로 연동시킬 kafka 노드는 아래 명령어로 실행 # 주의 : server.properties가 아니라 server2.properties를 사용해야 한다. $ bin/kafka-storage.sh format \ -t $KAFKA_CLUSTER_ID \ -c config/server2.properties \ --no-initial-controllers # 추가로 연동시킬 kafka 노드는 아래 명령어로 실행 # 주의 : server.properties가 아니라 server3.properties를 사용해야 한다. $ bin/kafka-storage.sh format \ -t $KAFKA_CLUSTER_ID \ -c config/server3.properties \ --no-initial-controllers
       
  1. kafka 노드 3대 전부 실행하기
    1. 로그 확인을 쉽게 하기 위해 EC2 창을 각각 띄워서 포그라운드로 kafka 노드를 실행시키자.
      # kafka 노드 3대 실행하기 $ bin/kafka-server-start.sh config/server.properties $ bin/kafka-server-start.sh config/server2.properties $ bin/kafka-server-start.sh config/server3.properties
       
  1. kafka 노드 3대가 전부 잘 실행됐는 지 확인하기
    1. EC2 창을 새로 띄워서 아래 명령어를 입력해보자.
      # kafka 노드들의 브로커 실행 확인 $ lsof -i:9092 # 노드 1의 브로커 $ lsof -i:19092 # 노드 2의 브로커 $ lsof -i:29092 # 노드 3의 브로커 # kafka 노드들의 컨트롤러 실행 확인 $ lsof -i:9093 # 노드 1의 컨트롤러 $ lsof -i:19093 # 노드 2의 컨트롤러 $ lsof -i:29093 # 노드 3의 컨트롤러
       
  1. 클러스터에 컨트롤러 등록하기
    1. $ bin/kafka-metadata-quorum.sh \ --command-config config/server2.properties \ --bootstrap-server localhost:9092 \ add-controller $ bin/kafka-metadata-quorum.sh \ --command-config config/server3.properties \ --bootstrap-server localhost:9092 \ add-controller
       
  1. 컨트롤러끼리 잘 연동됐는 지 확인하기
    1. $ bin/kafka-metadata-quorum.sh \ --bootstrap-server localhost:9092 describe \ --status
      notion image
      위 명령어를 입력했을 때 CurrentVoters에 3개의 컨트롤러 정보가 찍히면 클러스터에 3개의 컨트롤러가 정상적으로 잘 등록된 것이다.
 
👨🏻‍🏫
여기까지 구축했다면 다음 강의에서는 3대의 kafka 서버가 잘 연동됐는 지 확인하는 방법에 대해 알아보자.
 
author
JSCODE 박재성
category
Kafka
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Kafka 입문
slug
type
series-footer
updatedAt
Dec 6, 2025 05:39 AM
📎
이 글은 실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편) 강의의 수업 자료 중 일부입니다.