카프카란?
대용량의 실시간 로그 처리에 특화되어 있는 솔루션이며 데이터를 유실없이 안전하게 전달하는 것이 주목적인 메세지 시스템에서 안정적인 아키텍처와 빠른 퍼포먼스로 데이터를 처리할 수 있는 분산 스트리밍 플랫폼이다.
크게 아래와 같은 특징이 있다.
1. 메시지 분산 처리
- 카프카는 파티션이란 개념을 도입하여 여러개의 파티션을 서버들에 분산시켜 나누어 처리할 수 있다.
- Producer가 메시지를 어떤 파티션으로 전송할지는 사용자가 구현한 분배 알고리즘에 따른다.
- 각 파티션에 균등하게 저장하거나, 메시지의 키를 활용하여 특정 문자로 시작하는 메시지는 특정 파티션에 할당할 수 있다. => 파티션을 나누었을 때, 메시지의 순서는 보장해주지 않는다.
- 한번 늘린 파티션은 절대로 줄일 수 없다.
2. 고가용성(HA) 및 확장성
- 카프카는 클러스터로 동작하여 고가용성 서비스를 제공할 수 있고, 서버를 수평적으로 늘려 안정성 및 성능을 향상 시킬 수 있다.
- 각 파티션을 복제하여 클러스터에 분산 시킬 수 있다.
- 각 파티션은 Leader 와 Follower로 구분 존재하며, Leader에서만 읽기와 쓰기가 일어난다.
3. Pub / Sub 방식
- 카프카는 컨슈머가 브로커로부터 메시지를 직접 가져가는 PULL 방식으로 동작하기 때문에 최적의 성능을 낼 수 있다.
- 확장성이 좋다.
4. 메시지 디스크 순차 저장
- 서버에 장애가 나도 메시지가 디스크에 있으므로 유실 걱정이 없다.
- 메시지가 JVM 객체로 변환되면서 크기가 커지는 것을 방지하고, JVM의 GC로 인한 성능 저하를 피할 수 있다.
- 하드디스크의 순차적 읽기 성능은 메모리의 랜덤 읽기 성능보다 뛰어나다. (물론, 메모리 순차적 읽기 보다 7배 느림)
나는 카프카를 서버에 아래와 같이 구성하려고 한다. 구성 방법은 다음 글에 이어서 포스팅 하겠다.
'Message Broker > Kafka' 카테고리의 다른 글
# Kafka - 3 # Spring Boot - Kafka - Elasticsearch 예제 실습 (0) | 2019.11.12 |
---|---|
# Kafka - 2 # Kafka Multi Cluster 구성 (2) | 2019.11.11 |