23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
안녕하세요!
저는 5년차 백엔드 개발자인 김홍규 입니다.
좋은 기회로 참여했던 KafaKRU - Kafka 한국 사용자 모임에서 주최한 스터디 회고 및 카프카 성능 관련 내용을 공유드려 보겠습니다.
저는 kafka 라는 기술에 관심은 많았으나 사용할 기회가 없던 찰나에 현재 진행하는 프로젝트 아키텍처 구성에 kafka 도입을 구상하였고 아래 스터디를 발견하였습니다.
사실 저는 2022년도에 지원했지만 탈락의 고배를 마셨습니다.. 😂
그래서 이번에는 취준의 기억을 되살려 상황의 절실함과 배움의 의지를 그득히 담아서 작성하였습니다.
그 결과 아래와 같은 메일을 받게 되어 2023 kafka 스터디를 참여하게 되었습니다!!
스터디는 온/오프라인을 병행하여 진행되었고 주차별로 정해진 주제를 조별로 발표를 하며 진행되었습니다.
저희 조는 각자 내용 정리 및 학습에 대한 의지를 높이고자 노션에 주차별 내용을 정리하는 계획을 세우고 스터디를 진행하였습니다.
제가 속한 3조는 1주차 발표를 맡아 카프카 개요 및 카프카가 어떤 것인지에 대한 발표를 맡아 진행하였습니다.
제가 이 스터디를 참여하면서 좋았던 부분은 아래 3가지 인것 같습니다.
첫째, 실전 카프카 개발부터 운영까지 저자이신 고승범님의 실무 경험지식을 획득 할수 있다.
둘째, 실습 환경 제공 및 함께 공부하여 외롭지 않다.
셋째, 퀴즈 세션후 해설을 통해 카프카 지식을 탄탄히 할수 있다.
특히 저는 카프카에 대한 초심자로서 발표후 Q&A 시간에 승범님의 실무 노하우가 담긴 답변 과 퀴즈후 해설 시간이 지식을 쌓는데 많은 도움이 되었습니다. 😀
저희 조는 어떤 내용을 데보션에 공유할까 하다가, 스터디에서 공부했던 내용 중 카프카 성능 관련된 각종 내용들을 공유드리려 합니다.
일반적으로 프로듀서의 처리량을 늘리기 위해 배치 전송을 권장하는데, 프로듀서에서는 배치 전송을 위한 다양한 옵션들을 제공하고 있습니다.
이 옵션들을 조금 더 상세히 알아보도록 하겠습니다.
프로듀서 애플리케이션에서 카프카 브로커 토픽의 각 파티션으로 메세지를 전송하기 전에 배치 전송을 위해 잠시 메세지를 모아두는 버퍼 메모리 공간 사이즈를 의미합니다.
기본값은 32MB입니다.
위의 buffer.memory가 전체 배치 영역을 저장하는 공간이라고 하면, batch.size는 토픽의 파티션 1개에 전송하기 전에 메세지를 모아두는 공간의 사이즈를 의미합니다.
기본값은 16KB 입니다.
배치 전송을 위해 버퍼 메모리에서 대기하는 메세지들의 최대 대기시간을 설정하는 옵션입니다.
단위는 밀리초(ms)이며, 기본값은 0입니다.
buffer.memory, batch.size 옵션과 OR 조건으로 동작하며 세개 옵션 중 하나라도 만족하면 프로듀서는 브로커로 메세지를 전송하기 때문에
기본값인 0으로 세팅되어 있으면 원하는 사이즈만큼 메세지가 쌓이기 전에 전송하여 처리량도 낮게 나오고, 압축률도 낮게 나올 수 있습니다.
여기서 보통 글로만 읽으면 buffer.memory와 batch.size가 굉장히 헷갈립니다. 아래 그림을 통해 보면 더 쉽게 이해할 수 있습니다.
위의 옵션들은 결국 한꺼번에 많은 양을 보내서 처리량을 높일지, 조금씩 보내서 지연을 최소화 할지를 결정할 수 있는 옵션입니다. 워크로드 상황에 따라 적절하게 튜닝을 하시는것을 권고 드립니다.
acks 옵션은 프로듀서가 메시지를 보내고 그 메시지를 카프카가 잘 받았는지 확인을 할 것인지 또는 확인을 하지 않을 것인지를 결정하는 옵션입니다.
[0, 1, all] 3가지 옵션이 있는데 오른쪽으로 갈 수록 메세지가 손실될 확률은 적지만 속도는 느립니다.
Options | 처리 속도 | 메세지 유실 발생 유무 | 설명 |
|---|---|---|---|
0 | 상 | 가능성 높음 | 프로듀서에서 메세지를 보내고 브로커의 확인을 받지 않은 상태로 다음 메세지를 보냅니다. |
1 | 중 | 가능성 중간 | 브로커의 확인을 받지만, leader까지만 확인하고 follower는 확인하지 않습니다. |
all | 하 | 가능성 낮음 | 브로커에서 follower의 복제까지 확인 후 응답합니다. |
메세지 손실을 적당히 타협할 수 있다면, acks=1을 설정하여 프로듀서의 처리량을 더 높일 수 있습니다.
프로듀서의 처리량을 위해서 가장 쉽게 달성할 수 있는 방법 중 하나는 메세지를 압축해서 전달하는 것 입니다.
압축을 통해 데이터 사이즈 자체를 줄임으로써 I/O비용과 Network 비용을 극단적으로 절약할 수 있고 이를 통해 자연스럽게 처리량 또한 증가시킬 수 있습니다.
카프카에서는 gzip, snappy, lz4, zstd 등의 압축 포맷을 지원합니다. 아래 내용에 따라 워크로드 성격에 따라 압축 포맷을 취사선택 하면 됩니다.
높은 압축률 | 낮은 지연시간 |
|---|---|
gzip | lz4 |
zstd | snappy |
컨플루언트에서는 lz4를 압축 포맷으로 가장 추천하고 있으며, 많은 오버헤드 때문에 gzip 은 추천하지 않습니다.
본 문서는 KRU의 2023 KAFKA 온라인 스터디의 후원을 통해 작성되었습니다.
[1] https://developer.confluent.io/tutorials/optimize-producer-throughput/confluent.html
[2] https://www.confluent.io/blog/apache-kafka-message-compression/
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.