Message Broker/Kafka

# Kafka - 1 # Kafka 개념

skysoo1111 2019. 11. 11. 17:28

카프카란?

대용량의 실시간 로그 처리에 특화되어 있는 솔루션이며 데이터를 유실없이 안전하게 전달하는 것이 주목적인 메세지 시스템에서 안정적인 아키텍처와 빠른 퍼포먼스로 데이터를 처리할 수 있는 분산 스트리밍 플랫폼이다.

 

크게 아래와 같은 특징이 있다.

 

1. 메시지 분산 처리

  • 카프카는 파티션이란 개념을 도입하여 여러개의 파티션을 서버들에 분산시켜 나누어 처리할 수 있다.
  • Producer가 메시지를 어떤 파티션으로 전송할지는 사용자가 구현한 분배 알고리즘에 따른다.
  • 각 파티션에 균등하게 저장하거나, 메시지의 키를 활용하여 특정 문자로 시작하는 메시지는 특정 파티션에 할당할 수 있다. => 파티션을 나누었을 때, 메시지의 순서는 보장해주지 않는다.
  • 한번 늘린 파티션은 절대로 줄일 수 없다.

2. 고가용성(HA) 및 확장성

  • 카프카는 클러스터로 동작하여 고가용성 서비스를 제공할 수 있고, 서버를 수평적으로 늘려 안정성 및 성능을 향상 시킬 수 있다.
  • 파티션을 복제하여 클러스터에 분산 시킬 수 있다.
  • 각 파티션은 Leader Follower로 구분 존재하며, Leader에서만 읽기와 쓰기가 일어난다.

3. Pub / Sub 방식

  • 카프카는 컨슈머가 브로커로부터 메시지를 직접 가져가는 PULL 방식으로 동작하기 때문에 최적의 성능을 낼 수 있다.
  • 확장성이 좋다.

4. 메시지 디스크 순차 저장

  • 서버에 장애가 나도 메시지가 디스크에 있으므로 유실 걱정이 없다.
  • 메시지가 JVM 객체로 변환되면서 크기가 커지는 것을 방지하고, JVMGC로 인한 성능 저하를 피할 수 있다.
  • 하드디스크의 순차적 읽기 성능은 메모리의 랜덤 읽기 성능보다 뛰어나다. (물론, 메모리 순차적 읽기 보다 7배 느림)

 

나는 카프카를 서버에 아래와 같이 구성하려고 한다. 구성 방법은 다음 글에 이어서 포스팅 하겠다.