티스토리 뷰

 

 

아파치 카프카에서 Producer와 Consumer의 내부 동작원리 및 특징에 대해서 알아보도록 하겠습니다.

 

 

 

 

아파치 카프카의 전체구조

 

우선 카프카의 전체 구조를 다시한번 보고 가겠습니다.

카프카의 전체 구조는 다음과 같습니다.

 

 

 

Producer에서 Key-Value 형태로 메세지를 send하면, 브로커의 한 토픽을 기준으로 key로 파티션을 나누어 브로커에 저장이 됩니다.

(여기서 메세지 send를 할때, key값은 partition을 나누는 것이지, topic을 나누는것이 아닙니다!!)
(key가 아니라 partition으로도 나눌 수 있습니다. 다만, Key를 활용하는 방식이 유연성이 높습니다.)

해당 브로커에선 Queue 형태로 데이터들을 저장하며, 이를 기반으로 카프카가 동작을 하게 됩니다.

 

이제 해당 Consumer 그룹에 존재하는 consumer들이 데이터를 받아올 수  있습니다.
이때, (Consumer의 수 < 파티션의 수) 일시, 여러 파티션에서 데이터를 받는 consumer가 생깁니다.

 

이렇게 카프카의 전체 구조를 한번 쭉 봤고 이제 세부적으로 어떻게 작동되는지 알아보도록 하겠습니다.

 

 

 

 

 

Producer의 내부 구조

 

카프카에서 Producer의 내부 구조는 다음과 같습니다.

  1. Record 생성
    • Broker에 저장할 Record를 생성합니다.
    • 이때, topic과 value는 필수이며, Partition 및 Key는 선택사항입니다.
    • topic = 토픽을 나누기 위한 값
      Partition = 파티션을 사용자가 직접 지정하는 값
      Key = 파티션을 Kafka가 지정할 수 있게 하는 값
  2. Serializer와 Partitioner
    • Serializer를 통해 직렬화하여 Byte 배열로 만듭니다.
    • Partitioner를 통해 해당 Record가 어느 Partition으로 갈지 정합니다.
    • 만약 여기서 partition을 지정했다면, 아무 동작없이 해당 partition으로 전달.
      key를 지정했다면, key를 기반으로 partition 선택하여 전달.
      아무것도 지정하지 않았다면, round robin 방식으로 동작.
  3. Buffer
    • Buffer 내부에서 여러 Record들을 Batch로 모읍니다.
    • 이렇게 Record들을 한번에 모아 Broker에 한번에 전달합니다.
    • Batch로 메세지 저장과 Sender로 메세지 보내는 과정은 독립적입니다.
      (즉, Batch에 저장되는 수와 상관없이 Send 할 수 있음)
  4. Sender
    • Broker로 Batch들을 전송합니다.
    • 전송과정 실패 시, 재시도 동작 진행합니다.
    • 지정된 횟수만큼 재시도 실패시, 최종실패합니다.

 

즉, 우리가 Record를 생성하고 Producer를 통해 Broker내부의 토픽에 저장을 할때 위와 같은 과정을 거쳐 저장이 됩니다.
먼저, 해당 Record를 Serializer를 해 직렬화한 후, Partitioner를 통해 어느 파티션에 넣을지 정합니다.
그 이후에 Buffer안의 Batch에 메세지들이 쌓이게되고, 이와 독립적인 Sender가 Batch안에 레코드 데이터가 있다면 꺼내서 Broker에 전달해 저장을 하게 됩니다.

 

 

 

 

 

 

Consumer의 특징

 

카프카에서 Consumer의 구조는 다음과 같습니다.

  • Consumer Group
    • Consumer들의 묶음이라고 생각하면 되며, 반드시 한 topic의 파티션은 그 Consumer Group과 1:N 매칭이 되어야합니다.
    • 즉, 파티션의 개수 >= consumer의 개수
    • 예시로는 다음과 같습니다.
      Partition3 : Consumer2  -> Consumer 중에 하나는 2개의 파티션을 소비
      Partition3 : Consumer3  -> Consumer와 Partition 각각 1대1 매칭
      Partition3 : Consumer4  -> Consumer 1개가 아무것도 하지 않음

Partition3 : Consumer2 상황
Partition3 : Consumer3 상황

 

Partition3 : Consumer4 상황

 

 

 

  • 리밸런싱
    • 특정 토픽을 구독하던 Consumer Group에 문제가 발생했을때, 해당 Group 안에서 Partition을 재분배하는 기술
    • 이 기술을 통해 Consumer Group에 문제가 생겼을때, 자동적으로 해결할 수 있습니다.
    • 리밸런싱이 일어나는 조건은 다음과 같습니다.
      Consumer Group안의 Consumer가 생성 or 삭제된 경우
      설정된 시간 내에 poll()요청을 다 끝내지 못한 경우
      설정된 시간내에 하트비트 메세지를 보내지 못한경우

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함