본문 바로가기

Apache Kafka

Apache Kafka의 성능: append-only and zero copy

아파치 카프카는 어떻게 대량의 데이터를 효율적으로 전송할까

카프카의 내부 아키텍처 동작 방식을 살펴보면 2가지 포인트가 존재한다

1. sequentail I/O

kafka log

카프카는 append-only 방식으로 파일의 맨 끝에다 immutable한 새 record를 추가한다

카프카는 append만 가능한 순차적인 자료구조인 log를 기본 아키텍처로 사용하고 있다.

디스크에 random access 방식으로 data retrieve하는 것이 아닌, sequential 하게 데이터를 저장하여, conumser가 해당 record의 immutable한 offset 번호를 따라 데이터를 읽고 주기적으로 commit하여 어디까지 읽었는지 기록한다

2. zero-copy

zerocopy 사용하지 않을 때

만약 zero copy를 사용하지 않는다면 , 2번의 시스템 콜과 4번의 데이터 복사가 발생해서 비효율적이다

(Disc에서 read buffer로 데이터 복사, application과 커널 영역으로 의 context switching 발생, socket buffer에서 nic buffer로 데이터 복사)

zero copy를 사용할 경우

한번의 커널 호출로(sendfile 시스템 콜) 어플리케이션 영역(카프카 application)으로의 context switching이 발생하지 않고,  Read buffer 메모리(OS cache)에서 nic buffer에 데이터를 copy하고 네트워크로 전송한다

read buffer에서 네트워크로 바로 전송하는 DMA(Direct Memory Access)를 통해, CPU를 거치지 않아 더욱 효율적으로 데이터를 전송할 수 있다.

참고 자료:

https://developer.ibm.com/articles/j-zerocopy/

https://medium.com/@sunny_81705/what-makes-apache-kafka-so-fast-71b477dcbf0

 

What makes Apache Kafka so Fast?

Kafka supports a high-throughput, highly distributed, fault-tolerant platform with low-latency delivery of messages.

medium.com

https://www.youtube.com/watch?v=UNUz1-msbOM

 

'Apache Kafka' 카테고리의 다른 글

Confluent Schema Registry에 curl로 접속하기  (0) 2022.12.23
Idempotent Producer  (0) 2020.07.17
Producer Acks  (0) 2020.07.16