[ADVANCED #7][실습] 멀티 브로커 클러스터 구축: 직접 띄우고 확인하는 리플리케이션과 장애 복구

2025. 9. 12. 14:38·Kafka/Core

1. 멀티 브로커 환경 구축

[1] 개요

[1] 3개의 브로커를 VM에 구성
[2] 개별 브로커들을 각각 서로 다른 server.properties로 설정(server01.properties, server02.properties, server03.properties)
[3] 개별 브로커들이 서로 다른 log.dirs를 가짐
[4] 개별 브로커들이 서로 다른 port 번호를 가짐(9092, 9093, 9094)
[5] server.properties에 서로 다른 broker.id 설정
[6] 멀티 브로커용 Zookeeper 신규 생성

[2] kafka 설정

1) 서로 다른 kafka logs 디렉터리 3개 생성

ubuntu@ubuntu-VirtualBox:~$ cd data
ubuntu@ubuntu-VirtualBox:~/data$ mkdir kafka-logs-01
ubuntu@ubuntu-VirtualBox:~/data$ mkdir kafka-logs-02
ubuntu@ubuntu-VirtualBox:~/data$ mkdir kafka-logs-03

2) 서로 다른 server.properties 3개 생성

ubuntu@ubuntu-VirtualBox:~$ cd $CONFLUENT_HOME/etc/kafka
ubuntu@ubuntu-VirtualBox:~/confluent/etc/kafka$ cp server.properties server_01.properties
ubuntu@ubuntu-VirtualBox:~/confluent/etc/kafka$ cp server.properties server_02.properties
ubuntu@ubuntu-VirtualBox:~/confluent/etc/kafka$ cp server.properties server_03.properties

3) server.properties 수정

아래는 server_01.properties의 수정 내용이다. server_02.properties와 server_03.properties는 이에 맞게 수정해주면 된다.

ubuntu@ubuntu-VirtualBox:~$ vi server_01.properties
ubuntu@ubuntu-VirtualBox:~$ vi server_02.properties
ubuntu@ubuntu-VirtualBox:~$ vi server_03.properties
# server_01.properties
...
broker.id=1
...
listeners=PLAINTEXT://:9092
...
log.dirs=/home/ubuntu/data/kafka-logs-01


# server_02.properties
...
broker.id=2
...
listeners=PLAINTEXT://:9093
...
log.dirs=/home/ubuntu/data/kafka-logs-02


# server_03.properties
...
broker.id=3
...
listeners=PLAINTEXT://:9094
...
log.dirs=/home/ubuntu/data/kafka-logs-03

4) kafka 실행 스크립트 생성 및 수정

ubuntu@ubuntu-VirtualBox:~$ cp kafka_start.sh kafka_start_01.sh
ubuntu@ubuntu-VirtualBox:~$ cp kafka_start.sh kafka_start_02.sh
ubuntu@ubuntu-VirtualBox:~$ cp kafka_start.sh kafka_start_03.sh
ubuntu@ubuntu-VirtualBox:~$ vi kafka_start_01.sh
ubuntu@ubuntu-VirtualBox:~$ vi kafka_start_02.sh
ubuntu@ubuntu-VirtualBox:~$ vi kafka_start_03.sh
# kafka_start_01.sh
$CONFLUENT_HOME/bin/kafka-server-start $CONFLUENT_HOME/etc/kafka/server_01.properties

# kafka_start_02.sh
$CONFLUENT_HOME/bin/kafka-server-start $CONFLUENT_HOME/etc/kafka/server_02.properties

# kafka_start_03.sh
$CONFLUENT_HOME/bin/kafka-server-start $CONFLUENT_HOME/etc/kafka/server_03.properties

 

[3] zookeeper 설정

1) zookeeper log 용 디렉터리 생성

ubuntu@ubuntu-VirtualBox:~/data$ mkdir zookeeper_m

2) 멀티 용도의 zookeeper properties 작성

ubuntu@ubuntu-VirtualBox:~$ cd $CONFLUENT_HOME/etc/kafka
ubuntu@ubuntu-VirtualBox:~/confluent/etc/kafka$ cp zookeeper.properties zookeeper_m.properties
ubuntu@ubuntu-VirtualBox:~/confluent/etc/kafka$ vi zookeeper_m.properties
# zookeeper_m.properties
...
dataDir=/home/ubuntu/data/zookeeper_m
...

