티스토리 뷰
0. 시작하며
: 카프카를 잘 모르고 처음 프로듀서를 개발할 때 들이받으면서 정리한 글입니다. 저처럼 처음 카프카를 접하시는 분들께는 도움이 될 수 있으나, 아니신 분들께는 다른 좋은 글을 추천드립니다. 이후로는 프로듀서를 개발할 때 사용한 라이브러리, 설정 옵션 등을 포스팅 할 예정입니다.
해당 게시글은 계속 추가(보완) 할 예정입니다.
1. 카프카 (Kafka)
정의 : 여러 대의 분산 서버에서 대량의 데이터를 처리하는 분산 메시징 시스템
- 높은 처리량과 실시간 지향 (확장성, 영속성-임의 타이밍에서 읽기-, 유연성, 신뢰성)
- 큐잉 모델과 펍-섭 메시징 모델의 특징을 겸비함
1) 큐잉 모델
- 브로커(서버) 안에 메시지 큐가 존재.
- 프로듀서는 큐로 메시지를 보내고, 컨슈머가 큐에서 메시지를 추출
- 하나의 큐에 여러개 컨슈머가 접근할 수 있어서 병렬 처리가 가능
- 하나의 메시지는 하나의 컨슈머에서만 처리됨 (ex : a 메시지는 z컨슈머에서 처리된 후, 다른 컨슈머에서 처리 X)
2) 펍섭 모델
- 프로듀서를 퍼블리셔. 컨슈머를 서브스크라이버 라고 명명함
- 퍼블리셔가 서브스크라이버 에게 직접 메시지를 보내고 받는 것이 아닌, 브로커를 통해 전달한다.
- 퍼블리셔는 누가 수신하는지는 알 수 없음 (컨슈머의 존재를 알 필요가 없음)
- 브로커 내의 토픽(Topic) 이라는 카테고리에 등록한다 .
- 서브스크라이버는 자신이 흥미있는 토픽만을 선택해서 읽을 수 있고, 같은 토픽을 읽는 서브스크라이버 끼리는 동일한 메시지를 받는다.
(ex : a 토픽을 구독한 z, x 컨슈머는 동일 메시지를 받옴. b 토픽을 구독한 c 컨슈머는 다른 메시지를 받음)
- 카프카 클러스터
: 여러대의 브로커, 주키퍼 서버에 의해 구성된 크러스터 시스템
2. 브로커 (Broker)
정의 : 메시지 수집/전달 역할을 하는 서비스
- 하나의 카프카 서버를 broker라고 함
- 브로커(리소스)를 추가하여 처리량 향상(스케일 아웃)이 가능
3. 프로듀서 (producer)
정의 : 메시지 생산자
- 브로커에 메시지를 보내는 애플리케이션
- 프로듀서 개발 시 데이터 전송에 대한 여러 옵션 값을 설정할 수 있다
4. 컨슈머 (Consumer)
정의 : 메시지 소비자
- 브로커에서 메시지를 취득하는 애플리케이션
5. 주키퍼
정의 : 브로커에 분산 처리를 위한 관리 도구.
- 분산 메시징의 메타 데이터(토픽과 파티션 등)을 관리하기 위한 구성요소로 기능하마.
6. NRT
정의 : Near Real Time 색인
- 거의 실시간으로 지원한다는 뜻. 문서를 색인할 때부터 검색 가능할 때까지 대기시간이 매우 짧음
7. 색인 (Index)
정의 : 다소 비슷한 특징을 가진 문서의 모음
8. 파티션
정의 : 브로커 상의 메시지를 물리적으로 분할하는 단위.
- 파티션을 통해 분산 처리를 통한 성능 향상을 할 수 있다.
(한개의 토픽에 한개의 파티션인 경우, 무수한 요청을 하나에서 처리하게 됨 -> 2개 이상의 파티션으로 등록, 서로 다른 브로커에 병렬 구성하여 요청의 부하를 분산시킴)
- 브로커 수 = 파티션 수 를 맞추는 것이 성능에 좋다고 한다.
- 서비스 중에 파티션을 추가로 늘리는 것은 가능하나, 줄이는 것은 불가능 (토픽 삭제를 해야하므로 신중해야 한다.)
9. 오프셋 (Offset)
정의 : 각 '파티션 내'에서 메시지의 위치를 표시하는 유니크한 숫자
- 컨슈머가 어디까지 메시지를 읽어갔는지 여부를 관리하기 위해서 사용 됨
- 파티션 '간'의 위치는 기록되지 않으므로, 메시지의 순서가 중요한 경우에는 유의해야함
참고 :
도서 - 실전 아파치 카프카
- Total
- Today
- Yesterday