카프카의 기본개념
- Coding/Apache Kafka
- 2020. 12. 20.
카프카의 개념
카프카는 메시징 서버로 동작한다. 메시징 시스템이 무엇인지 먼저 알아보자.
메시징 시스템
메시징 시스템이란, 프로듀서(producer)와 컨슈머(consumer)가 서로 메시지를 전달할 때 직접 전달하는 것이 아닌 중간의 메시징 시스템을 거친 후 전달하는 것을 말한다.
- 프로듀서 (publisher/producer)
메시지라고 불리는 데이터 단위를 보내는 측
- 컨슈머 (subscriber/consumer)
데이터를 가져가는 측
카프카에서 프로듀서가 보내는 데이터가 토픽에 저장되고, 토픽(메시지 저장소)에 저장된 데이터를 가져가는 컨슈머는 원하는 토픽에서 데이터를 가져간다.
- 펍/섭(pub/sub) 모델
중앙에 메시징 시스템 서버를 두고 이렇게 메시지를 보내고 받는 형태의 통신
펍/섭 모델 이전에는 통신에 참여하는 개체가 많아질수록 일일이 다 연결을 하고 데이터를 전송하는 방식이였다. 이는 확장성이 좋지 않았고, 이를 해결하기 위해 '비동기 메시징 전송 방식'인 펍/섭 모델을 사용하게 되었다. 단, 구독(subscribe)를 신청한 수신자만이 정해진 메시지를 받을 수 있다.
메시징 시스템의 교환기가 메시지의 수신처 ID 값을 확인한 다음 컨슈머들의 큐에 전달한다. 컨슈머는 자신들의 큐를 모니터링 하고있다가, 큐에 메시지가 전달되면 이 값을 가져간다. 메시징 시스템을 사용하면 개체가 수신 불능 상태가 되었을 때, 메시징 시스템만 살아있을 경우에도 프로듀서로부터 전달받은 데이터들을 유지할 수 있고, 개체가 다시 회복됬을 때에도 언제든지 다시 가져갈 수 있다. 이는 메시징 시스템을 중심으로 연결하기 때문에 위에서 설명한 펍/섭 모델의 이전 모델의 확장성이 좋지 않던 점을 해결할 수 있다.
단점
메시징 시스템은 속도/용량은 보장받지 못한다. 직접 통신을 하지 않고 중간에서 통로 역할을 하기 때문에 메시지가 정확하게 전달되었는지 확인하려면 코드가 좀더 복잡해진다. 중간에 한번 단계를 거침으로써 속도는 빠르지 않다.
카프카
카프카는 메시징 시스템이지만, 메시징 시스템이 지닌 단점을 극복하기 위한 고성능 메시징 시스템이다. 메시지 교환 전달의 신뢰성 관리를 프로듀서/컨슈머에게 넘기고, 부하가 많이 걸리는 교환기 기능을 컨슈머가 만들 수 있게 함으로써 메시징 시스템 내에서의 작업량을 줄이고 이렇게 절약한 작업량을 메시징 전달 성능에 집중시켰다.
카프카의 메시지 전달 순서
1) 프로듀서는 새로운 메시지를 카프카로 보낸다.
2) 프로듀서가 보낸 메시지는 카프카에 컨슈머 큐(토픽)에 도착하여 저장된다.
3) 컨슈머는 카프카 서버에 접속하여 새로운 메시지를 가져간다.
카프카는 비동기 시스템이다. 프로듀서는 컨슈머와 관계 없이 새로운 메시지를 카프카로 전송한다. 카프카는 받은 데이터를 '토픽'에 저장한다. 카프카 또한 프로듀서와 관계 없이 '토픽'에서 새로운 메시지를 가져온다. 따라서 데이터는 토픽 단위로 저장되고 보내지고있다.
카프카의 특징
- 프로듀서와 컨슈머의 분리
카프카는 프로듀서와 컨슈머의 역할을 완벽하게 분리했다. 프로듀서는 카프카로 메시지를 보내는 역할을 수행하고 컨슈머는 이렇게 전송된 메시지를 가져오는 역할을 하는데 이 행위들은 서로에 관계 없이 실행된다. 만약 프로듀서와 컨슈머가 이렇게 분리되지 않았다면, 어떤 서버에 응답이 늦어지는 경우 서버와 연결된 다른 서비스 서버들에도 이슈가 발생한다. 카프카는 어떤 시스템에서 문제가 발생하더라도, 메시지를 카프카로만 보내면 되기 때문에 장애의 연쇄 발생이 발생할 확률이 줄어들고 부담이 줄어든다.
- 멀티 프로듀서, 멀티 컨슈머
카프카는 하나의 토픽(하나의 데이터 저장소)에 여러 프로듀서와 여러 컨슈머들의 접근이 가능하다.
- 디스크에 메시지 저장
카프카는 디스크에 메시지를 저장하고 유지한다. 프로듀서가 보낸 메시지들을 컨슈머카 토픽에서 가져가더라도, 해당 메시지는 그 즉시 삭제되는 것이 아닌 보관 주기 동안 디스크에 저장되어있다. 따라서 컨슈머의 처리가 늦어지더라도 카프카의 디스크에 안전하게 보관되어있기 대문에 메시지 손실 없이 메시지를 가져갈 수 있다.
- 확장성
하나의 카프카 클러스터는 3대의 브로커로 시작하여 수십 대의 브로커 확장이 가능하다.
- 높은 성능
카프카는 내부적으로 분산 처리, 배치 처리 등을 사용하여 고성능을 유지한다.
'Coding > Apache Kafka' 카테고리의 다른 글
카프카의 오프셋과 커밋 (0) | 2020.12.20 |
---|---|
카프카의 컨슈머 그룹 (0) | 2020.12.20 |
카프카의 리플리케이션 관리 (0) | 2020.12.20 |
카프카의 토픽과 파티션, 오프셋 (0) | 2020.12.20 |
카프카의 기능 (0) | 2020.12.20 |