3) zookeeper 실행 스크립트 수정

ubuntu@ubuntu-VirtualBox:~$ cp zoo_start.sh zoo_start_m.sh
ubuntu@ubuntu-VirtualBox:~$ vi zoo_start_m.sh
$CONFLUENT_HOME/bin/zookeeper-server-start $CONFLUENT_HOME/etc/kafka/zookeeper_m.properties

[4] 실행 확인

1) zoo_start_m.sh 실행

ubuntu@ubuntu-VirtualBox:~$ ./zoo_start_m.sh

 

2) kafka_start_01.sh, kafka_start_02.sh, kafka_start_03.sh 실행

ubuntu@ubuntu-VirtualBox:~$ ./kafka_start_01.sh
ubuntu@ubuntu-VirtualBox:~$ ./kafka_start_02.sh
ubuntu@ubuntu-VirtualBox:~$ ./kafka_start_03.sh

2. 멀티 브로커 카프카에서 여러 개의 파티션을 가지는 다중 복제 토픽 만들기

[1] 다중 복제 X (단일 브로커 실행)

ubuntu@ubuntu-VirtualBox:~$ kafka-topics --bootstrap-server localhost:9092 --create --topic m-brk-topic --partitions 3

[2] 다중 복제 O (멀티 브로커 실행)

ubuntu@ubuntu-VirtualBox:~/data/kafka-logs-03$ kafka-topics --bootstrap-server localhost:9092 --create --topic m-brk-topic-bb --partitions 3 --replication-factor 3
ubuntu@ubuntu-VirtualBox:~$ kafka-topics --bootstrap-server localhost:9092 --describe --topic m-brk-topic-bb
Topic: m-brk-topic-bb   TopicId: PckZd1nwQwmzUXfQ5KbXGA PartitionCount: 3       ReplicationFactor: 3    Configs: segment.bytes=1073741824
        Topic: m-brk-topic-bb   Partition: 0    Leader: 2       Replicas: 2,3,1 Isr: 2,3,1
        Topic: m-brk-topic-bb   Partition: 1    Leader: 3       Replicas: 3,1,2 Isr: 3,1,2
        Topic: m-brk-topic-bb   Partition: 2    Leader: 1       Replicas: 1,2,3 Isr: 1,2,3
ubuntu@ubuntu-VirtualBox:~$ cd ~/data/kafka-logs-01
ubuntu@ubuntu-VirtualBox:~/data/kafka-logs-01$ ls
cleaner-offset-checkpoint  log-start-offset-checkpoint  m-brk-topic-2  m-brk-topic-bb-0  m-brk-topic-bb-1  m-brk-topic-bb-2  meta.properties  recovery-point-offset-checkpoint  replication-offset-checkpoint

ubuntu@ubuntu-VirtualBox:~/data/kafka-logs-01$ cd ~/data/kafka-logs-02
ubuntu@ubuntu-VirtualBox:~/data/kafka-logs-02$ ls
cleaner-offset-checkpoint  log-start-offset-checkpoint  m-brk-topic-0  m-brk-topic-bb-0  m-brk-topic-bb-1  m-brk-topic-bb-2  meta.properties  recovery-point-offset-checkpoint  replication-offset-checkpoint

ubuntu@ubuntu-VirtualBox:~/data/kafka-logs-02$ cd ~/data/kafka-logs-03
ubuntu@ubuntu-VirtualBox:~/data/kafka-logs-03$ ls
cleaner-offset-checkpoint  log-start-offset-checkpoint  m-brk-topic-1  m-brk-topic-bb-0  m-brk-topic-bb-1  m-brk-topic-bb-2  meta.properties  recovery-point-offset-checkpoint  replication-offset-checkpoint
💡 각 로그 디렉터리에 가보면 bb 토픽에 대한 partition이 3개씩 존재하는것을 확인할 수 있다.

3. 카프카 Replication(복제)와 리더(Leader)/팔로워(Follower) 실습

[1] 멀티 노드(브로커)에서 멀티 파티션 및 다중 복제 토픽 생성

1) 3개의 파티션과 replication factor 3인 토픽 생성. 

