0. Local 카프카 구성
- 학습을 위해 한 개의 Machine에 세 개의 Kafka Broker를 띄우고, Zookeeper는 1개만 띄운다.
- 세 개의 Kafka Broker를 띄우기 위해 브로커의 포트를 9092, 9093, 9094 로 설정하여 실행한다
1. server.properties 작성
- 세 개의 브로커를 띄우기 위해 server.properties를 세 개 만든다
- server.properties를 복사해 server1.properties 생성
- server.properties를 복사해 server2.properties 생성
- 각각의 server.properties의 broker.id, listener, log.dirs를 위와 같이 설정한다
$ vi config/zookeeper-server-start.sh
*참고 : [Kafka] Kafka Broker 설정(server.properties) 꼼꼼히 들여다보기
2. Zookeeper 실행
1. 새로운 터미널 실행
2. 카프카 폴더로 이동
3. 주키퍼 실행
$ ./zookeeper-server-start.bat ./config/zookeeper.properties
(마지막에 &를 붙이면 Backgorund 실행)
3. Kafka 실행
1. 새로운 터미널 실행
2. 카프카 폴더로 이동
3. Broker#0 실행
$ ./bin/windows/kafka-server-start.bat ./config/server.properties
4. Broker#1 실행
$ ./bin/windows/kafka-server-start.bat ./config/server1.properties
5. Broker#2 실행
$ ./bin/windows/kafka-server-start.bat ./config/server2.properties
4. Topic 생성하기
1. 새로운 터미널 실행
2. 카프카 폴더로 이동
3. 토픽 생성
$ ./bin/windows/kafka-topics.bat --create --topic topic2 --bootstrap-server localhost:9093 --partitions 3 --replication-factor 2
- --bootstrap-server : 세 개의 브로커 중 아무거나 설정해도 된다. 즉, 9092, 9093, 9094 세 개의 포트 중 무엇을 사용해도 무방하다. 브로커들은 클러스터로 구성되어 있고, Zookeeper가 관리하고 있기 때문에 어떤 브로커에게 토픽 생성을 요청해도 브로커 클러스터에 의해 관리된다. 심지어 localhost:9092,localhost:9093,localhost:9094로 연달아 작성해도 가능하다.
- --partitions 3 : 파티션 3개 생성
- --replication-factor 2 : 원본 외 1 개의 복사본 생성
4. 토픽 상태 확인
$ ./bin/windows/kafka-topics.bat --describe --topic topic2 --bootstrap-server localhost:9093
- --bootstrap-server : 토픽 생성할 때와 마찬가지로 어떤 브로커를 선택해도 무방함
5. Console Producer로 Topic에 메시지 발행해보기
1. 새로운 터미널 실행
2. 카프카 폴더로 이동
3. Topic으로 메시지 보내는 Producer 실행
$ ./bin/windows/kafka-console-producer.bat --topic topic2 --bootstrap-server localhost:9092,localhost:9093,localhost:9094
- --bootstrap-server : 프로듀서는 보통 종료되지 않고 항상 동작하므로 특정 브로커가 죽었을 때를 대비해 세 개의 브로커를 전부 나열해 지정한다.
4. 메시지 발행
> First Message
> Second Message
6. Console Consumer로 Topic에서 메시지 읽기
1. 새로운 터미널 실행
2. 카프카 폴더로 이동
3. Topic에서 메시지 받는 Consumer 실행
$ ./bin/windows/kafka-console-consumer.bat --topic topic2 --from-beginning --bootstrap-server localhost:9092,localhost:9093,localhost:9094
- --bootstrap-server : 프로듀서와 마찬가지로 세 개의 브로커를 전부 지정한다
4. from-beginning 옵션을 사용했으므로, 컨슈머를 실행시키 전 프로듀서가 발행한 메시지까지 전부 읽어온다.
5. 프로듀서 터미널에서 추가로 메시지를 입력하면 컨슈머 터미널에 읽어온 메시지가 표시된다.
7. 장애 상황 시 서비스 동작 확인
1. 새로운 터미널 실행
2. 장애 상황 만들기 : Broker#2 Shutdown
- Broker#2가 실행중인 터미널을 찾아 종료 시킨다(Ctrl + C)
3. Consumer에 Warning Message 확인 (→ Windows 환경에선 Warning Message 가 안나오는듯..)
- Connection to node 2 (localhost/127.0.0.1:9094) could not be established. Broker may not be avaliable.
→ Broker#2 가 장애 상황인 것 같다고 알림
4. 토픽 상태 확인
$ ./bin/windows/kafka-topics.sh --describe --topic topic2 --bootstrap-server localhost:9092
- Partition 1번의 Leader는 원래 2번 Broker였다. 하지만 Leader: 0에서 알 수 있듯이 0번 브로커로 리더가 변경됨.
- ISR도 2번이 없어짐
5. Producer로 메시지를 발행 해보면 브로커 1개가 장애인 상황에서도 Consumer가 정상적으로 메시지를 수신하는 것을 볼 수 있음
6. 장애상황 해소 : Broker#2 재실행
$ bin/kafka-server-start.sh config/server2.properties&
7. 토픽 상태 재확인
$ ./bin/windows/kafka-topics.sh --describe --topic topic2 --bootstrap-server localhost:9092
- 파티션 1번의 리더는 그대로 0번 브로커이지만, ISR에는 2번 브로커가 다시 추가되었음
8. Producer로 메시지를 재발행 한다
9. 토픽 상태 재확인
$ ./bin/windows/kafka-topics.sh --describe --topic topic2 --bootstrap-server localhost:9092
- 파티션 1번의 리더 브로커가 2번으로 변경된다. Zookeeper가 파티션 리더를 각 브로커에 고르게 분산시키기 때문이다.
'Back-End > Kafka' 카테고리의 다른 글
[Kafka] 기초3 - 컨슈머 기본 동작과 예시 (0) | 2022.08.23 |
---|---|
[Kafka] 기초2 - 프로듀서 기본 동작과 예시 (0) | 2022.08.11 |
[Kafka] 기초1 - 기본 구성과 핵심 개념(토픽, 파티션, 리플리케이션 등) (0) | 2022.08.09 |
[Kafka] Kafka Broker 설정(server.properties) 꼼꼼히 들여다보기 (0) | 2022.02.04 |
[Kafka] Kafka 설치 및 CLI를 이용해 Producer, Consumer 테스트 (Windows 환경) (0) | 2021.08.07 |