Apache Kafka의 전반적인 이해와 데이터 관리 전략

Kafka?

Apache Kafka가 등장하기 전에는 서비스 간 데이터 교환 방식이 상당히 복잡했다. 각 서비스나 시스템이 직접적으로 데이터를 교환하려면, 서로 다른 인터페이스와 데이터 포맷을 맞추는 등의 추가 작업이 필요했기 때문이다.

이러한 접근 방식은 시스템 간의 강한 결합도(strong coupling)를 초래했고, 결과적으로 시스템 확장성과 유지보수성에 부정적인 영향을 미쳤다.

Kafka가 도입된 이후로 상황이 크게 개선되었다. Kafka는 서비스 간의 데이터 교환에 있어서 중앙 집중형 메시징 플랫폼의 역할을 하며, 서비스들이 Kafka에 데이터를 발행(produce)하거나 Kafka로부터 데이터를 소비(consume)하는 PUB/SUB 의 개념을 차용해 서비스 간의 데이터 교환을 단순화하고, 시스템 전체의 유연성, 확장성, 신뢰성을 향상시켰다. Kafka를 사용함으로써 개발자들은 시스템 간 데이터 통신의 복잡성을 줄이고, 비즈니스 로직 개발에 더 많은 시간을 할애할 수 있게 된 것이다.

Kafka의 기능과 사용 사례

Apache Kafka는 복잡한 데이터 흐름과 서비스 간 통신 문제를 해결하기 위해 등장한 높은 처리량, 내구성, 확장성을 제공하는 분산 스트리밍 플랫폼이다. 이러한 특징으로 인해 대량의 데이터를 실시간으로 처리하고, 여러 시스템 간에 메시지를 안정적으로 전달할 필요가 있는 다양한 서비스에서 Kafka를 선택하게 된다. 주요 사용 사례로는 로그 집계, 실시간 분석, 이벤트 소싱, 데이터 통합 등이 있다. Kafka는 특히 대규모 시스템에서 데이터 파이프라인을 구축할 때 강력한 성능을 발휘한다.

분산 스트리밍 플랫폼 인 Kafka는, 이를 구성하는 서버(Kafka Broker)들이 여러 대 있을 수 있으며, 이들이 협력하여 대량의 데이터를 실시간으로 처리하고 전송한다.

Kafka에서 데이터는 **토픽(Topic)**이라는 구조를 통해 구분되고 관리된다. 토픽은 다시 파티션(Partition)으로 세분화되어, 데이터가 저장되는 물리적 단위로 기능한다.

예시로 이해해보는 Kafka System Diagram

  1. Kafka Producer (공장)
    • Kafka Producer 데이터를 생산하는 공장과 같다. 데이터는 Topic이라는 트럭에 실려 Kafka 토픽으로 운반된다. 여기서 데이터는 공장에서 만들어진 상품과 같다.
    • (+추가개념)Offset은 특정 파티션 내에서 메시지의 유니크한 식별자로 사용된다. 각 메시지가 토픽의 파티션에 추가될 때, 순차적인 offset을 부여받는다.
    • (+추가개념)Message Key는 Kafka에 메시지를 보낼 때 프로듀서가 제공할 수 있는 옵션중 하나이다. 이는 파티션 내에서 메시지의 순서를 결정하는 데 사용되며, 특히 같은 키를 가진 메시지들은 동일한 파티션에 저장되어 순서가 유지될 수 있게 도와준다.
  2. Kafka Topic (트럭)
    • 트럭은 Kafka 토픽을 나타낸다. 프로듀서가 만든 데이터(상품)는 트럭에 실리고, 이 트럭들은 데이터를 각기 다른 목적지로 운반한다. 각 트럭은 Kafka의 파티션을 대표하며, 데이터가 특정 파티션(트럭)에 할당되어 컨슈머에게 전달된다.
  3. Kafka Consumer (목적지)
    • 목적지는 Kafka 컨슈머를 나타낸다. 각기 다른 목적지(데이터베이스, 애플리케이션, 알람 시스템)에서 트럭(토픽)을 기다리는 것처럼, 컨슈머는 특정 토픽으로부터 데이터를 받아 처리한다. 컨슈머는 받은 데이터를 필요에 따라 다양하게 활용할 수 있다.
    • (+추가개념)Consumer는 각 Partition에 할당된 Offset을 사용하여 읽은 메시지를 추적하고, 어디서부터 데이터를 다시 읽을지 결정할 수 있다.
    • (+추가개념)Consumer Group은 여러 컨슈머 인스턴스를 그룹화하여, 토픽의 파티션들을 효율적으로 공유한다. 그룹 내의 각 컨슈머는 토픽의 파티션들 중 일부를 할당받아 데이터를 처리한다.
  4. Kafka Streams (운반 처리 과정)
    • Kafka Streams는 데이터를 실시간으로 처리하는 공정을 나타낸다. 마치 트럭이 다양한 경로를 통해 움직이며, 목적지에 맞는 상품을 전달하는 것처럼, Kafka Streams는 데이터를 가공하여 컨슈머가 사용할 수 있게 만든다.

각 트럭은 Kafka 클러스터 내의 토픽의 파티션을 나타내며, 데이터가 토픽의 파티션으로 할당되어 다양한 컨슈머에게 전달하는 과정을 보여준다. 컨슈머는 이 데이터를 특정 작업에 사용하고, Kafka Streams는 이 데이터를 실시간으로 가공하는 역할을 수행한다.

Kafka Broker? Kafka Cluster?

