프로듀서, 컨슈머 질문사항

프로듀서, 컨슈머 질문사항

프로듀서, 컨슈머 질문사항으로 많이 나오는 항목에 대한 답변 정리를 하겠습니다. 해당 내용을 바탕으로 실무에서 카프카가 어떻게 활용되고 있는지를 보다 명확히 알 수 있는 계기가 되었으면 합니다.

프로듀서 관련

  • 프로듀서 언어로 어떤 것이 좋은가?

→ 확답할 수 없음. 서비스 환경에 맞춰 사용하면 됨.

Build Client Applications for Confluent Platform | Confluent Documentation

→ 자바 Java

Kafka Java Client | Confluent Documentation

https://github.com/apache/kafka

→ 파이썬 Python

Kafka Python Client | Confluent Documentation

https://github.com/dpkp/kafka-python

→ 고 Go

Kafka Go Client | Confluent Documentation

https://github.com/Shopify/sarama

→ 닷넷 .Net

Kafka .NET Client | Confluent Documentation

  • 메시지 순서를 보장하는 방법은?

→ 키를 이용해 전송하는 방법도 있지만, 파티션 수를 1로 설정해서 신규 토픽을 생성해서 사용하는 방법 추천

  • 메시지 순서 중요한데 토픽의 파티션을 1로 하지 않고 여러 개의 파티션을 사용해서 순서를 보장하는 방법은?

→ 없음. 메시지의 키값을 이용해 각 파티션에 한해 메시지 순서를 보장할 수는 있지만 여러 개의 파티션 전체에 대한 메시지 순서는 보장할 수 없음.

  • 배치 전송의 옵션은 어떻게 사용하는가?

→ 프로듀서의 batch.size, linger.ms 조정해서 사용 가능함. 두 옵션의 값은 정담이 없어 linger.ms : 10~100 정도 사이의 값으로 사용. linger.ms 경우 기본값이 0이므로 배치 전송을 하고자 한다면 반드시 설정해야 함.

  • 카프카에서 지원하는 압축포맷 중 무엇을 사용해야 하는가?

→ gzip, zstd, zanppy, lz4가 있음. 낮은 지연시간이 중요하다면 sanppy, lz4 사용 권장, 높은 압출률은 gzip, zstd 사용 권장. 가장 추천하는 건 lz4 권장.

  • 프로듀서 메시지 전송 시 키를 사용하는 것이 맞는가?

→ 프로듀서에서 키를 이용한 전송은 필숫값이 아닌 선택사항임. 필요한 경우가 아닌 경우 사용하지 않는 것을 권장.

  • 프로듀서 메시지 전송 시 특정 파티션으로 전송할 수 있는가?

→ 프로듀서에서 키를 기반으로 전송하는 경우 커스텀 파티셔너를 이용해 특정 파티션으로 메시지를 전송할 수 있음.

→ 예제

kafka-definitive-guide/kafka-definitive-guide-chapter3/src/java/com/kafkadefinitiveguide/producer/partitioner/custompartitioner/BananaPartitioner.java at master · wuyichen24/kafka-definitive-guide

컨슈머 질문사항

  • 메시지가 중복으로 확인되는 경우

→ 콘솔 컨슈머를 이용해 메시지가 중복인지 확인하고 여기서 중복이 확인되면 프로듀서에서 중복으로 전송했는지 확인해야 함.

  • 메시지 손실 없이 정확하게 한 번 가져올 수 있는 방법

→ 컨슈머서 중복에 대한 처리 로직을 따로 구현할 것을 추천. 카프카 커넥트 등은 싱크 저장소에 따라 정확히 한 번 기능을 제공하는 것이 있음.

  • 컨슈머의 옵션 중 자동 커밋을 사용해도 되는가?

→ 컨슈머의 자동 커밋의 기본값은 enable.auto.commit=true. 자동 커밋을 설정해두면 편리하고 오프셋을 따로 관리하지 않아도 됨. 컨슈머가 자주 다운되거나 컨슈머 점검 등이 빈번하여 정확한 처리를 목적으로 한다면 enable.auto.commit=false로 설정하여 수동으로 관리

  • 메시지가 중복되더라도 반드시 손실 없이 처리돼야 하는 경우 옵션 설정은?

