프로듀서, 컨슈머 질문사항으로 많이 나오는 항목에 대한 답변 정리를 하겠습니다. 해당 내용을 바탕으로 실무에서 카프카가 어떻게 활용되고 있는지를 보다 명확히 알 수 있는 계기가 되었으면 합니다.
목차
Toggle프로듀서 관련
- 프로듀서 언어로 어떤 것이 좋은가?
→ 확답할 수 없음. 서비스 환경에 맞춰 사용하면 됨.
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 권장.
- 프로듀서 메시지 전송 시 키를 사용하는 것이 맞는가?
→ 프로듀서에서 키를 이용한 전송은 필숫값이 아닌 선택사항임. 필요한 경우가 아닌 경우 사용하지 않는 것을 권장.
- 프로듀서 메시지 전송 시 특정 파티션으로 전송할 수 있는가?
→ 프로듀서에서 키를 기반으로 전송하는 경우 커스텀 파티셔너를 이용해 특정 파티션으로 메시지를 전송할 수 있음.
→ 예제
컨슈머 질문사항
- 메시지가 중복으로 확인되는 경우
→ 콘솔 컨슈머를 이용해 메시지가 중복인지 확인하고 여기서 중복이 확인되면 프로듀서에서 중복으로 전송했는지 확인해야 함.
- 메시지 손실 없이 정확하게 한 번 가져올 수 있는 방법
→ 컨슈머서 중복에 대한 처리 로직을 따로 구현할 것을 추천. 카프카 커넥트 등은 싱크 저장소에 따라 정확히 한 번 기능을 제공하는 것이 있음.
- 컨슈머의 옵션 중 자동 커밋을 사용해도 되는가?
→ 컨슈머의 자동 커밋의 기본값은 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)를 이용해 원하는 컨슈머 그룹을 삭제할 수 있음.
카프카 도입 사례에 대한 설명이 필요하신 분은 여기 링크를 참고바랍니다.
좀더 자세한 설명을 원하시는 분은 실전 카프카 개발부터 운영까지 도서를 참고바립니다.
참고 : 실전 카프카 개발부터 운영까지
아래는 카프카 관련 국내 도서입니다.
“이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.”