ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Apache Kafka
    내일배움캠프 Spring 심화 1기/TIL 2024. 8. 13. 23:58

    Apache Kafka

    대규모 데이터 스트림을 처리하기 위한 분산 메시지 큐 시스템입니다. 이벤트 스트리밍 아키텍쳐와 함께 사용하여 데이터 파이프라인을 구축하고 이벤트를 실시간으로 처리합니다.

     

    구성 요소

    • 메시지(Message)
      • 메시지는 Kafka를 통해 전달되는 데이터 단위입니다. 예를 들어, 로그 데이터나 이벤트 데이터가 메시지가 될 수 있습니다.
      • 메시지는 키(key), 값(value), 타임스탬프(timestamp), 그리고 몇 가지 메타데이터로 구성됩니다.
    • 생산자(Producer)
      • 메시지를 생성하고 Kafka에 보내는 역할을 합니다. 예를 들어, 웹 애플리케이션이 로그 데이터를 Kafka에 보내는 경우 생산자가 됩니다.
      • 생산자는 특정 토픽(topic)에 메시지를 보냅니다.
    • 소비자(Consumer)
      • 토픽에서 메시지를 가져와 처리하는 역할을 합니다.
      • 소비자는 특정 소비자 그룹(consumer group)에 속하며, 같은 그룹에 속한 소비자들은 토픽의 파티션을 분산 처리합니다.
      • 기본적으로 소비자는 스티키 파티셔닝(Sticky Partitioning)을 사용합니다. 이는 특정 소비자가 특정 파티션에 붙어서 계속해서 데이터를 처리하는 방식으로, 이는 데이터 지역성을 높여 캐시 히트율을 증가시키고 전반적인 처리 성능을 향상시킵니다.
    • 브로커(Broker)
      • Kafka 클러스터의 각 서버를 의미하며, 메시지를 저장하고 전송하는 역할을 합니다.
      • 하나의 Kafka 클러스터는 여러 브로커로 구성될 수 있으며, 각 브로커는 하나 이상의 토픽 파티션을 관리합니다.
    • 토픽(Topic)
      • 메시지를 저장하는 장소입니다. 메시지는 토픽에 저장되었다가 소비자에게 전달됩니다.
      • 토픽은 여러 파티션(partition)으로 나누어질 수 있으며, 파티션은 메시지를 순서대로 저장합니다. 파티션을 통해 병렬 처리가 가능합니다.
      • 예: “user-activity”라는 토픽에 사용자의 활동 로그를 저장할 수 있습니다.
    • 파티션(Partition)
      • 파티션은 토픽을 물리적으로 나눈 단위로, 각 파티션은 독립적으로 메시지를 저장하고 관리합니다.
      • 각 파티션은 메시지를 순서대로 저장하며, 파티션 내의 메시지는 고유한 오프셋(offset)으로 식별됩니다.
      • 파티션을 통해 데이터를 병렬로 처리할 수 있으며, 클러스터 내의 여러 브로커에 분산시켜 저장할 수 있습니다.
    • 키(Key)
      • 키는 메시지를 특정 파티션에 할당하는 데 사용되는 값입니다.
      • 동일한 키를 가진 메시지는 항상 동일한 파티션에 저장됩니다.
      • 예를 들어, 특정 사용자 ID를 키로 사용하여 해당 사용자의 모든 이벤트가 동일한 파티션에 저장되도록 할 수 있습니다.
    • 주키퍼(Zookeeper)
      • Kafka 클러스터를 관리하고 조정하는 데 사용되는 분산 코디네이션 서비스입니다.
      • 주키퍼는 브로커의 메타데이터를 저장하고, 브로커 간의 상호작용을 조정합니다.

    장점

    • 확장성
      • Kafka의 파티셔닝된 로그 모델을 사용하면 데이터를 여러 서버에 분산할 수 있으므로 단일 서버에 담을 수 있는 수준 이상으로 데이터를 확장할 수 있습니다.
    • 신속성
      • 데이터 스트림을 분리하므로 지연 시간이 매우 짧아 속도가 극도로 빠릅니다.
    • 내구성
      • 파티션은 여러 서버에 분산되어 복제되며 데이터는 모두 디스크에 기록됩니다. 이렇게 하면 서버 장애로부터 데이터를 보호할 수 있어 데이터의 내결함성과 내구성을 높일 수 있습니다.

    Kafka와 RabbitMQ의 차이

    RabbitMQ는 메시지 큐 방식을 사용하는 오픈 소스 메시지 브로커입니다. 대기열을 노드 클러스터에 분산되어 있으며 선택적으로 복제되며 각 메시지는 단일 소비자에게만 전달됩니다.

    특징 Apache Kafka RabbitMQ
    아키텍처 Kafka는 메시징 큐와 게시 구독 접근 방식을 결합하는 분할된 로그 모델을 사용합니다. RabbitMQ는 메시징 큐를 사용합니다.
    확장성 Kafka는 여러 서버에 파티션을 분산할 수 있도록 지원함으로써 확장성을 제공합니다. 대기열에 있는 소비자 수를 늘려 경쟁 소비자 전체로 처리를 확장합니다.
    메세지 보존 예를 들어 정책에 기반한 경우, 메시지를 하루 동안 저장할 수 있습니다. 사용자는 이러한 보존 기간을 구성할 수 있습니다. 승인에 기반한 경우, 메시지가 소비되면 삭제됩니다.
    다수의 소비자 Kafka에서는 일정 기간 동안 동일한 메시지를 재생할 수 있으므로 여러 소비자가 동일한 주제를 구독할 수 있습니다. 메시지는 소비될 때 제거되므로 여러 소비자가 모두 동일한 메시지를 받을 수는 없습니다.
    복제 주제는 자동으로 복제되지만 사용자가 주제를 복제하지 않도록 수동으로 구성할 수 있습니다. 메시지는 자동으로 복제되지 않지만 사용자가 메시지를 복제하도록 수동으로 구성할 수 있습니다.
    메시지 정렬 각 소비자는 분할된 로그 아키텍처로 인해 정보를 순서대로 수신합니다. 메시지는 대기열에 도착한 순서대로 소비자에게 전달됩니다. 경쟁 소비자가 있는 경우, 각 소비자는 해당 메시지의 일부를 처리합니다.
    프로토콜 Kafka는 TCP를 통한 바이너리 프로토콜을 사용합니다. 플러그인을 통해 지원되는 고급 메시징 큐 프로토콜(AMQP): MQTT, STOMP.
Designed by Tistory.