분산 데이터 스트리밍 플랫폼
분산 : 하나의 서버가 아니라 여러 대의 서버(브로커)가 협력해서 데이터를 나누어 저장하고 처리
스트리밍 : 데이터를 저장함과 동시에 바로 소비할 수 있도록 설계 (데이터가 끊어지지 않고 지속적으로 흐르는 개념)
플랫폼 : 여러 시스템이 데이터를 주고받을 수 있도록 연결해 주는 중심 역할
카프카 파일시스템 기반 저장
카프카는 데이터를 저장할 때 메모리가 아니라 디스크에 저장함으로써 별도 설정없이 영속성 보장
디스크 I/O 비용이 상대적으로 높은데, 카프카 브로커의 로컬 디스크에 저장하지만 빠른 이유
- 순차 I/O
랜덤 액세스 대비 150000배 빠르고 메모리 랜덤 액세스보다 빠르다
원하는 데이터가 위치한 블록을 찾기 위한 시간(seek time) - 순차I/O 를 통해 최소화
블록을 메모리에 카피하는 시간 - Zero-Copy는 CPU를 사용하지 않고 데이터를 직접 네트워크나 디스크로 전송하는 기술로 최소화
read-ahead - 운영체제(OS) 또는 스토리지 시스템이 파일을 읽을 때, 예상되는 이후 데이터를 미리 읽어 캐시에 저장
write-behind - 데이터를 즉시 디스크에 쓰지 않고, 일정 시간이 지나거나 버퍼가 가득 차면 한꺼번에 저장 - 페이지 캐시
카프카는 메모리에 별도의 캐시를 구현하지 않고 OS의 페이지 캐시에 이를 모두 위임
사용자 영역과 커널 영역의 중복 저장 없이 2배 정도의 캐시를 저장
- Zero Copy
일반적으로 파일 시스템에 저장된 데이터를 네트워크로 전송할 때
디스크 → Read Buffer (DMA ; Direct Memory Access)
Read Buffer → Application Buffer (CPU)
Application Buffer → Socket Buffer (CPU)
Socket Buffer → NIC Buffer (DMA)
전통적인 데이터 복사 방식은 4번의 컨텍스트 스위칭과 4개의 메모리 복사본이 생기면서 불필요한 복사와 시스템콜이 발생
zero copy 를 사용하면, 커널 영역의 Read Buffer 에서 Socket Buffer로 직접 복사가 가능하여 효율적으로 데이터를 전송
출처
https://developers.hyundaimotorgroup.com/blog/131
https://medium.com/sjk5766/kafka-disk-i-o%EA%B0%80-%EB%B9%A0%EB%A5%B8-%EC%9D%B4%EC%9C%A0-899c4da5084