새소식

반응형
ETC/kafka

카프카 튜토리얼- 따라해보며 이해하기

  • -
반응형

카프카란 무엇인가?

아파치 카프카(Apache Kafka)는 대용량 데이터 스트리밍을 처리하기 위한 오픈 소스 플랫폼으로, 분산형 메시지 큐 시스템이다. 2010년에 LinkedIn에서 개발된 후, 아파치 소프트웨어 재단에 기부되어 현재까지 널리 사용되고 있다. 카프카는 데이터 흐름을 관리하고 실시간 처리를 가능하게 하여, 다양한 데이터 소스와 애플리케이션 간의 연결을 효율적으로 지원한다.

 

 

카프카의 주요 구성요소

  1. 프로듀서(Producer): 데이터를 카프카 클러스터에 전송하는 역할을 한다.
  2. 컨슈머(Consumer): 카프카에서 데이터를 읽어오는 역할을 한다.
  3. 브로커(Broker): 카프카 클러스터를 구성하는 서버로, 데이터를 저장하고 프로듀서와 컨슈머 간의 메시지를 중개한다.
  4. 주제(Topic): 메시지가 저장되는 카테고리로, 각 주제는 여러 파티션으로 나눌 수 있다.

 

카프카 활용의 장점

  1. 높은 확장성: 카프카는 분산형 아키텍처로 설계되어 있어, 시스템의 수요가 증가할 때 손쉽게 서버를 추가할 수 있다.
  2. 내결함성: 데이터가 여러 브로커에 복제되어, 일부 서버가 다운되더라도 데이터 손실 없이 운영될 수 있다.
  3. 실시간 데이터 처리: 카프카는 고속의 데이터 스트리밍을 지원하므로, 실시간 데이터 분석과 처리가 가능하다.
  4. 다양한 언어 지원: 카프카는 다양한 프로그래밍 언어와 플랫폼에서 사용할 수 있어, 유연성이 높다.

 

카프카 활용의 단점

  1. 복잡성: 초기 설정과 운영이 복잡할 수 있으며, 특히 분산 시스템에 익숙하지 않은 개발자에게는 어려움이 있을 수 있다.
  2. 메시지 순서 보장 문제: 파티션 내에서는 메시지 순서를 보장하지만, 여러 파티션에 걸쳐서는 순서가 보장되지 않는다.
  3. 관리 부담: 카프카 클러스터의 유지 관리가 필요하며, 모니터링 및 조정 작업이 필요할 수 있다.
  4. 자원 소모: 대량의 데이터를 처리하는 만큼, 하드웨어 자원 소모가 클 수 있다.

 

카프카 활용 방안

 

1. 실시간 로그 수집

 

 

2. 이벤트 드리븐 아키텍처

 

 

3. IoT 데이터 수집 및 분석

4. 머신러닝 모델 운영

 

 

직접 따라하며 설치해보기

 

1. 카프카 다운로드

먼저 아래의 주소를 통해 카프카를 다운로드 한다. 테스트 해볼 버전은 스칼라 2.12 -카프카 2.5.0버전이다.

Apache Kafka

 

2. 주키퍼 실행

카프카가 실행되기 위해서는 주키퍼가 실행되어야 한다. 주키퍼는 분산 시스템에서 여러 노드 간에 데이터를 일관되게 관리하고, 노드 간의 동기화와 상태 관리를 쉽게 할 수 있도록 도와준다. 리더 선출, 구성 정보 관리, 상태 모니터링, 메타 데이터 저장 등의 작업을 효율적으로 수행할 수 있다.

우선 루트 디렉토리에서 아래 명령어로 주피터 서버를 실행시킨다.

 

Window

.\\bin\\windows\\zookeeper-server-start.sh config/zookeeper.properties

 

Mac

bin/zookeeper-server-start.sh config/zookeeper.properties

 

 

위 사진과 같이 Zookeeper 서버가 실행된다.

 

3. 카프카 실행

그 다음, config 디렉토리 내 server.properties의 log.dir을 설정해 주어야한다.

log.dirs={데이터를 담을 디렉토리 설정}

그 후, 아래 명령어를 통해 카프카도 실행시킨다. server.properties의 값들을 조정하여 설정을 변경할 수 있다.

 

