반응형

1. 서론

최근, MQ(=message queue) 중 많은 사용과 관심이 증가하는 카프카에 대해서 소개하려고 합니다.

 

2. 카프카란?

아파치에서 제공하는 pub-sub 기반의 분산형 메시지 큐입니다.

dispatch가 아닌, subscribe 방식으로 기존 RabbitMQ에 비해 고성능입니다.

(단, RabbitMQ에서 제공하는 전체 트랜잭션은 제공되지 않습니다)

 

3. 카프카 용어

아래 그림은 카프카의 기본 컨셉 그림입니다.

그림에 나오는 broker, zookeeper, topic, partition, leader, follower, producer, consumer, (+ consumer group)대해

각 역할을 설명하도록 하겠습니다. 

3-1. broker (브로커)

 

브로커는 실제로 메시지를 저장하는 카프카의 각 노드입니다.

 

브로커의 역할은 아래와 같습니다.

 

  • pub으로 인해 들어온 데이터 저장 (disk 기반)
  • leader, follower 개념 존재

 

3-2. zookeeper (주키퍼)

 

주키퍼는 아파치에서 제공하는 코디네이션 분산 플랫폼입니다.

주키퍼는 hadoop, hbase 연계로도 사용하지만, 카프카와의 연계로도 사용합니다.

 

카프카와의 연계 시 역할은 아래와 같습니다.

 

  • broker health check
  • leader 선출
  • znode(파일 시스템의 폴더 구조)라는 곳에 broker의 meta정보 관리

 

zookeeper 클러스터는 앙상블이라 부르며, 앙상블은 데이터 write시 과반수가 넘으면 성공으로 간주하게 됩니다.

즉, 앙상블은 2N+1인 홀수로 구성이 필요합니다.

 

 

 

 

 

반응형

 

 

 

 

 

 

 

 

3-3. topic (토픽)

 

토픽은 큐들의 집합입니다.

큐들의 집합이라는 용어를 사용한 이유는 토픽은 한개 이상의 파티션이 있어야 하고, 파티션이 한개의 큐이기 때문입니다.

 

토픽의 역할과 특징은 아래와 같습니다.

 

 

3-4. partition (파티션)

 

파티션은 토픽을 이루는 큐입니다.

각 파티션에는 leader, follower, isr 존재합니다.

 

각 용어의 의미는 아래와 같습니다.

  • leader는 메시지를 write, read하는 역할을 수행하며, 토픽의 replication 갯수만큼 follower에게 복제를 명령합니다.
  • follower는 leader의 요청을 받아 메시지를 복제하는 역할을 합니다.
  • isr는 replication group을 의미하며, leader & follwer 선출 시 이 isr 내에서 선출하게 됩니다.

아래는 파티션의 leader, follower, isr에 관련해서 보여드리기 위해 캡처한 사진입니다.

 

위 사진을 보시면 0번 파티션의 정보로는,

leader는 2번 broker, isr(in sync replicas)는 현재 2번, 3번으로 되어 있는것을 보실 수 있습니다.

 

3-5. producer (프로듀서)

 

프로듀서는 카프카에서 메시지를 발행(pub)하는 주최를 의미합니다.

 

프로듀서의 특징은 아래와 같습니다.

  • 메시지 발행 시 직렬화를 제공합니다.(string, json, avro 등)
  • partition에 특정 데이터만을 발행하기 위해 메시지의 key를 지정할 수 있습니다.
  • 메시지 발행 후 broker로 부터 ack를 받을 수 있습니다. (https://kafka.apache.org/23/documentation.html#producerapi)

 

3-6. consumer (컨슈머)

 

컨슈머는 메시지를 subscribe하는 주최입니다.

 

컨슈머의 특징은 아래와 같습니다.

 

  • commit이라는 행위로 어느 offset까지 subscribe했는지 주키퍼에게 알림.
  • 컨슈머는 살아있다면 zookeeper에게 heart beat를 전송.
  • poll이라는 행위로 메시지를 subscribe하며, 이때 시간과 최대 갯수등 설정 가능(https://kafka.apache.org/23/documentation.html#consumerconfigs)

 

여기서 offset은 각 파티션에 메시지가 유입된 순서를 의미합니다.

 

 

3-7. consumer group (컨슈머 그룹)

 

컨슈머 그룹은 컨슈머들의 논리적인 그룹을 의미합니다.

 

컨슈머 그룹은 아래와 같은 특징을 가지고 있습니다.

 

  • 토픽별 컨슈머 그룹 단위로 offset과 lag를 관리.
  • 컨슈머는 컨슈머그룹을 필수로 가져야 함.
  • 토픽의 파티션 갯수만큼 컨슈머들이 동일 컨슈머 그룹에 존재하는것이 Best!!
    • 한 파티션은 하나의 컨슈머만 점유 가능하기 때문.
  • 파티션을 점유중인 컨슈머가 down 되었을 시 컨슈머 그룹내 리밸런싱 동작.
    • down된 컨슈머가 점유한 파티션을 다른 컨슈머에게 위임하는 작업.

 

여기서, lag는 한 토픽의 (총 메시지 갯수 - 컨슈머 그룹이 subscribe한 메시지 갯수) 입니다.

간단히, 한 토픽에서 한 컨슈머 그룹이 소비해야하는 메시지 갯수입니다.

 

 

4. 마무리

이번 포스팅에서는 카프카에 대해 알아보았습니다.

다음 포스팅부터는 카프카 설치 및 cli를 통한 사용예제를 포스팅하도록 하겠습니다.

 

반응형

+ Recent posts