본문 바로가기
공부 및 정리/데이터 엔지니어링

[Kafka] Kafka 간단 정리

by 스파이펭귄 2024. 4. 5.
728x90

Kafka 개요

카프카는 대규모 실시간 데이터 스트리밍 처리를 위한 분산 스트리밍 플랫폼으로 LinkedIn에서 개발되어 현재는 Apache 재단에서 오픈소스로 관리되고있다.

Kafka는 고성능, 확장성, 내구성, 신뢰성을 제공하며 실시간 데이터 파이프라인과 스트리밍 애플리케이션의 구축에 이상적이다. Kafka는 여러 컴퓨터가 모여서 Cluster를 구축할 수 있다.

Kafka Cluster는 이러한 Kafka를 이루는 Broker라는 것들이 모인 집단을 의미한다.

Apache Kafka? Confluent Kafka?

Kafka에 대해서 찾아보면 Confluent KafkaApache Kafka가 있는 것을 볼 수 있다.

  • Apache Kafka는 오픈소스로 Apache 재단에서 관리중인 소프트웨어이다. 또한 Java 클라이언트를 포함하고 있다.
  • Confluent Kafka는 LinkedIn의 최초 Kafka 개발자들이 나와서 Confluent라는 Kafka 관련 SaaS 서비스를 제공하는 회사를 차린 것이다. (Kafka Cluster 구축 및 전문적인 지원…) Java 외의 다른 언어 클라이언트들을 제공하여 Java 외의 언어를 사용하기 위해서는 Confluent Kafka를 사용해야한다.

그렇다면 Kafka는 어떻게 데이터를 관리할까?

 

Kafka의 데이터 관리

Kafka는 아래 3가지 구성을 통하여 데이터를 관리한다.

  1. Topic: 카프카의 데이터 저장소로 카프카로 들어오는 데이터(메시지) 스트림을 카테고리화한다. 대략적으로 생각하면 동일한 카테고리의 데이터가 저장되는 박스라 보면 된다. 이곳에 같은 카테고리 데이터를 저장하고, 해당 카테고리를 찾는 사람은 이곳에 접근해 데이터를 이용할 수 있다.
  2. Partition: 토픽을 나눈 단위로, 병렬 처리에 큰 이점을 제공한다.
  3. Offset: 파티션 내의 각 메시지의 고유 위치로 0부터 시작해 메시지가 토픽에 올 때마다 증가한다. 즉, 일종의 Index라 볼 수 있다. 이 오프셋을 활용해 메시지를 이용하려는 사람(컨슈머)는 어디부터 데이터를 처리할지 계산할 수 있어 데이터를 빠뜨리지 않고 처리할 수 있게 해준다.

그렇다면 Kafka 플랫폼을 이루는 구성으로는 어떤것들이 있을까?

 

Kafka의 구성요소

Kafka의 구성요소는 크게 3가지로 브로커, 프로듀서, 컨슈머가 있다. 하나하나 간단히 살펴보자.

브로커 (Broker)

  • Kafka cluster를 구성하는 서버로 데이터 메시지를 저장하고 처리
  • 각 브로커는 클라이언트(프로듀서)에게서 메시지를 받아 저장하며, 필요한 클라이언트(컨슈머)에게 메시지를 전달
  • Kafka cluster는 여러 브로커로 구성되며 이들은 병렬로 처리되어 고 가용성, 분산처리, 메시지(파티션) 복제를 수행한다.

프로듀서 (Producer)

  • Kafka에 메시지를 발행하는 client application
  • 특정 토픽으로 메시지를 보내고, kafka cluster는 이 메시지를 하나 이상의 브로커에 저장
  • 어느 토픽, 어떤 파티션에 보낼지를 정할 수 있으며 기본적으로는 kafka의 파티션 정책을 따른다.

컨슈머 (Consumer)

  • Kafka의 메시지를 소비하는 client application
  • 하나 이상의 topic을 구독하며, 지속적으로 메시지를 받아 처리
  • 컨슈머 그룹을 통해 메시지를 분산시켜 빠르게 처리하며 오프셋을 통해 중복 없이 처리를 보장

마지막으로 카프카의 특징에 대해 간단히 살펴보자.

 

Kafka의 특징

  1. 분산 스트리밍 플랫폼: 파티션을 통한 분산 처리로 성능이 탁월하며 서비스 확장이 용이하다.
    1. 서비스 확장시 단순히 브로커를 추가하기만 하면 된다.
    2. 하지만 서비스 축소시에는 그리 간단하지 않다. 브로커를 제거하기 위해서는 브로커에 할당된 파티션을 다른 브로커로 마이그레이션 해야 한다.
    3. 즉, 브로커의 추가는 간단하지만 항상 깊은 고민을 해야 한다.
  2. 데이터 중앙 처리: 웹, app, sensor로부터의 모든 정보를 kafka를 통해 실시간 관리가 가능하다.
  3. 배치-압축 전송: 배치 전송을 통해 네트워크 오버헤드를 줄이며, 압축 전송을 통해 네트워크 대역폭 및 회신 비용을 줄인다.
  4. 주키퍼 의존성: 주키퍼가 노드/토픽/컨트롤러를 관리하며, 2.8 버전 이후부터는 주키퍼 의존성이 제거되었다.
  5. undeleted log: Consumer가 데이터를 가져가도 데이터가 삭제되지 않고 일정 기간 보존하는 특징
    1. 컨슈머 그룹 아이디가 다르면 동일한 데이터를 받을 수 있다. 하지만 group id가 같으면 단 하나의 컨슈머만이 받을 수 있다. (Redis와는 다른 점)
    2. 보존 중인 데이터는 로그 세그먼트라는 형태로 디스크에 저장되며 설정된 보존 기간이나 최대 용량에 도달하기 전까지 디스크에 보관하며 도달 시 오래된 데이터부터 삭제한다.

좀 더 자세한 내용은 아래 블로그가 너무 잘 정리해놓으셨다.

[Kafka Study] 02. 카프카 기본 개념과 구조 w/실전 카프카 개발부터 운영까지

 

[Kafka Study] 02. 카프카 기본 개념과 구조 w/실전 카프카 개발부터 운영까지

책에서는 2장에서 실습 환경 구성을 하고, 3장부터 실습을 하면서 카프카 기본 개념을 설명한다. 그런데 환경 구성에 필요한 VM 인스턴스만 7개이다 보니 기본 구조와 용어를 먼저 이해하고 구축

teki.tistory.com

위 블로거 분께서 그림을 너무 잘 그리셔서 돚거했다. (광고 한번 눌러드리자..)

카프카의 대략적인 구성도

 

 

Reference

728x90