Kafka

카프카의 구성요소와 특징

라우브 2021. 5. 10. 00:50

1. 카프카의 구성요소

  • Broker: 카프카 애플리케이션 서버 단위
  • Recrod: 카프카의 메세지 전송 단위
  • Producer: 레코드를 전송하는 애플리케이션
  • Consumer: 레코드를 Polling하는 애플리케이션
    • Consumer Group: 다수의 Consumer 묶음
    • Consumer offset: 특정 Consumer가 가져간 레코드의 순서번호
  • Topic: 데이터(레코드)의 분리 단위 (다수의 파티션으로 이루어질 수 있다)
  • Partition: 실제 레코드들이 저장되는 곳
  • Replication: 파티션 복제 기능(Topic이 아니라 Partition)
    • ISR(In-Sync-Replication): 리더 + 팔로워 파티션의 Sync가 된 묶음. 

 

2. 카프카의 특징

1.  확장성

카프카는 Publish/Subscribe 모델을 채택하고 있다.

Producer 측은 자신의 레코드가 누구에게 가는지 알 수 없다. Consumer 또한 자신이 읽어들인 레코드가 누가 작성한 레코드인지 알 수 없다. 이러한 구조느 확장에 용이하다. Producer와 Consumer가 직접 결합되어 있지 않기 때문에, Producer 혹은 Consumer를 추가하고 싶을 때 기존의 Producer/Consumer를 건드리지 않고 새로운 컴포넌트를 추가할 수 있다.

 

 

2.  Consumer의 데이터 획득 방식

카프카는 Broker가 Consumer에게 Push하는 것이 아니라, Consumer가 Broker로부터 Poll 하는 구조를 채택하고 있다.

이러한 방식에는 두 가지 장점이 있다.

 

1. 다양한 Consumer들의 데이터 처리 형태와 속도를 고려하지 않아도 된다

: 만약 Broker에서 Consumer로 Push 하는 경우에는 Consumer의 상태(수용가능한 버퍼 크기)를 확인하고 전송을 해야 하거나, 

확인하지 않고 전송 시 전송 장애가 나는 상황이 발생할 것이다. 하지만 Consumer가 자신이 수용할 수 있는 때에 수용 가능한 만큼 레코드를 읽어감으로써 Broker 측에서 Consumer상황을 고려하지 않아도 된다는 장점이 있다.

 

2. 불필요한 지연없이 일괄처리를 통해 성능 향상

: 만약 Borker에서 Consumer로 Push 하는 상황이며, 일괄 처리를 위해 Buffer에 모아두는 상황이라고 가정해보자. Consumer 측 수용 가능한 버퍼 크기가 충분한 상황에서도 Broker가 Push해주길 기다려야 한다. 이를 Consumer가 poll하는 방식으로 바꾸면, Consumer측에서 수용가능한 만큼 가져가면 되므로 불필요한 지연시간을 줄일 수 있다.

 

 

3. 데이터의 영속성

많은 메세지 큐들이 메세지를 메모리에 쓰고, Consumer가 읽어가면 메세지를 삭제하는 방식을 채택하고 있다. 하지만 카프카는 파일 시스템 기반으로 메세지를 파일에 저장한다. 파일에 저장하기 때문에 Consumer가 읽어간 데이터도 그대로 보존할 수 있다. (설정에 따라 삭제할 수도 있다.)

 

만약 메세지를 메모리에 작성한다고 가정해보자. 추가로 일정기간 메모리 버퍼에 쌓아두었다가 한 번에 배치처리를 하는 상황이라고 가정해보자. 이러한 상황에서 데이터가 메모리에 점점 쌓여 최대 허용가능한 메모리까지 도달하면, swapping이 일어나면서 성능 저하를 야기할 수 있다. 하지만 파일 시스템 기반의 카프카는 이러한 메모리 부족 현상에 대한 걱정이 적다.

 

물론 '파일 시스템 기반이면 FILE I/O 작업으로 인해 속도가 느리지 않나요? 라고 물어볼 수 있다. 나도 궁금했던 부분인데, 결론만 말하자면 순차적인 디스크 접근은 메모리 만큼 혹은 그 이상을 속도도 낼 수 있다고 한다. 나도 이 부분에 대해서는 깊이 학습하지 않아서 잘 모르겠다.

https://kafka.apache.org/documentation/#theproducer

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

 

 

4. Consumer Group

하나의 Topic에 여러개의 Consumer를 배치할 수 있다. 이 Consumer들을 묶어서 Consumer Group이라 한다.

Consumer Group을 구성하면 얻을 수 있는 장점이 두가지 있다.

 

1. 가용성

: 하나의 Topic에 하나의 Consumer가 배치된다면, 이 Consumer 측에 장애가 생기면 메세지 처리가 불가능해진다. 하지만, Consumer Group을 구성하면, Partition을 담당하던 Consumer에 장애가 생기더라도 그룹 내 다른 Consumer가 적절하게 나누어 처리할 수 있게된다.

이를 Rebalancing이라 한다.

 

2. 병렬처리

: 단일 Partition 단일 Consumer 모델보다, 다수의 Partition 다수의 Consumer(Consumer Group) 모델이 더 빠르게 데이터를 처리할 수 있다. 

'Kafka' 카테고리의 다른 글

카프카와 메세지 큐  (0) 2021.05.09