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 |