Kafka에서 서버 1대는 보통 Broker 1개로 구성된다. Kafka 시스템 내에서 Broker란, Kafka Cluster를 구성하는 개별 서버를 의미한다. Kafka Cluster는 여러 Broker(서버)로 구성될 수 있으며, 각 Broker는 Cluster 내에서 데이터(메시지)를 저장하고, Producer로부터 메시지를 받아 다른 Consumer나 시스템으로 전달하는 역할을 한다.

Kafka를 구성하는 서버를 Broker라고 부르는 이유는 카프카가 메시지 중개자(Message Broker)로 동작하기 때문이다. Message Broker는 메시지를 발행하는 측(Producer)과 메시지를 구독하는 측(Consumer) 사이에서 메시지의 전달을 중개하는 시스템이다. Kafka의 각 Broker는 이러한 중개자 역할을 수행하여, 시스템 간에 메시지를 안정적으로 전달하는 중추적인 역할을 한다.

이러한 구조 덕분에 Kafka는 높은 처리량과 확장성을 가지며, 분산 환경에서도 안정적으로 메시지를 처리할 수 있다. 또한, 여러 브로커를 통해 데이터를 복제(replicate)하고 분산(distribute)함으로써 데이터의 안정성과 가용성을 높이는 것이 가능하다.

Kafka Cluster는 여러 Kafka Broker(서버)가 네트워크를 통해 연결되어 함께 작동하는 전체 시스템을 의미한다. 데이터를 처리하고 저장하는 작업이 여러 대의 서버에 걸쳐서 이루어진다는 것은 주로 Kafka Cluster 내의 여러 Broker 사이에서 일어나는 일을 가리킨다. 클러스터를 구성하는 각 Broker는 카프카 시스템 내에서 메시지를 저장하고 전달하는 역할을 담당한다.

Cluster와 Broker

  • Cluster: Kafka를 운영하기 위해 여러 Broker가 함께 연결되어 구성된 전체 시스템이다.
  • Broker: 클러스터 내의 개별 서버로, 각각의 브로커는 고유한 ID로 구별된다

예를 들어, Cluster가 3개의 Broker로 구성되어 있다는 말은 즉, Kafka 시스템이 3대의 서버로 운영되고 있다는 것을 의미한다. 각 Broker는 특정 토픽의 메시지를 저장할 책임이 있으며, 이러한 메시지는 Broker 간에 복제될 수 있어 시스템의 내구성과 가용성을 향상시킨다.

즉, Kafka 클러스터는 여러 Kafka Broker로 구성되며, 각 Broker는 데이터를 저장하고, 전달하는 역할을 담당한다. 이러한 시스템은 대규모 데이터 파이프라인 구축에 있어 강력한 성능을 발휘할 수 있게 한다.

토픽의 분산 저장 방식과 Retention Policy

  1. 토픽 생성과 Retention Policy 설정 사용자가 토픽을 생성할 때 파티션의 수를 지정한다. 이때, 각 토픽에 대한 Retention Policy도 설정할 수 있다. 이 정책은 데이터가 파티션에 저장되는 기간을 결정하며, 시간 또는 크기 기준으로 데이터가 언제 삭제될지를 정한다.
  2. 파티션의 분산과 데이터 보관 토픽의 각 파티션은 카프카 클러스터 내의 다른 브로커들에 분산되어 저장된다. 토픽 A가 세 개의 파티션으로 구성되었고 클러스터에 세 대의 브로커가 있다면, 각 브로커는 토픽 A의 한 개의 파티션을 관리하게 된다. 또한, 데이터는 설정된 Retention Policy에 따라 일정 기간 또는 크기가 되면 자동으로 삭제되기 때문에, 분산 저장된 데이터의 라이프사이클 관리가 중요하다.
  3. 리더 파티션, 복제, 그리고 Retention 각 파티션은 리더를 갖고 있고, 이 리더를 통해 쓰기와 읽기 작업이 진행된다. 복제된 파티션들도 동일한 Retention Policy를 따르기 때문에, 클러스터 전체의 데이터 보관 기간이 일관되게 유지된다.
  4. 데이터 쓰기, 읽기, 그리고 Retention 적용 프로듀서는 리더 파티션에 데이터를 쓰고, 컨슈머는 파티션에서 데이터를 읽는다. 이 과정에서도 Retention Policy가 적용되며, 더 이상 필요하지 않은 데이터는 설정에 따라 자동으로 삭제되어 스토리지 관리가 최적화된다.

마무리

지금까지 분산 환경에서의 데이터 처리와 스트리밍에 혁명을 가져온 플랫폼인 Kafka에 대해서 알아보았다. 고가용성, 내구성, 확장성을 갖추고 있는 Kafka는 시스템 간 통신을 단순화하여 개발자들이 핵심 비즈니스 로직에 더 집중할 수 있게 하는 유용한 도구이다. 또한 Kafka의 Retention Policy, Offset, Message Key, Consumer Group과 같은 개념들은 Kafka를 사용하여 높은 처리량의 데이터를 효율적으로 관리하는 데 필수적인 요소이다.

이처럼 Kafka는 데이터 중심 애플리케이션에서 필수적인 도구이며, 단순히 데이터를 전송하는 수단을 넘어서, 실시간 데이터 스트림 처리와 대용량 데이터 파이프라인 구축에 있어 핵심적인 기술로 자리매김했다.

Apache Kafka의 전반적인 이해와 데이터 관리 전략

댓글 남기기

Scroll to top