아파치 카프카 가이드

아파치 카프카란?

아파치 카프카 퀵 스타트.

Note: 기본적으로 docker에 대한 이해를 하고 있어야 한다.

https://docs.confluent.io/platform/current/platform-quickstart.html

Apache Kafka 스터디 요약

1. Apache Kafka 소개

Apache Kafka는 분산형 스트리밍 플랫폼으로, 대규모 데이터 처리 및 실시간 데이터 스트리밍을 위한 핵심 기술입니다. Kafka는 특히 로그 처리, 이벤트 스트리밍, 실시간 데이터 파이프라인 구축에 널리 사용됩니다. 기본적으로 메시지 큐 또는 게시/구독 시스템(Pub/Sub)으로 활용됩니다.

Kafka는 다음과 같은 주요 기능을 제공합니다:

  • 메시징 시스템: 데이터를 발행하고 구독하는 시스템으로, 데이터를 안정적으로 전송합니다.
  • 분산 시스템: 여러 서버에 걸쳐 데이터를 분산하여 저장하고 처리합니다.
  • 고성능: 수백만 건의 메시지를 초당 처리할 수 있는 성능을 제공합니다.
  • 내구성: 데이터를 디스크에 저장하고, 복제를 통해 장애가 발생하더라도 데이터를 안전하게 유지합니다.

2. Kafka의 주요 구성 요소

Kafka는 분산형 시스템으로 여러 구성 요소가 협력하여 데이터를 처리합니다. 주요 구성 요소는 다음과 같습니다:

2.1. Producer(생산자)

Producer는 Kafka 토픽에 메시지를 보내는 클라이언트 애플리케이션입니다. Producer는 데이터를 생성하고, 이를 Kafka 클러스터의 특정 토픽에 전송합니다. 각 메시지는 하나의 파티션에 기록되며, Producer는 데이터를 특정 파티션에 효율적으로 배분합니다.

2.2. Consumer(소비자)

Consumer는 Kafka 토픽에 저장된 데이터를 읽어들이는 애플리케이션입니다. Consumer는 데이터를 하나씩 또는 배치로 처리하며, 토픽을 구독하고 데이터를 소비합니다. Kafka는 소비자가 메시지를 읽을 때마다 오프셋(Offset)을 관리하여 소비자가 읽은 메시지를 추적합니다.

2.3. Broker(브로커)

Kafka 클러스터는 여러 개의 브로커로 구성됩니다. 각 브로커는 데이터를 저장하고, Producer와 Consumer의 요청을 처리하는 역할을 합니다. 브로커는 데이터를 여러 파티션에 분산 저장하며, 각 파티션의 로그를 관리합니다.

2.4. Topic(토픽)

토픽은 Kafka에서 메시지를 구분하는 기본 단위입니다. Producer는 메시지를 특정 토픽에 보냅니다. Consumer는 하나 이상의 토픽을 구독하고 해당 토픽의 메시지를 소비합니다. Kafka에서 토픽은 파티션(Partition)으로 나뉘어져 데이터를 분산 처리합니다.

2.5. Partition(파티션)

Kafka에서 파티션은 토픽을 물리적으로 분할한 단위입니다. 파티션은 데이터를 분산 저장하고, 각 파티션은 독립적으로 데이터를 처리합니다. 파티션의 분할은 병렬 처리를 가능하게 하여 성능을 최적화합니다. 또한 각 파티션은 리더팔로워를 가지며, 리더 파티션이 데이터를 읽고 쓸 수 있습니다.

2.6. Zookeeper

Zookeeper는 Kafka 클러스터의 메타데이터를 관리하고, 클러스터의 상태를 추적하는 역할을 합니다. Zookeeper는 Kafka 클러스터의 브로커 상태토픽 파티션의 정보를 관리합니다. Kafka 2.8.0부터는 Zookeeper 없이도 클러스터를 운영할 수 있는 KRaft mode가 제공되지만, 여전히 많은 시스템에서 Zookeeper를 사용하고 있습니다.

3. Kafka의 메시지 처리 방식

Kafka는 메시지를 효율적으로 처리하기 위해 다음과 같은 방식을 사용합니다:

3.1. 데이터 전송 및 저장

Kafka는 데이터를 디스크에 기록하여 내구성을 보장합니다. 메시지는 디스크에 저장된 후, Consumer가 데이터를 읽으면 해당 메시지가 오프셋을 기반으로 처리됩니다. Kafka는 데이터를 여러 브로커와 파티션에 분산하여 저장합니다.

3.2. 메시지의 내구성

Kafka는 데이터의 내구성을 보장하기 위해 복제(replication) 기능을 제공합니다. 각 파티션은 하나 이상의 복제본을 두어, 브로커가 다운되더라도 데이터를 손실 없이 복구할 수 있습니다. 각 파티션은 최소 1개의 리더와 여러 개의 팔로워를 가질 수 있습니다.

3.3. 메시지 소비의 특성

Kafka의 메시지는 일관된 처리를 보장합니다. 각 Consumer는 오프셋을 관리하여, 메시지를 중복 없이 읽고, 실패한 경우 다시 처리할 수 있도록 합니다. 또한, Kafka는 소비자 그룹을 지원하여, 여러 소비자가 병렬로 데이터를 처리할 수 있도록 합니다.

