[java] 카프카는 왜 빠를까?
frogred8
이벤트 기반 아키텍쳐를 구성하기 위해서는 중심이 되는 메시징 서비스가 필요하고
보통 kafka, rabbitmq, redis (pub/sub) 등의 솔루션을 도입하게 됩니다.
그 중 kafka 는 GC 로 인해 지연이 발생할 수 있는 JVM 기반으로 동작함에도 불구하고
VM 장비에서도 꽤 괜찮은 처리량을 보여줍니다.
이에 대한 궁금증을 순차적으로 알아가 볼 수 있는 좋은 글이 있어 공유드립니다.
글에서 정리한 Kafka 가 빠른 이유는 다음과 같습니다.
📌 저지연 I/O 사용
전송받은 메시지는 RAM을 사용하여 지연 시간을 낮추고, DISK를 최소한으로 사용.
📌 순차적 I/O 자료구조 사용 (log)
메시지 추가는 끝단에서 이뤄지고, 메시지 읽기는 consumer 마다 별도의 포인터를 두어 탐색 시간을 피하는 'log' 라는 데이터 구조 사용.
📌 zero-copy 적용
어플 영역의 데이터를 복사하는 과정없이 커널에 직접 전달하여 효율을 높임.
📌 수평 확장 시스템
단일 주제에 대해 여러 소비자로 분산 가능한 시스템.
📌 데이터 압축 및 일괄 처리
데이터를 묶음 단위로 관리하여 전송/관리 효율을 높이고, 이를 압축하여 보관/전송하는 구조.
특히 다른것보다 zero-copy 에 대해 꽤나 깊고 자세하게 설명하고 있는데요
자세한 설명과 벤치마크를 다룬 아티클들을 중간중간 첨부하여 읽는 재미가 있었습니다.
이에 대한 자세한 내용은 첨부드린 원문 링크를 참고해주세요.
📚 원문
https://frogred8.github.io/docs/034_why_is_kafka_fast/
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 5월 28일 오전 6:35