티스토리 뷰
Q. 어떻게 Kafka 가 높은 처리량, 빠른 응답 속도, 안정성을 갖는지?
1) 분산시스템
카프카는 분산시스템이다.
최초로 구성하는 클러스터에 브로커를 추가하는 방식이여서 확장이 가능하고 카프카 브로커 추가는 온라인 상태에서 매우 쉽다. 이런 확장이 용이한 구조가 카프카의 장점, 그리고 분산 시스템이므로 성능이 좋고, 장애 대응이 좋다는 점.
초기에 카프카 클러스터가 3대 브로커 운영중이더라도, 서비스가 증가하여 브로커를 증가하는게 용이다하. 수십개, 그 이상으로도 브로커로도 확장할 수도 있다.
2) 페이지 캐시
"페이지 캐시"의 이용으로 높은 처리량을 얻을 수 있었다!
운영체제에서 페이지 캐시를 통해 성능을 높이는데 카프카도 Os의 페이지 캐시를 활용하는 방식으로 설계된다.
디스크 IO를 줄여 성능을 높이는 방식.
3) 배치 전송 처리
카프카에서는 배치 전송을 권장한다.
Producer <-> Consumer 사이 통신하며 엄청나게 많은 메시지를 주고받는데 이때 통신을 묶어 처리하여 오버헤드를 줄이면 빠르게 처리할 수 있으니깐 배치로 전송하는 게 이득이다.
4) 압축전송
카프카의 메시지 압축 종류는 총 4가지다.
- Gzip
- Snappy
- Lz4
- Zstd
Compression ratio(압축 비율)
압축 비율이 높을 수록 압축 속도가 느리고, 디스크, 네트워크 대역폭 사용량을 줄인다.
JSON 메시지를 이용하고 있다면, Snappy와 Lz4 와 같은 entropy-less 엔코더를 사용하길 권장하고 있다.
Zstd는 Kafka 2.1.0 버전에 등장한 엔코더로 Facebook에서 개발한 압축 알고리즘이고 Snappy 유사하지만 더 많은 압축률과 CPU 사용률이 보인다.
또한, Lz4 처럼 압축률이 가장 낮은 엔코더를 사용하더라도 사용하지 않을때보다 70% 절약 가능하니 상황에 맞게 적절한 압축 엔코더를 정해서 써야할 듯하다.
https://developer.ibm.com/articles/benefits-compression-kafka-messaging/
'Data > Kafka' 카테고리의 다른 글
Kafka consumer 성능을 높여보자 (0) | 2024.12.31 |
---|---|
[kafka] 프로듀서의 내부 동작 원리와 구현 (0) | 2024.04.14 |