kafka에 대해 알아보기 전에 kafka 탄생배경에 대해 알아보자
kafka 탄생 배경
기존에 각각의 applicatoin 끼리 연결하여 데이터를 처리하는 방식은 source application과 target application 사이의 의존도가 높다. 또한 서비스나 데이터 저장소가 End - to - End로 연결되어 복잡한 구조를 가지고 있다는 단점을 가지고 있었다.
따라서 kafka를 중앙에 배치하여 데이터를 한 곳에 모아 처리할 수 있게 하여 단점을 해결할 수 있었다.
kafka를 중앙에 배치하여 복잡도를 낮출 수 있다.
이러한 특징은 여러 마이크로 서비스가 서로 협력하는 MSA 환경에 적합하다.
Producer가 kafka에 메세지를 보내면 Consumer가 kafka에서 메시지를 직접 가져가는(Pull) 구조이다.
kafka 기본 구조
카프카 클러스터 : 메세지를 저장하는 저장소, 여러 개의 중개인으로 구성
주키퍼 클러스터 : 카프카 클러스터 저장 및 관리
토픽 : 데이터의 기본 단위 (파일 시스템의 폴더와 유사), 이름으로 식별, 1개 이상의 파티션을 소유, 병렬처리 핵심
파티션 : 메세지를 저장하는 물리적인 파일, append-only, 각 메시지 저장위치는 offset으로 지정, Consumer는 offset 기준으로 메시지를 읽음, 메시지는 삭제되지 않는다.
레코드 : 타임스탬프, 메세지 키, 메시지 값, 오프셋, 헤더로 구성, 프로듀서가 생성한 레코드가 중개인으로 전송되면 오프셋과 타임스탬프가 지정되어 저장, 메시지 키는 메시지 값을 순서대로 처리하거나 메시지 값의 종류를 나타내기 위해 사용
프로듀서 : 메세지를 토픽에 레코드를 추가
컨슈머 : 토픽에 메세지 레코드를 읽어온다. 한 개 파티션은 컨슈머 그룹의 한 개 컨슈머만 연결가능, 컨슈머 그룹의 컨슈머 수는 토픽의 파티션보다 적거나 같아야 한다.
왜 Message Queue로 kafka를 많은 회사에서 사용할까? kafka의 특징에 대해 알아보자
kafka 특징
- 높은 처리량
Producer가 Broker로 데이터를 보낼 때와 Consumer가 Brocker로부터 데이터를 받을 때 모두 묶어서 전송한다.
즉, 많은 양의 데이터를 배치처리 할 수 있다.
파티션 단위를 통해 동일 목적 데이터를 여러 파티션에 분배하고 데이터를 병렬처리 가능하다.
- 확장성
가변적인 환경에서 안정적으로 확장이 가능하다.
Scale Out 용이
- 영속성
데이터를 생성한 프로그램이 종료되더라도 데이터는 사라지지 않는다.
전송받은 데이터를 파일 시스템에 저장한다.
데이터를 저장할 때, 데이터베이스나 메모리에 저장하지 않고 파일시스템에 저장하기 때문에 파일 입출력으로 인해 속도 이슈가 발생하지 않을까?라는 의문이 나올 수 있다. kafka는 Page Cache를 사용하여 디스크 입출력 속도를 높여 문제를 해결했다. ( Page Cache는 OS에서 파일 입출력의 성능 향상을 위해 만들어 놓은 메모리 영역 )
즉, 한번 읽은 파일의 내용은 메모리의 Page Cache 영역에 저장, 추후 동일한 파일의 접근이 일어난다면 Disk에서 읽지 않고 메모리에서 직접 읽는다.
- 고가용성
3개 이상의 서버들로 운영되는 kafka cluster는 일부 서버에 장애가 발생해도 무중단으로ㅗ 데이터 처리 가능
복제를 통해 고가용성의 특징을 가진다.
'DevOps' 카테고리의 다른 글
blkid를 활용하여 Mount시 Volume 고정하기 (0) | 2024.09.19 |
---|