◈ 오류 내용
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 간에 충돌 오류가 발생하는 것으로 예상
◈ 오류 해결방법
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가 정상적으로 동작하지 않으니 스페이스바만을 사용하는 것을 추천드립니다.)
'인생은 실전 > BUG & DEBUG' 카테고리의 다른 글
[오류 해결] SVN Update 및 Commit 후 발생하는 충돌 오류 (2) | 2022.07.07 |
---|
댓글