코딩하는 털보

Kafka의 자동 토픽 생성 본문

Diary/Today I Learned

Kafka의 자동 토픽 생성

이정인 2023. 2. 10. 10:10

카프카를 사용하다 자주 마주친 에러.
바로 메시지를 produce/consume할 토픽이 없다는 에러이다.

2023-02-01 16:01:58,034 WARN  [kafka-producer-network-thread | producer-1] (org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.handleSuccessfulResponse:1119)  - [Pr
oducer clientId=producer-1] Error while fetching metadata with correlation id 3 : {dev.pintel.simul.org.vehicle.json=UNKNOWN_TOPIC_OR_PARTITION}

KAFKA topic은 DB 테이블처럼 만들어두고 사용하는게 관용적이다.

하지만 편의를 위해서 브로커가 메시지를 받으면 topic을 자동으로 생성해주도록 할 수 있다. (default가 true)

auto.create.topics.enable=true

나는 데이터 수집 서비스를 개발하고 있는데, 데이터 소스마다 서로 다른 KAFKA 토픽을 사용하며 수집 프로세스가 동적으로 추가될 수 있다는 특징때문에 이런 기능이 필요했다.

주의할 점은 이렇게 자동으로 생성되는 topic은 kafka 프로퍼티의 여러 auto create topics 관련 프로퍼티에 의해 replica의 수나 partition의 수가 결정되게 되기 때문에 이런것들을 기본 설정에 의존한다면 직접 생성했을때보다 성능이 느려질 수 있다.
또한 메시지를 받으면 자동으로 생성되기 때문에 여러 남발된 메시지에 의해 사용하지 않는 topic이 계속 생겨나서 브로커 성능에 영향을 미칠수도 있다고 한다.

따라서 아래의 프로퍼티를 통해 default topic 설정을 한 뒤 사용하거나
default.replication.factor
num.partitions
또는 KAFKA ADMIN API 같은 다른 방법을 시도해보는것도 좋을 것 같다.

참고 :
https://debezium.io/documentation/reference/stable/configuration/topic-auto-create-config.html
https://kafka.apache.org/documentation/#consumerconfigs_allow.auto.create.topics

Comments