카프카 토픽을 삭제하기 위한 삽질 내용을 공유하는 글입니다.
우선, 현재 제가 사용하는 confluentinc/cp-kafka:7.3.0의 기준으로 가장 간단한 방법을 알려드리겠습니다.
https://ksb-dev.tistory.com/261에 제가 사용하는 카프카 클러스터가 있으니 참고해주시면 감사하겠습니다.
1. 카프카 쉘에 접근한다.
docker exec -it '컨테이너ID' sh
2. 토픽을 삭제한다.
kafka-topics --delete --topic '토픽 이름' --bootstrap-server localhost:29092
끝....
저는 위 방법을 모르고 삽질했습니다...
이 밑의 글은 제가 삽질한 내용을 기록했으니, 가볍게 읽어주시면 감사하겠습니다.
처음에 제가 구글링 해서 얻은 방법은 두 가지가 있었습니다.
- server.properties의 설정을 바꾼 뒤 클러스터 재시작 후 삭제한다. (현재는 동적 업데이트로 필요 없습니다.)
- zookeeper 쉘에 접근해서 토픽을 삭제한다.
server.properties의 설정을 바꿔보려고 했으나 아무리 컨테이너 내부를 뒤져봐도 나오지 않았습니다..
다른 블로그들 보면 별도의 파일을 만들어서 마운트 하던데,
파일이 보여야 마운트를 하든 말든 하지 ㅠㅠ..
그래서 저는 이 방법을 포기했습니다.
그러고 나서 zookeeper 쉘에 접근해서 토픽을 삭제해 봤습니다.
우선 zookeeper 컨테이너에 접근합니다.
docker exec -it '컨테이너ID' sh
그러고 zookeeper 쉘에 접근합니다.
zookeeper-shell localhost:2181
아래 명령어로 토픽을 확인합니다.
ls /brokers/topics
한 블로그에서 얻은 방법인 rmr을 사용해 토픽을 삭제해 봅니다.
rmr /brokers/topics/ksb-topic
안됩니다...
구글링을 해 다른 방법을 찾습니다.
rmr대신 delete를 사용하면 된다고 해서 해봅니다.
delete /brokers/topics/ksb-topic
토픽 내부가 비어있지 않다고 오류가 뜹니다.
이럴 때는 deleteall을 쓰면 된다고 합니다.
deleteall /brokers/topics/ksb-topic
토픽이 삭제되었습니다.
이제 카프카 컨테이너 내부에서 토픽을 확인해봅니다.
kafka-topics --list --bootstrap-server localhost:29092
????
아직 남아있습니다.
분명히 주키퍼 내부에서는 토픽이 없는데,
왜 카프카에서는 토픽이 그대로 보일까
흠...
한 번 재시작을 해야하나?
클러스터를 재시작 해 봅니다.
재시작하니 삭제한 토픽이 보이지 않습니다.
삽질 끝...
[주의]
zookeeper을 통해 토픽을 삭제하는 방법은 권장하지 않습니다.
zookeeper는 클러스터를 관리하는데만 사용되어야 합니다.
또한, 동적 업데이터가 되지 않기 때문에 재시작을 해야 합니다.
[참고 자료]