본문 바로가기

Bigdata/kafka

[kafka] topic이 delete가 되지 않을 경우 해결법


kafka에서 토픽을 삭제하는 방법은 아래와 같다.

먼저 server.properties에 다음 옵션을 추가해야 한다.
delete.topic.enable = true

그리고 아래의 명령어를 실행하면 해당 토픽이 marked되고 일정 시간 후에 전체 클러스터에 토픽이 삭제되게 된다.
bin/kafka-topics.sh --delete --zookeeper <zkhost:port> --topic <topic_name>


하지만 UnknownTopicOrPartitionException 같은 에러가 발생하면서 주키퍼에서까지 지워졌던 토픽이 다른 노드에 의해 복구되어 삭제가 되지 않는 경우가 있다. 이런 경우는 카프카 클러스터를 재시작할 때 원할하게 실행되지 않은 경우 발생하여 전체 클러스터를 다시 시작해도 지속적으로 발생하게 된다.

:org.apache.kafka.common.errors.UnknownTopicOrPartitionException:
 This server does not host this topic-partition. (kafka.server.ReplicaFetcherThread)


해결법은 두가지가 있다.

첫 번째는 전체 카프카 클러스터를 종료 후 주키퍼의 rmr명령어로 토픽의 정보를 다 지우고 카프카 클러스터의 로그폴더의 모든 내용을 삭제후 재시작하는 방법이 있다.


두번째 방법은 --delete 옵션 실행시 --force 명령어를 추가로 입력하여 주면 카프카 클러스터 사이에서 지워진 토픽 정보를 복구하려는 행동을 하지 않고 깔끔하게 지워진다.


첫 번째 방법의 경우 기존에 운영중이던 다른 토픽에까지 영향이 갈 수 있으므로 카프카의 소스를 찾아보다가 --force 옵션을 추가적으로 줄 수 있는 것을 발견하였다.

'Bigdata > kafka' 카테고리의 다른 글

Apache Kafka 정리  (0) 2017.03.04