나의개발일지

Apache Kafka (소개, 특징, 기본용어) 본문

Infra/Kafka

Apache Kafka (소개, 특징, 기본용어)

아. 이렇게 하면 될거 같은데.. 2024. 9. 1. 23:05
728x90



💻 Kafka 란?

파편화된 데이터 수집 및 분배 아키텍처를 운영하기 위해서는 데이터를 생성하는 소스 애플리케이션과 데이터ㄹ가 최종 적재되는 타깃 애플리케이션을 연결해야 한다.

아키텍쳐가 작을때는 복잡하지 않게 구현할 수 있지만 아키텍쳐가 거대해 지면 그 통신을 이어주는 라인이 기하 급수적으로 늘어나게 된다.

 

아래의 그림을 보면 소스시스템이 4개, 타겟 시스템이 4개면 각각 통신이 연결 되어 있어야 함으로 총 16개의 통신 라인이 구축 되게 된다.

 

이를 편리하게 데이터를 주고 받을 수 있도록 설계된 시스템이 아파치 카프카이다.

카프카는 각각의 애플리케이션끼리 연결하여 데이터를 처리하는 것이 아니라 한 곳에 모아 처리할 수 있도록 중앙 집중화 했다. 카프카를 통해 웹사이트, 애플리케이션, 센서 등에서 취합한 데이터 스트림을 한 곳에서 실시간으로 관리할 수 있게 되었다.

 


💻 Kafka 특징

1. 분산형 아키텍처

Kafka는 클러스터 형태로 구성되며, 여러 대의 브로커(broker)가 협력하여 데이터를 처리하고 저장합니다. 이 분산형 아키텍처는 고가용성과 확장성을 제공하여, 대규모 데이터 처리에 적합합니다.

2. 높은 처리량 및 저지연성

Kafka는 초당 수백만 건의 메시지를 처리할 수 있을 만큼 높은 처리량을 자랑합니다. 또한, 저지연성을 유지하면서 데이터를 빠르게 전송할 수 있어 실시간 데이터 스트리밍에 매우 적합합니다.

3. 내구성 및 영속성

Kafka는 메시지를 디스크에 저장하여 데이터의 영속성을 보장합니다. 이를 통해 시스템 장애가 발생하더라도 데이터가 유실되지 않고 복구할 수 있습니다. 메시지는 지정된 기간 동안 보존되며, 소비자가 읽을 때까지 유지됩니다.

4. 확장성

Kafka는 필요에 따라 브로커와 파티션을 추가하여 클러스터를 쉽게 확장할 수 있습니다. 이러한 확장성은 데이터의 증가에 따라 시스템을 확장할 수 있도록 해줍니다.

5. 실시간 스트리밍 데이터 처리

Kafka는 실시간으로 데이터를 스트리밍할 수 있는 기능을 제공합니다. 데이터를 지속적으로 생산자(producer)로부터 소비자(consumer)로 전송하며, 실시간 데이터 분석 및 모니터링 애플리케이션에 사용됩니다.

6. 다양한 API 지원

Kafka는 데이터 생산과 소비를 위한 Producer API와 Consumer API 외에도, 스트리밍 데이터 처리를 위한 Streams API, 커넥터를 통한 외부 시스템과의 연동을 지원하는 Connect API 등을 제공합니다. 이로 인해 다양한 데이터 처리 및 통합 시나리오를 지원할 수 있습니다.

7. 메시지 순서 보장

Kafka는 파티션 내에서 메시지의 순서를 보장합니다. 특정 키를 기준으로 파티션을 설정할 수 있어, 같은 키를 가진 메시지들이 같은 순서로 소비자에게 전달됩니다.

8. 고가용성

Kafka는 복제(replication) 기능을 통해 메시지의 복제본을 여러 브로커에 저장하여, 브로커 중 하나가 실패하더라도 데이터의 손실 없이 계속해서 서비스를 제공할 수 있습니다.

9. 리텐션 정책