kafka-topics --bootstrap-server localhost:9092 --create --topic topic-p3r3 --partitions 3 --replication-factor 3

2) topic-p3r3 에 producer로 메시지 전송

이때 각 메시지가 어떤 Partition으로 갈지는 알 수 없다. 

kafka-console-producer --bootstrap-server localhost:9092 --topic topic-p3r3

 

3) dump를 이용하여 Leader와 Follower 파티션에 전송된 메시지를 읽어보기 

kafka-dump-log --deep-iteration --print-data-log --files ~/data/kafka-logs-0?/topic-p3r3-?/00000000000000000000.log

4) replication factor 4인 토픽 생성(에러 발생)

kafka-topics --bootstrap-server localhost:9092 --create --topic topic-p3r4 --partitions 3 --replication-factor 4

5) 3개의 파티션과 replication factor 2인 토픽 생성.

kafka-topics --bootstrap-server localhost:9092 --create --topic topic-p3r2 --partitions 3 --replication-factor 2

6) 2개의 파티션과 replication factor 3인 토픽 생성.

kafka-topics --bootstrap-server localhost:9092 --create --topic topic-p2r3 --partitions 2 --replication-factor 3)

 

 


'Kafka > Core' 카테고리의 다른 글

[ADVANCED #9] 카프카의 데이터 저장 메커니즘: 파티션, 세그먼트, 인덱스 그리고 로그 정리 정책  (0) 2025.09.13
[ADVANCED #8] 커스텀 객체 직렬화: Order 객체로 배우는 Serializer/Deserializer 구현  (0) 2025.09.13
[ADVANCED #6] 클러스터 운영의 핵심: 리플리케이션, ISR, 그리고 리더 선출의 모든 것  (0) 2025.09.11
[ADVANCED #5][실습] Producer & Consumer 연동 프로젝트: 파일 기반 주문 데이터를 DB로 저장하기  (0) 2025.09.11
[ADVANCED #4][실습] Consumer 완전 정복: 기본 컨슈머부터 안전한 종료, 커밋 전략까지  (0) 2025.09.09
'Kafka/Core' 카테고리의 다른 글
  • [ADVANCED #9] 카프카의 데이터 저장 메커니즘: 파티션, 세그먼트, 인덱스 그리고 로그 정리 정책
  • [ADVANCED #8] 커스텀 객체 직렬화: Order 객체로 배우는 Serializer/Deserializer 구현
  • [ADVANCED #6] 클러스터 운영의 핵심: 리플리케이션, ISR, 그리고 리더 선출의 모든 것
  • [ADVANCED #5][실습] Producer & Consumer 연동 프로젝트: 파일 기반 주문 데이터를 DB로 저장하기
h6bro
h6bro
백엔드 개발자의 기술 블로그
  • h6bro
    Jun's Tech Blog
    h6bro
  • 전체
    오늘
    어제
    • 분류 전체보기 (250)
      • Java (18)
        • Core (9)
        • Design Pattern (9)
      • Spring (80)
        • Core (24)
        • MVC (6)
        • DB (10)
        • JPA (26)
        • Monitoring (3)
        • Security (11)
        • WebSocket (0)
      • Database (33)
        • Redis (15)
        • MySQL (18)
      • MSA (25)
        • MSA 기본 (11)
        • MSA 아키텍처 (14)
      • Kafka (30)
        • Core (18)
        • Connect (12)
      • ElasticSearch (11)
        • Search (11)
        • Logging (0)
      • Test (4)
        • k6 (4)
      • Docker (9)
      • CI&CD (10)
        • GitHub Actions (6)
        • ArgoCD (4)
      • Kubernetes (18)
        • Core (12)
        • Ops (6)
      • Cloud Engineering (4)
        • AWS Infrastructure (3)
        • AWS EKS (1)
        • Terraform (0)
      • Project (8)
        • LinkFolio (1)
        • Secondhand Market (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • Cloud Engineering 포스팅 정리
  • 인기 글

  • 태그

    ㅈ
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
h6bro
[ADVANCED #7][실습] 멀티 브로커 클러스터 구축: 직접 띄우고 확인하는 리플리케이션과 장애 복구
상단으로

티스토리툴바