Kafka 적용 과정을 작성하기에 앞서 Kafka에 대해 알아보는 시간을 가져보자
카프카란?
위의 사진에 작성되어 있는 내용과 같이 카프카는 다음의 내용을 핵심으로 설명하고 있다.
- Fortune 100개의 회사중 80퍼센트가 이용한다.
- 스트리밍을 처리하기 위한 플랫폼이다.
- 고성능이라는 것을 강조하고 있다.
구조
기본적인 구조는 다음 이미지와 같다.
카프카 클러스터
- 메시지 저장소
- 여러 개의 브로커로 구성됨(하나의 브로커는 하나의 서버와 비슷한 개념)
- 브로커는 메시지를 나눠서 저장하고 이중화 처리,장애 대체도 한다.
- 데이터 이동의 핵심 역할
주키퍼
- 카프카 클러스터를 관리하는 용도로 주키퍼 클러스터가 필요
- 주키퍼 속에 카프카 클러스터의 정보가 들어간다.
프로듀서
- 카프카 클러스터에 메시지를 넣는 역할
- 토픽을 기준으로 특정 토픽에 메시지를 넣음
컨슈머
- 메시지를 카프카에서 읽어오는 역할
- 토픽을 기준으로 특정 토픽에 메시지를 읽어옴
토픽과 파티션
토픽
- 메시지를 저장하는 단위(메시지를 구분하는 역할)
뉴스용 토픽, 주문용 토픽 등 - 파일 시스템의 폴더와 유사함
- 1개의 토픽은 1개 이상의 파티션으로 구성
파티션
- 메시지를 저장하는 물리적인 파일
- append-only 파일
- 프로듀서가 넣은 메시지는 파티션의 맨 뒤에 추가가 된다.(중간에 추가가 안된다.)
파티션과 오프셋
오프셋
- 파티션 각각이 저장되는 위치
- 컨슈머는 오프셋 기준으로 앞에서부터 순서대로 읽는다.
파티션과 프로듀서
- 프로듀서는 카프카에 메시지를 넣을 때 토픽 뿐만 아니라 파티션의 키를 지정해 파티션 또한 선택할 수 있다.
- 즉, 같은 키를 가진 메시지는 순서가 보장된다.
파티션과 컨슈머
- 1개의 파티션이 1개의 컨슈머에만 연결 할 수 있다는 제한은 컨슈머 그룹 내에서만 적용된다.
- 즉, 1개의 파티션을 서로 다른 그룹에서 공유가 가능하다.
성능
카프카는 성능이 좋다는 것으로 잘 알려져 있다. 위 내용은 카프카만의 성능을 위한 차별점으로 내용을 살펴보면 왜 성능이 좋은지 알 수 있다.
또한 카프카는 배치 기능을 지원하기에 낱개로 보내는 것보다 처리량을 증가시킬 수 있다.
브로커가 느리면 브로커를 추가하고, 컨슈머가 느리면 컨슈머를 추가하면 된다. 즉, 카프카는 확장이 상대적으로 쉽기 때문에 높은 성능을 가질 수 있다.
장애
카프카는 장애가 났을 때 대처하기 위해서 리플리카라는 것을 사용한다.
- 카프카는 토픽을 생성할 때 복제 수(리플리카)를 설정할 수 있다
- 예를들어 토픽을 생성할 때 복제수를 2로 지정하면 동일한 데이터를 갖고있는 파티션이 서로 다른 브로커에 두개가 생긴다.
- 이렇게 생성된 여러 파티션중에서 하나가 리더가 되고 나머지는 팔로워가 된다.
- 프로듀서와 컨슈머는 리더를 통해서만 메시지를 처리한다.
- 나머지 팔로워들은 리더로부터 데이터를 읽어와서 저장하는 역할을 한다.
- 리더가 장애가 발생하면 팔로워가 리더가 된다.
즉 Kafka는 이러한 구조 덕분에 Kafka는 높은 내구성과 고가용성을 제공할 수 있다.
마치며
카프카를 적용하기 전 카프카의 기본이 되는 내용을 살펴봤다. 내용은 최범균님의 강의를 요약했고 이후 프로듀서와 컨슈머에 대한 내용도 있으니 구체적인 내용은 강의를 참고하면 될 것 같다. 다음 글은 프로젝트에서 Kafka를 코드로 적용하는 과정을 작성할 생각이다.
'프로젝트 > 고민' 카테고리의 다른 글
Elasticsearch 쿼리빌더로 리팩토링 (0) | 2023.05.23 |
---|---|
CQRS패턴 도입 이야기: 프로젝트에 Kafka 적용하기 (0) | 2023.05.23 |
CQRS패턴 도입 이야기: CQRS 구현 방법 (0) | 2023.05.22 |
CQRS패턴 도입 이야기: CQRS 패턴이란? (0) | 2023.05.21 |
Elasticsearch 적용 이야기: Kibana 적용기 (1) | 2023.05.13 |