Revenue 자세히보기

IT

kafka

마이노스 2020. 9. 10. 18:46

Kafka란

LinkdIn에서 처음 개발된 분산 메시징 시스템으로써 현재는 Confluent에서 개발되고 있다.

Kafka는 데이터 파이프라인을 구축할 때 가장 많이 사용 되는 시스템이고 RabiitMQ와 비교가 많이 되지만 성능의 효율이 더 좋다.

Kafka는 다음과 같은 특성을 갖는다.

 

1) Publish, Subscribe (발행/구독)

Pub-Sub은 메세지를 직접 생산하고 소비자를 결정하는 관계가 아니다.

Publisher는 Topic 을 통해서 메세지를 생산하는 일만 담당하며, Consumer는 Topic을 통해 메세지를 소비만 한다. 즉 Publisher, Consumer는 서로 직접적으로 연결되어 있지 않다.

 

2) File 시스템 저장

메세지를 메모리 큐에 저장하는 방법 대신 File 시스템에 저장을 한다. 이렇게 File에 저장을 하게 되면 장애가 발생하거나 네트워크 트래픽 폭주로 처리가 늦어질때 브로커의 동작에 큰 영향을 주지 않으면서 처리를 할 수 있다.

또한 Batch작업을 할때 매우 효율적으로 처리할 수 있다.

기본적으로 File 시스템에 저장되는 메세지는 7일 동안 유지가 되며 설정 값에 따라 조정이 가능하다.

 

3) 확장성

클러스터 확장

트래픽 증가로 클러스터 확장이 필요할 경우 브로커를 추가해서 수평적 확장(Horizontally Scale / Scale out)을 할 수 있다.

 

컨슈머 확장

Consumber는 Consumer Group에 포함되어 사용 되는데 만약 Consumber를 확장하게 되면 컨슈머 파티션 소유권이 재분배되는 리밸런스 과정을 거쳐 Consumer Group에 속한 Consumber들이 고르게 파티션을 할당 받게 된다.

 

 

파티션 확장

파티션도 확장이 가능 하지만 한 번 늘린 파티션은 절대로 줄일 수 가 없다.

또한 파티션을 늘렸을 때 메세지가 Round-robin방식으로 분배되어 순차적으로 메세지가 저장되지 않는다.

만약 순서를 반드시 보장해야 되는 경우 문제를 일으킬 수 있다.

 

4) 분산 처리

카프카는 파티션이란 개념을 도입하여 여러개의 파티션을 서버들에 분산시켜 처리한다.

 

Apache Kafka - Cluster Architecture

참고 : https://www.tutorialspoint.com/apache_kafka/apache_kafka_cluster_architecture.htm

 

Kafka Architecture
Kafka Architecture2
Kafka Architecture3

Cluster

Kafka 서버로 이루어진 클러스터로써 Broker Zookeeper로 구성되어 있습니다.

Borker란 카프카 서버를 말하며 동일 Node에 여러 Broker서버를 띄울 수 있습니다.

Zookeeper는 분산 코디네이션 시스템으로써 분산 메세지 큐의 정보를 관리해 주며, Cluster 리더를 산출하는 등 코디네이팅하는데 사용됩니다.

Topic

Publisher에 의해 생성된 메세지는 Topic으로 분류되고 Topic은 여러개의 파티션으로 나눠 질 수 있습니다. 메세지들을 묶어 주는 그룹으로 사용됩니다.

 

Partition

Topic에 데이터가 저장/사용 되는데 하나의 Partition에 모든 데이터가 관리된다면 성능에 문제가 발생합니다. 즉 분산 처리를 위해 하나의 Topic은 다수의 Partition으로 분리되어 저장/사용 됩니다.

단, 한 번 확장된 Partition은 축소가 불가하니 유의하셔야 합니다.

파티션에 저장된 메세지를 살펴보면 개별 파티션에는 순차적으로 데이터가 저장되지만 3개의 파티션을 모아서 살펴보면 데이터의 순서가 보장 되지 않습니다. 예시로 Blog Partiton 1의 메세지는 1, 5, 9이지만 Blog Partiton 1~3 전체의 메세지 순서를 보장되지 않습니다.

만약 메세지 순서가 중요하다면 Partition을 1로 지정하여 사용하시면 됩니다.

Replica

kafka는 문제가 발생 했을 때를 대비하여 복제본을 생성하게 되며 이를 Replica라고 부릅니다.

 

Leader, Follower

Leader는 모든 읽기, 쓰기를 담당하고 Follower는 Leader 가 문제가 발생했을 때를 대비하여 복제된 데이터를 저장하고 있습니다.

 

 

Producer

Producer는 분산된 Partition에 메세지를 저장하도록 메세지를 생산하는 역할을 담당합니다.

 

Consumer, Consumer Group

Consumer는 분산된 Partition의 메세지를 소비하는 역할을 담당합니다.

 

특히 Producer가 생산한 데이터는 여러 Consumer Group들이 개별로 데이터를 소비하게 됩니다.

즉, ConsumerGroup1이 사용한 데이터가 있어도 ConsumerGroup2는 ConsumerGroup1과는 전혀 상관없이 동일한 데이터를 개별로 사용하게 됩니다.

ConsumerGroup은 다수의 Consumer로 구성됩니다. 만약 Partition이 3이고 Consumer 가 2로 구성되어 있다면 Consumer2개중 하나는 반드시 2개의 Partition에 연결되어 데이터를 소비하게 되니다.

Consumer3개로 구성되어 있다면 1:1로 Partition 과 연결되어 데이터를 소비합니다.

Consumer4개로 구성되어 있다면 3개의 Consumer만 Partition과 연결되어 데이터를 소비하며 1개의 Consumer는 아무 동작을 하지 않습니다.

'IT' 카테고리의 다른 글

OAuth2.0  (1) 2020.09.10