이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
Kafka의 특징
프로듀서와 컨슈머의 분리
-
Kafka는 Pub/Sub 모델이다.
-
만약 Pub/Sub 모델이 아닌 경우 발생할 수 있는 문제 상황을 알아보자.
-
위 그림에서 웹 서버군 1대가 추가된다면?
-
엄청난 복잡성을 띄게 된다.
- 그렇다면 여기서 Pub/Sub 방식인 Kafka를 중앙에 놓는다면?
-
구조가 매우 단순해졌다.
-
각 서비스 서버들은 Kafka로 메시지를 보내는 역할을 하게 되고
-
모니터링 혹은 분석 시스템들도
-
서비스 서버들의 상태 유무와 관계없이
-
Kafka에 저장되어 있는 메시지만 가져오면 된다.
-
각자의 역할이 확실하게 분리되면서
-
어느 한쪽 시스템에 문제가 발생해도
-
연쇄 작용이 발생할 확률은 낮아진다.
멀티 프로듀서, 멀티 컨슈머
-
Kafka는
-
하나의 토픽에
-
멀티 프로듀서 / 컨슈머 접근이 가능한 구조다.
-
즉 1개의 프로듀서는
-
하나의 토픽에만 메시지 전송을 하는게 아닌
-
여러개의 토픽에 메시지 전송이 가능하다.
디스크에 메시지 저장
-
Kafka가 기존의 메시징 시스템과 가장 다른 특징 중 하나는
-
디스크에 메시지를 저장하고 유지한다는 점이다.
일반적인 메시징 시스템
-
컨슈머가 메시지를 읽어가면
-
큐에서 바로 메시지를 삭제한다.
Kafka
-
컨슈머가 메시지를 읽어가도
-
보관 주기 동안 디스크에 메시지를 저장한다.
-
트래픽이 일시적으로 폭주하여
-
컨슈머의 처리가 늦어지더라도
-
Kafka의 디스크에 메시지가 저장되어 있기 때문에
-
컨슈머는 메시지 손실 없이 메시지를 가져갈 수 있다.
-
또한 컨슈머에 버그가 있어 오류가 발생해도
-
컨슈머를 잠시 중단하고
-
버그 Fix 후 Kafka 디스크에 있는 메시지를 다시 가져가 재작업이 가능해진다.
높은 성능
-
고성능을 유지하기 위해
-
Kafka는 내부적으로
-
분산 처리, 배치 처리 등 다양한 기법을 사용한다.