docker

docker로 한 호스트에서 kafka multi broker 를 띄울 시org.apache.kafka.common.kafkaexception: failed to acquire lock on file .lock in /var/lib/kafka/data. a kafka instance in another process or thread is using this directory.

aeongsseu 2023. 3. 17. 15:31

로컬에서(mac) docker compose를 사용해 zookeeper와 kafka multi broker를 띄우던 중 제목과 같은 에러가 발생했다.

이는 docker yml에서 volumes설정 때문이었는데, 제목에도 나와 있듯 이미 다른 kafka 프로세스가 점유하고 있어서이다.

volumes:
        - /Users/humanlearning/Downloads/docker/kafka:/var/lib/kafka/data

필자는 모든 서비스의 volumes 위와 같이 설정했다. 그렇다면 혹자는 당연히 다 같은 폴더로 지정하면 에러가 뜨는거 아니냐 하겠지만,

맞다.

사실 그냥 volumes를 안바꾸고 할 수 있는 방법은 없을까 객기를 부려봤다. 뭐 .lock 파일을 지우면 된다고 하는데 command : rm /var/lib/kafka/data/.lock 도 해보다가 결론적으론 잘 안됐다.

https://stackoverflow.com/questions/64550689/failed-to-acquire-lock-on-file-lock-in-kafka-kafka-logs-56edfccac428

 

Failed to acquire lock on file .lock in /kafka/kafka-logs-56edfccac428

I received this error when I ran the kafka container on docker. Thereafter, I gave the following commands: docker exec -it /bin/sh #This starts the kafka container in interactive mode cd /opt/kaf...

stackoverflow.com

그래서 해결법은 그냥 voulmes값에서 왼쪽 즉, host machine의 값을 각 서비스마다 다르게 설정해주면 된다.

volumes:
        - /Users/humanlearning/Downloads/docker/kafka/1:/var/lib/kafka/data

volumes:
        - /Users/humanlearning/Downloads/docker/kafka/2:/var/lib/kafka/data

volumes:
        - /Users/humanlearning/Downloads/docker/kafka/3:/var/lib/kafka/data