→ 컨슈머에서 메시지를 꺼내오는 동작은 poll(), 오프셋을 커밋하는 동작은 commitSync()임. 컨슈머 프로그래밍 시 poll()동작 이후에 가져온 메시지를 처리하는 로직을 추가하고 메시지 처리가 완료된 후 commitSync()를 실행하면 손실 없이 메시지 처리가 가능함. commitSync() 방식은 성능이 다소 떨어지므로 참고.

  • 컨슈머 LAG 모니터링은 어떻게 하는가.

→ Burrow 버로우라는 애플리케이션을 이용하는 LAG 모니터링이 대표적임. 다른 대안으로 그라파나+프로메테우스+익스포터 조합으로 모니터링을 많이 사용함. 알림은 프로메테우스+알림매니저 나 그라파나 대시보드 알림을 이용. 알림매니저 사용을 추천.

  • 특정 시점을 기준으로 토픽의 메시지를 다시 가져와야 하는 경우

→ 카프카 CLI(kafka-consumer-groups.sh)를 이용해 해당 컨슈머 그룹의 오프셋을 리셋할 수 있음. 리셋하는 기준은 특정 날짜, 특정 오프셋, 가장 최근, 가장 오래전 등으로 리셋함.

  • 하나의 컨슈머 그룹으로 여러 개의 토픽을 컨슘해도 되나요?

→ 가능함. 단, 특정 토픽의 정상 컨슘 여부를 확인하거나 특정 토픽에 대한 컨슈머의 메트릭을 확인하고 싶은 경우는 정확한 정보를 파악하기 어려움. 가능하다면 하나의 컨슈머 그룹으로 하나의 토픽을 컨슘하는 것을 추천.

  • 컨슈머 그룹의 이름을 변경할 수 있는가?

→ 변경 불가. 하지만 오프셋 정보를 변경하여 이름 변경은 가능함. 가령, A 컨슈머를 중지시키고 B 컨슈머를 A컨슈머의 오프셋으로 리셋시키면 A가 B로 변경한 효과가 됨.

  • 컨슈머 그룹을 삭제하고 싶습니다. 어떻게 해야 하나요?

→ CLI(kafka-consumer-group.sh)를 이용해 원하는 컨슈머 그룹을 삭제할 수 있음.

카프카 도입 사례에 대한 설명이 필요하신 분은 여기 링크를 참고바랍니다.

좀더 자세한 설명을 원하시는 분은 실전 카프카 개발부터 운영까지 도서를 참고바립니다.


참고 : 실전 카프카 개발부터 운영까지

아래는 카프카 관련 국내 도서입니다.

실전 카프카 개발부터 운영까지:데이터플랫폼의 중추 아파치 카프카의 내부동작과 개발 운영 보안의 모든것, 책만 아파치 카프카의 모든 것 세트 : 카프카 데이터 플랫폼의 최강자+실전 카프카 개발부터 운영까지, 책만 (서점추천) 헤드 퍼스트 디자인 패턴 + 실전 카프카 개발부터 운영까지 (전2권) (서점추천) 24단계 실습으로 정복하는 쿠버네티스 + 실전 카프카 개발부터 운영까지 (전2권), 위키북스 (서점추천) 데이터 파이프라인 핵심 가이드 + 실전 카프카 개발부터 운영까지 (전2권) (서점추천) 몽고DB 완벽 가이드 + 실전 카프카 개발부터 운영까지 (전2권) (서점추천) 클린 코드의 기술 + 실전 카프카 개발부터 운영까지 (전2권), 영진닷컴 (서점추천) 카프카 핵심 가이드 + 디지털 플랫폼 전략 수립을 위한 쿠버네티스 실전 활용서 (전2권), 제이펍 아파치 카프카 애플리케이션 프로그래밍 with 자바:카프카의 개념부터 스트림즈 커넥트 스프링 카프카까지, 비제이퍼블릭 카프카 핵심 가이드 개정증보판, 제이펍 실전 아파치 카프카:애플리케이션 개발부터 파이프라인 사물인터넷 데이터 허브 구축까지, 한빛미디어 카프카 데이터 플랫폼의 최강자:실시간 비동기 스트리밍 솔루션 Kafka의 기본부터 확장 응용까지, 책만 카프카 스트림즈와 ksqlDB 정복:실시간 데이터 처리, 에이콘출판 카프카 핵심가이드:실시간 데이터와 스트림 프로세싱, 제이펍

“이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.”

Back to top