본문 바로가기
인생은 실전/BUG & DEBUG

[오류 해결] Shutdown broker because all log dirs in /tmp/kafka-logs have failed (kafka.log.LogManager)

by 나는영하 2024. 3. 14.

◈ 오류 내용

1. 리눅스(저는 WSL 사용)에서 카프카를 실행하였을 경우 주키퍼는 살아있는데 카프카만 갑자기 죽어버리는 현상 발생.

2. 카프카 서버 로그를 보면 아래와 같은 오류 문구 확인 가능
 - ERROR Error while rolling log segment for [ 토픽 명 ] in dir /tmp/kafka-logs (org.apache.kafka.storage.internals.log.LogDirFailureChannel) java.io.IOException: Invalid argument
 - ERROR Shutdown broker because all log
dirs in /tmp/kafka-logs have failed (kafka.log.LogManager)


오류 원인

1. Kafka와 Zookeeper의 Default 로그 경로는 /tmp 경로에 저장 됨

2. 하지만 리눅스 자체적으로 /tmp 경로를 주기적으로 비워주는 크론탭(일종의 윈도우 스케줄러)을 수행하고 있음

3. 리눅스가 /tmp 폴더를 비워주는 타이밍에 kafka에서 해당 폴더내의 파일을 가지고 있어서 OS와 KAFKA 간에 충돌 오류가 발생하는 것으로 예상

 


오류 해결방법

(좌) server.properties / (우) zookeeper.properties

 

1. OS가 관리하는 /tmp 경로가 아닌 사용자가 별도로 경로를 지정해 준다.
2. 카프카는 config/server.properties에서 log.dirs의 값을 지정 경로로 설정

3. 주키퍼는 config/zookeeper.properties에서 dataDir의 값을 지정 경로로 설정


기타

저는 추가로 카프카와 주키퍼를 실행하는 Script 앞에 위 로그의 경로내의 파일을 지워주는 Script를 추가하여 주었습니다.

- 주키퍼 Start Script : rm -rf /home/user/kafka_logs/zookeeper ; /home/user/kafka/kafka_2.13-3.7.0/bin/zookeeper-server-start.sh -daemon /home/user/kafka/kafka_2.13-3.7.0/config/zookeeper.properties
- 카프카 Start Script : rm -rf /home/user/kafka_logs/kafka ; /home/user/kafka/kafka_2.13-3.7.0/bin/kafka-server-start.sh -daemon /home/user/kafka/kafka_2.13-3.7.0/config/server.properties

 

세미콜론(;)을 통해 다중 Script 구문을 설정할 수 있습니다.
(Enter를 통해 개행을 하면 Script가 정상적으로 동작하지 않으니 스페이스바만을 사용하는 것을 추천드립니다.)

댓글