강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

kokoxg2님의 프로필 이미지
kokoxg2

작성한 질문수

카프카 완벽 가이드 - 코어편

Producer에서 키(Key) 타입의 변경 및 Custom Callback 구현

카프카 토픽 Key 타입 변경에 관한 질문

작성

·

2

0

안녕하세요~

 

카프카 실습 중 Key 를 String → Integer 로 변경할경우, console consumer 에서도 key deserializer 를 IntegerDeserializer 로 변경해야하면서 든 궁금증 질문드립니다

 

  1. kafka consumer key deserializer 를 custom 설정하고 offset 을 --from-beginning 을 하면 오류가 발생하는데, 아마 Key Type 이 String, Integer 가 있어서 Deserialize 를 하다가 Exception 이 나는 것 같은데, deserializer 를 직접 설정안해주면 오류는 안나더라구용. (기본적으로 String key 만 보여주는 것 같은..)
    그래서 config 를 찾아보니까 console consumer 는 기본적으로 String Deserializer 로 설정해주는 것인가요?
    명령어 : kafka-console-consumer --bootstrap-server localhost:9092 --topic comp-topic --property print.partition=true --property print.key=true --property print.value=true --property print.timestamp=true --from-beginning

    image.png


  2. Key 타입을 변경하는 일이 실무에서 흔한 편인가요? Key 라는 것이 보통 식별/고정인데 변경이 필요하면 Topic 을 새로 만들어서 진행는건지 궁금합니다

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. kokoxg2님.

Kafka의 실습 중에 Key 타입을 변경하는 상황에서 몇 가지 의문이 생기셨군요. 관련된 내용을 요약하여 답변 드리겠습니다.

1. Kafka Consumer Key Deserializer 설정

Kafka의 console consumer는 기본적으로 String deserializer를 사용합니다. 따라서 만약 여러분이 Key를 Integer 타입으로 변경할 경우, console consumer에서 Key를 잘못 변환하려고 시도하면서 예외가 발생할 수 있습니다.

  • 문제 발생 원리: 만약 --from-beginning 옵션을 사용하면 Kafka는 토픽의 모든 메시지를 읽으려고 시도합니다. 이때, Key가 String으로 저장된 레코드와 Integer로 저장된 레코드가 섞여 있으면, 잘못된 형식의 Key에 대해 deserialization이 실패할 수 있습니다.

  • 기본 설정: console consumer의 기본 Deserializer는 StringDeserializer입니다. String 이외의 Deserializer (e.g., IntegerDeserializer)를 사용하고자 할 경우, --property "key.deserializer=..." 옵션을 명시적으로 설정해야 합니다.

2. Key 타입 변경 실무 사용

Kafka의 Key는 메시지를 식별하고 파티셔닝하는 데 중요한 역할을 합니다. 따라서 Key 타입을 변경하는 것은 꽤 신중하게 다뤄야 하는 작업입니다.

  • 일반적인 실무 방식: Key 타입이 변경되어야 할 경우, 일반적으로 기존의 토픽을 새롭게 만드는 방식을 택해 작업을 진행합니다. 타입 변경 시 데이터 무결성과 호환성 문제를 방지하기 위해 새롭게 구성된 토픽으로 이전 데이터를 마이그레이션하거나 향후 처리를 새 토픽에 기록하는 방식으로 운영합니다.

  • 토픽 생성: 기존의 토픽을 사용한 이력이 있고, Key 타입을 변경한다면 새로운 데이터 구조와의 충돌을 피하기 위해 새로운 토픽을 만들어 사용하는 것이 흔합니다.

콘솔에서의 실습과 실무에서의 방식이 다르다는 점에서 이런 의문이 생기신 것 같습니다. Key 관리와 데이터 구조 설계는 Kafka 설계 만의 특수한 주제로, 과거의 데이터와의 호환성을 충분히 고려하여 적용하시기를 권장합니다.

아래는 관련한 설명 링크입니다:
- Kafka Consumer configuration details

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

kokoxg2님의 프로필 이미지
kokoxg2

작성한 질문수

질문하기