Window

bin\\windows\\kafka-server-start.bat config\\server.properties

 

Mac

bin\\kafka-server-start.sh config\\server.properties

 

 

실행한다면 위와 같이 카프카 브로커가 실행된다.

 

4.토픽 생성

토픽을 생성하기 전에, 데이터가 통신되는 과정을 이해해야 한다. 데이터 통신 과정은 아래와 같다.

데이터 통신 과정:

  • 프로듀서는 데이터를 Kafka의 특정 토픽에 전송한다.
  • 각 토픽은 여러 개의 파티션으로 나뉘어 있으며, 데이터는 파티션에 저장된다.
  • 컨슈머는 해당 토픽의 데이터를 가져오고, 파티션의 오프셋을 기반으로 데이터 처리가 이루어진다.
  • 컨슈머가 여러 개라면, 컨슈머 그룹 내 컨슈머는 파티션을 나누어 가져와 병렬 처리할 수 있다.

이 구조를 활용하면 데이터를 효율적으로 전송하고, 대규모 데이터를 병렬로 처리할 수 있어 성능을 극대화할 수 있다.

아래의 명령어를 통해 토픽을 생성한다.

 

Windows

 bin/windows/kafka-topics.bat --create  --bootstrap-server localhost:9092  --topic hello.kafka

 

Mac

bin/kafka-topics.sh --create  --bootstrap-server localhost:9092  --topic hello.kafka

 

 

 

—describe옵션을 통해 현재 토픽의 상태를 확인 할 수 있다.

5.프로듀서 생성

간단하게 문자열 데이터를 콘솔창에서 실시간으로 입력받아 카프카에 전송하는 프로듀서를 생성한다.

 

Windows

bin/windows/kafka-console-producer.bat --bootstrap-server localhost:9092 --topic hello.kafka

 

Mac

bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic hello.kafka

 

 

6.컨슈머 생성

현재 콘솔창을 통해 데이터를 읽을 수 있는 컨슈머를 만들어 토픽과 연동합니다.

 

Windows

bin/windows/kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic hello.kafka --from-beginning

 

Mac

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic hello.kafka --from-beginning

 

 

위의 사진들과 같이 console 프로듀서를 통해 데이터를 지속적으로 보내면 console 컨슈머에서 데이터를 받아볼 수 있다.

 

카프카 주요 설정 및 특징

  • 파티션 (Partition)
    • 파티션1대1로 하나의 컨슈머에게만 할당된다.
    • 파티션의 개수는 늘릴 수 있지만, 줄일 수는 없다.
    • → 제거된 Partition의 Segment를 재배치 해줘야한다. Segment를 재배치 하는 리소스가 복합적으로 너무 방대해서, 해당 기능을 제공하고있지 않다.
  • 오프셋 (Offset) 특징
    • 각 메시지는 오프셋을 가지며, 이는 컨슈머가 어느 위치까지 데이터를 처리했는지 추적할 수 있게 해준다.
    • 오프셋은 파티션 내에서 고유하며, 데이터 처리의 순서를 보장한다.
  • 멱등성 프로듀서 (Idempotent Producer)
    • 멱등성 프로듀서는 동일한 메시지를 중복 전송하더라도 한 번만 저장되도록 보장한다.
    • enable.idempotence의 다양한 설정들을 활용하여 데이터 중복 문제를 방지할 수 있다.
  • 트랜잭션 프로듀서 (Transactional Producer)
    • 트랜잭션 프로듀서는 여러 메시지를 트랜잭션 단위로 묶어서 처리하며, 전체 성공 또는 전체 실패를 보장한다.
    • 이를 통해 데이터 일관성을 유지할 수 있다.

  • 브로커 & 복제 (Broker & Replication)
    • 브로커는 Kafka 클러스터 내에서 메시지를 관리하는 서버입니다.
    • 복제는 데이터를 안정적으로 보관하기 위해 브로커 간에 여러 개의 복사본을 유지하는 메커니즘입니다.
    • 주 복제본(Leader)과 보조 복제본(Follower)으로 구분되어, 장애 시 빠르게 복구 가능합니다.
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.