4. Kafka의 데이터 흐름

Kafka에서 데이터 흐름은 다음과 같습니다:

  1. Producer가 데이터를 생성하여 Kafka의 토픽에 전송합니다.
  2. Kafka는 데이터를 파티션에 분산하여 저장하고, 각 파티션은 브로커에 저장됩니다.
  3. Consumer가 데이터를 읽고 처리합니다. 각 Consumer는 특정 토픽파티션을 구독하여 데이터를 처리합니다.
  4. Kafka는 오프셋을 관리하여 소비자가 읽은 데이터를 추적하고, 실패한 경우 다시 처리할 수 있게 합니다.

5. Kafka의 성능과 확장성

Kafka는 고성능 분산 시스템으로, 다음과 같은 방법으로 성능과 확장성을 제공합니다:

5.1. 파티셔닝(Partitioning)

Kafka는 파티션을 사용하여 데이터를 분산 저장하고, 각 파티션을 여러 브로커에 분배하여 성능을 최적화합니다. 각 파티션은 독립적으로 읽고 쓸 수 있으므로, 병렬 처리가 가능합니다.

5.2. 복제(Replication)

복제는 데이터의 가용성을 높이고 장애 복구를 지원합니다. Kafka는 각 파티션에 대해 여러 복제본을 유지하며, 브로커가 장애를 일으켜도 다른 복제본을 통해 데이터의 가용성을 보장합니다.

5.3. 소비자 그룹(Consumer Group)

Kafka는 소비자 그룹을 지원하여 여러 소비자가 병렬로 데이터를 처리할 수 있도록 합니다. 각 소비자는 특정 파티션에 대한 데이터를 독점적으로 읽으며, 이를 통해 높은 처리 성능을 제공합니다.

6. Kafka의 활용 사례

Kafka는 다양한 실시간 데이터 처리 환경에서 널리 사용됩니다. 주요 활용 사례는 다음과 같습니다:

6.1. 로그 수집 및 모니터링

Kafka는 로그 데이터를 수집하고 실시간으로 처리하는 데 유용합니다. 다양한 서비스에서 발생하는 로그 데이터를 Kafka로 수집하고, 이를 실시간으로 분석하거나 저장하여 모니터링할 수 있습니다.

6.2. 실시간 데이터 스트리밍

Kafka는 대규모 실시간 데이터 스트리밍 시스템에 적합합니다. 예를 들어, 금융 거래, 소셜 미디어 데이터, IoT 센서 데이터 등 실시간 데이터 흐름을 처리하는 데 Kafka가 사용됩니다.

6.3. 이벤트 소싱(Event Sourcing)

Kafka는 이벤트 소싱 패턴을 구현하는 데 유용합니다. 이벤트 소싱은 시스템 상태 변화를 이벤트로 기록하고, 이를 기반으로 상태를 복원하는 방식입니다. Kafka는 이벤트를 안정적으로 기록하고, 이를 다른 서비스에서 읽어 들여 처리하는 데 활용됩니다.

6.4. 데이터 파이프라인

Kafka는 데이터 파이프라인의 핵심 구성 요소로 사용됩니다. 데이터가 여러 시스템 간에 실시간으로 흐르도록 하고, 다양한 데이터 처리 및 분석 작업을 병렬로 실행할 수 있습니다.

7. Kafka의 운영 및 관리

Kafka의 운영은 여러 측면에서 신경을 써야 합니다:

7.1. 모니터링

Kafka 클러스터의 상태를 모니터링하고, 시스템 성능과 장애를 예방하는 것이 중요합니다. Kafka는 JMXKafka Manager와 같은 도구를 통해 클러스터의 성능을 모니터링할 수 있습니다.

7.2. 보안

Kafka는 기본적인 보안 기능을 제공하며, 인증, 권한 부여, 암호화 등을 통해 데이터를 보호할 수 있습니다. SSL/TLS를 이용한 통신 암호화, SASL을 이용한 인증, ACL을 이용한 접근 제어가 지원됩니다.

7.3. 클러스터 확장

Kafka 클러스터는 쉽게 확장할 수 있습니다. 새로운 브로커를 추가하여 더 많은 파티션과 복제본을 처리할 수 있으며, 클러스터의 확장은 서비스의 중단 없이 이루어질 수 있습니다.

8. 결론

Apache Kafka는 대규모 분산 시스템에서 실시간 데이터 스트리밍을 처리하는 강력한 도구입니다. 높은 성능, 확장성, 내구성, 그리고 다양한 활용 사례로 인해 많은 기업들이 Kafka를 데이터 파이프라인과 실시간 데이터 처리 시스템의 핵심 요소로 채택하고 있습니다. Kafka는 분산형 메시징 시스템과 이벤트 소싱, 실시간 분석 등 다양한 분야에서 활용될 수 있으며, 이를 통해 대규모 데이터를 효율적으로 처리하고 관리할 수 있습니다.

태그: ,

카테고리:

업데이트:

댓글남기기