카프카란?
APACHE KAFKA
More than 80% of all Fortune 100 companies trust, and use Kafka.
Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications.
Fortune 100대 기업 중 80% 이상이 Kafka를 신뢰하고 사용하고 있다.
Apache Kafa는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 수천 개의 회사에서 사용하는 오픈 소스 분산 이벤트 스트리밍 플랫폼이다.
기본 구조
- 카프카 클러스터 - 메시지를 저장하는 저장소
- 브로커 - 각각의 서버(메시지를 나눠서 저장, 이중화 처리, 장애 대체)
- 주키퍼 클러스터(앙상블) - 카프카 클러스터 관리 용도(카프카 클러스터에 대한 정보가 관리가 되고 기록이 됨)
- 프로듀서 - 카프카 플러스터에 메시지를 보낸다. (데이터를 이동하는데 필요한 핵심 역할)
- 컨슈머 - 카프카에서 메시지를 읽어낸다. (데이터를 이동하는데 필요한 핵심 역할)
토픽
- 카프카에서 메시지를 저장하는 단위
- 토픽은 메시지를 구분하는 용도로 사용
- 파일 시스템의 폴더나 메일함과 유사함
- 한 개의 토픽은 한 개 이상의 파티션으로 구성 * 파티션은 메시지를 저장하는 물리적인 파일을 의미
- 프로듀서와 컨슈머가 토픽을 기준으로 메시지를 주고받는다.
- 예) 뉴스용 토픽, 주문용 토픽
파티션
- 파티션은 추가만 가능한(append-only) 파일
- 각각 메시지가 저장된 위치를 오프셋(offset)이라고 한다.
- 프로듀서가 메시지를 저장을 하게되면 offset0, offset1 ... offset7 이런식으로 값을 가지게 된다.(파티션 맨 뒤에 추가된다.)
- 컨슈머는 오프셋 기준으로 순서대로 읽는다. (이후 메시지만 읽을 수 있다. 전에 메시지는 읽지 못한다.)
- 메시지는 삭제되지 않는다.
여러 파티션과 프로듀서
토픽은 여러 파티션으로 구성될 수 있는데 프로듀서는 어떤 파티션에 메시지를 저장을 할까?
라운드로빈 또는 키를 이용해서 파티션을 선택한다. (같은 키에 대해서는 같은 파티션에 저장이 된다. 이 말인즉슨 같은 키는 순서가 유지된다.)
여러 파티션과 컨슈머
- 컨슈머는 컨슈머그룹에 속하게 된다.
- 한 개 파티션은 컨슈머그룹의 한 개 컨슈머만 연결이 가능하다.
- 즉 컨슈머그룹에 속한 컨슈머들은 한 파티션을 공유할 수 없다.
- 한 컨슈머그룹 기준으로 파티션의 메시지는 순서대로 처리된다.
- 한개의 파티션을 서로 다른 그룹의 컨슈머는 공유할 수 있다.
성능이 좋은 이유
1. 파티션 파일을 OS 페이지캐시를 사용한다.
- 파티션에 대한 파일 IO를 메모리에서 처리한다.
- 서버에서 페이지캐시를 카프카만 사용해야 성능에 유리
2. Zero Copy
- 디스크 버퍼에서 네트워크 버퍼로 직접 데이터 복사하기 때문에 빨라진다.
3. 브로커가 하는 일이 비교적 단순
- 메시지 필터, 메시지 재전송과 같은 일은 브로커가 하지 않음(프로듀서, 컨슈머가 한다.)
- 브로커는 컨슈머와 파티션 간 매핑 관리
4. 묶어서 보내고, 묶어서 받는다.
- 프로듀서 : 일정 크기만큼 메시지를 모아서 전송 가능하다.
- 컨슈머 : 최소 크기만큼 메시지를 모아서 조회 가능하다.
- 낱개 처리보다 처리량 증가
5. 처리량 증대(확장)가 쉽다.
- 1개 장비의 용량 한계 -> 브로커 추가, 파티션 추가
- 컨슈머가 느림 -> 컨슈머 추가( +파티션 추가)
리플리카 - 복제
리플리카 : 파티션의 복제본
- 복제수만큼 파티션의 복제본이 각 브로커에 생김
리더와 팔로워로 구성
- 프로듀서와 컨슈머는 리더를 통해서만 메시지 처리
- 팔로워는 리더로부터 복제
장애 대응
- 리더가 속한 브로커 장애시 다른 팔로워가 리더가 됨
참고
- kafka 조금 아는 척하기 1 (개발자용) (https://www.youtube.com/watch?v=0Ssx7jJJADI)
'Kafka' 카테고리의 다른 글
Kafka 기초3 - 컨슈머 (0) | 2021.07.24 |
---|---|
Kafka 기초2 - 프로듀서 (0) | 2021.07.22 |