[실습] 리더 파티션에 장애가 발생하면 어떻게 될까? / Kafka 서버 1대가 고장나면 어떻게 될까?
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
Kafka
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Kafka 입문
slug
practice-leader-failure-and-server-crash
type
post
updatedAt
Dec 6, 2025 05:39 AM
✅ 리더 파티션에 장애가 발생하면 어떻게 될까?
이전 강의에서 아래와 같이 설명했었다. 정말 그런지 실습을 통해 확인해보자.
리더 파티션에 장애가 발생하면 팔로워 파티션이 리더 역할(프로듀서로부터 메시지를 받고, 컨슈머가 메시지를 처리)을 대신 수행한다.
✅ 실습
리더 파티션을 가지고 있는 노드 조회하기
# 토픽 세부 정보 조회
$ bin/kafka-topics.sh \
--bootstrap-server localhost:9092 \
--describe \
--topic email.send
1번 노드가 리더 파티션을 가지고 있다. 그럼 1번 노드에 장애가 발생했다는 걸 가정하기 위해 1번 노드를 종료시켜보자.
리더 파티션의 노드를 종료시키기
포그라운드에서 실행 중이던 노드 서버를 Ctrl + c로 종료시키기
다시 리더 파티션을 가지고 있는 노드 조회하기
1번 노드가 종료됐기 때문에 다른 노드의 주소로 정보를 조회해야 한다.
# 토픽 세부 정보 조회
$ bin/kafka-topics.sh \
--bootstrap-server localhost:19092 \
--describe \
--topic email.send
출력 정보를 보니 Leader의 값이 2로 바뀌어있는 걸로 봐서, 리더 파티션이 2번 노드로 바뀌었다는 걸 알 수 있다. 즉, 리더 파티션에 장애가 발생해서 팔로워 파티션이 리더 역할을 대신 수행하게끔 리더 파티션으로 승격된 것이다.
Isr 값을 보니 1번 노드가 빠져있고 2, 3번 노드만 있는 걸 확인할 수 있다. 1번 노드가 ISR에 빠졌다는 것은 1번 노드의 네트워크가 끊겼거나, 서버에 장애가 생겼거나, 아직 리더 파티션의 데이터와 동기화가 되지 않았다는 뜻이다.
kafka 서버 1대가 고장난 상태에서, 원래처럼 메시지를 넣고 읽어들일 수 있는 지 확인하기
고장나지 않은 kafka 서버 주소를 기입해서 명령어를 입력해야 한다.
# 토픽에 메시지 넣기
$ bin/kafka-console-producer.sh \
--bootstrap-server localhost:19092 \
--topic email.send
# 메시지를 입력할 수 있는 창이 나오면 아래 값 입력하기
test
# 토픽으로부터 메시지 조회
$ bin/kafka-console-consumer.sh \
--bootstrap-server localhost:19092 \
--topic email.send \
--from-beginning
정상적으로 토픽에 메시지를 넣을 수 있고 조회까지 할 수 있을 것이다. 이렇게 할 수 있던 이유가 kafka 서버 3대를 운용했기 때문이다. 1대가 고장나더라도 남은 2대가 작동하고 있기 때문에 서비스 장애를 어느 정도 예방할 수 있다.
당연히 kafka 서버 3대가 동시에 장애가 나서 멈춰버리면 서비스도 같이 장애가 나버린다. 그래도 kafka 서버를 1대만 운용하다가 1대가 장애날 확률보다, kafka 서버 3대를 운용하다가 3대가 전부 장애날 확률이 훨씬 작기 때문에 kafka 서버를 여러 대 운용하는 것이다.
고장난 kafka 서버 복구해보기
kafka 서버 1대의 장애를 가정하기 위해 종료시켰던 kafka 서버를 다시 실행시키자. 종료시켰던 kafka 서버에 맞게 설정 파일(config/server.properties, config/server2.properties, config/server3.properties)을 입력해야 한다.
# 토픽 세부 정보 조회
$ bin/kafka-topics.sh \
--bootstrap-server localhost:19092 \
--describe \
--topic email.send
Isr에 1,2,3의 숫자가 다 있는 걸로봐서 1, 2, 3번 노드의 데이터가 전부 동일하게 동기화 됐음을 알 수 있다. 정말 그런지 명령어로 알아보자.
# 이전에 고장났던 kafka 서버로 토픽의 메시지 조회해보기
$ bin/kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic email.send \
--from-beginning
위에서 넣었던 test라는 메시지가 잘 읽히는 걸로 봐서, 장애가 났던 kafka 서버도 확실하게 잘 동기화 된 걸 확인할 수 있다.
✅ 정리
지금까지 Kafka 서버 3대를 운용함으로써, 특정 kafka 서버에 장애가 발생하더라도 시스템 전체가 중단되지 않고 지속적으로 서비스를 제공할 수 있다는 점을 알아봤다. 이러한 구성은 Kafka의 고가용성(시스템이 장애 상황에서도 멈추지 않고 정상적으로 서비스를 제공할 수 있는 능력)을 확보하기 위한 대표적인 방법으로, 브로커 간 복제를 통해 데이터 손실을 방지하고, 리더 파티션 장애 시에도 다른 팔로워 파티션이 자동으로 리더로 승격되며 kafka 서버가 지속적으로 운영될 수 있게 만든다.