Kafka는 데이터의 보존 기간을 설정할 수 있는 리텐션 정책을 제공합니다. 데이터는 설정된 기간 동안 보존되며, 이후 자동으로 삭제됩니다. 이를 통해 저장 공간을 효율적으로 관리할 수 있습니다.

10. 유연한 메시지 처리 방식

Kafka는 다양한 방식으로 메시지를 처리할 수 있습니다. 예를 들어, 단일 소비자가 메시지를 독점적으로 소비하거나, 여러 소비자가 동일한 메시지를 동시에 소비하는 구조를 설정할 수 있습니다.

 


💻 Kafka 기본 용어

📍브로커, 클러스터, 주키퍼

카프카 브로커:

  • 메시지를 저장하고 소비자에게 전달하는 역할을 하는 Kafka 서버의 단위입니다.

카프카 클러스터:

  • 여러 개의 카프카 브로커가 협력하여 하나의 논리적 단위를 구성한 시스템입니다.

주키퍼(ZooKeeper):

  • Kafka 브로커의 메타데이터 관리와 클러스터 조정 역할을 담당하는 분산 코디네이션 서비스입니다.

📍토픽, 파티션

토픽(Topic):
  • 카프카에서 데이터의 카테고리 또는 피드를 나타냅니다. 프로듀서(데이터 생산자)는 특정 토픽에 메시지를 게시하고, 소비자(데이터 소비자)는 그 토픽에서 메시지를 구독하여 처리합니다. 예를 들어, "주식가격"이라는 토픽이 있을 수 있습니다.

파티션(Partition):

  • 각 토픽은 하나 이상의 파티션으로 나뉘어 저장됩니다. 파티션은 토픽의 데이터가 저장되는 기본 단위로, 각 파티션은 고유한 순서가 유지됩니다. 파티션을 나누는 이유는 데이터의 병렬 처리를 가능하게 하여 성능을 향상시키기 위함입니다. 각 파티션은 여러 브로커(서버)에 분산될 수 있습니다.

오프셋(Offset):

  • 각 파티션 내에서 메시지는 순차적으로 저장되며, 각 메시지에는 고유한 오프셋이 부여됩니다. 오프셋은 파티션 내의 메시지 위치를 나타내는 정수 값으로, 소비자는 이 오프셋을 사용하여 어떤 메시지를 읽었는지 추적할 수 있습니다. 오프셋은 소비자가 메시지를 읽는 순서를 관리하는 데 중요한 역할을 합니다.

📍Consumer, Producer

프로듀서(Producer)

  • 정의: 프로듀서는 카프카에 데이터를 생성하고 전송하는 역할을 합니다. 즉, 특정 토픽에 메시지를 게시합니다.
  • 기능:
    • 메시지를 선택한 토픽에 전송합니다.
    • 메시지를 어떤 파티션에 보낼지 결정할 수 있습니다. 이를 위해 파티션 키를 사용할 수 있으며, 이 키를 기반으로 특정 파티션에 메시지를 전송합니다.
    • 전송하는 메시지의 순서와 내구성을 보장할 수 있는 다양한 설정을 제공합니다.

컨슈머(Consumer)

  • 정의: 컨슈머는 카프카에서 데이터를 읽고 처리하는 역할을 합니다. 특정 토픽에서 메시지를 구독하여 소비합니다.
  • 기능:
    • 구독한 토픽에서 메시지를 읽고, 이를 처리합니다.
    • 각 컨슈머는 오프셋을 관리하여 어떤 메시지를 읽었는지를 추적할 수 있습니다.
    • 여러 컨슈머가 하나의 그룹을 이루어 메시지를 병렬로 처리할 수 있으며, 이 경우 각 컨슈머는 서로 다른 파티션의 메시지를 처리하여 성능을 향상시킬 수 있습니다.
728x90
반응형

'Infra > Kafka' 카테고리의 다른 글

Kafka CDC설정 (debezium + mysql + apache kafka)  (0) 2024.09.23
Apache Kafka (Consumer Groups, Consumer Offset)  (1) 2024.09.03
Kafka Docker에 올리기  (0) 2024.09.03