카프카란 ?
Apache Kafka는 원래 링크드인이 개발한 것으로 2011년 초에 오픈 소스화 된 오늘날 비동기 방식의 실시간 데이터 플랫폼 또는 이벤트 스트리밍 플랫폼이라 불리는 메시지 브로커 프로젝트입니다.
다양한 카프카의 활용
- 발행-구독 (Publish-Subscribe) 모델
- 데이터 통합
- 메시지 버스
- 실시간 데이터 처리 / 분석 등
기본 구성
카프카를 구성하는 주요 요소
- 주키퍼 (ZooKeeper) : 카프카의 메타데이터 관리 및 브로커의 정상상태 점검 담당
- 카프카 클러스터 (Kafka cluster) : 여러 대의 브로커를 구성한 클러스터
- 브로커 (broker) : 카프카 애플리케이션이 설치된 서버 또는 노드
- 프로듀서 (producer) : 카프카로 메시지를 보내는 역할을 하는 클라이언트
- 컨슈머 (consumer) : 카프카에서 메시지를 꺼내가는 역할을 하는 클라이언트
- 토픽 (topic) : 카프카는 메시지 피드들을 토픽으로 구분하구, 각 토픽의 이름은 카프카 내에서 고유
- 파티션 (partition) : 병렬 처리 및 고성능을 얻기 위해 하나의 토픽을 여러 개로 나눈 것
- 세그먼트 (segment) : 프로듀서가 전송한 실제 메시지가 브로커의 로컬 디스크에 저장되는 파일
- 메시지 (message) 또는 레코드 (record) : 프로듀서가 브로커로 전송하거나 컨슈머가 읽어가는 데이터 조각
기본 개념
리플리케이션 (Replication)
각 메시지들을 여러 개로 복제해서 카프카 클러스터 내 브로커들에 분산시키는 동작
파티션 (Partition)
하나의 토픽이 한 번에 처리할 수 있는 한계를 높이기 위해 토픽 하나를 여러 개로 나눠 병렬 처리가 가능하게 만든 것
파티션 번호는 0부터 시작
세그먼트 (Segment)
프로듀서에 의해 브로커로 전송된 메시지는 토픽의 파티션에 저장되며, 각 메시지들은 세그먼트라는 로그 파일의 형태로 브로커의
로컬 디스크에 저장
핵심 개념 & 특징
1. 분산 시스템
- 최초 구성한 클러스터의 리소스가 한계치에 도달해 더욱 높은 메시지 처리량이 필요한 경우, 브로커를 추가하는
방식으로 확장 가능 - 카프카에서 브로커는 온라인 상태에서 매우 간단하게 추가 가능
2. 페이지 캐시
- 페이지 캐시를 활용 → 디스크 I/O에 대한 접근이 줄어들어 성능을 높여준다.
※ 페이지 캐시 : 직접 디스크에 읽고 쓰는 대신 물리 메모리 중 애플리케이션이 사용하지 않는 일부 잔여 메모리를 활용
3. 배치 전송 처리
- 수많은 통신을 묶어서 처리 → 단건으로 통신할 때에 비해 네트워크 오버헤드 감소 및 더욱 빠르고 효율적으로 처리
4. 압축 전송
- 압축만으로도 네트워크 대역폭이나 회선 비용 ↓
- 지원 압축 타입 : gzip, snappy, lz4, zstd
5. 토픽, 파티션, 오프셋
- 카프카는 토픽이라는 곳에 데이터 저장
- 토픽은 병렬 처리를 위해 여러 개의 파티션이라는 단위로 나뉨
- 오프셋은 파티션의 메시지가 저장되는 위치이며, 순차적으로 증가하는 숫자 형태
6. 고가용성 보장
- 리플리케이션 기능
- 토픽 자체를 복제하는 것이 아닌 토픽의 파티션을 복제
7. 주키퍼의 의존성
- 카프카의 중요한 메타데이터를 저장, 각 브로커를 관리하는 중요한 역할
- 최신 릴리즈 버전에서는 삭제 (레퍼런스 검토 필요)