카프카는 도대체 어떻게 사용하는 걸까?

반응형
반응형

카프카는 어떤것일까 내가 알기로는 카프카는 대규모 트래픽 환경에서 사용한다고 한다.
생각해야 할것이 진짜 카프카가 대규모 트래픽 환경에서 좋은걸까? 좋다면 왜 좋은지 알고 있어야 한다고 생각한다.
사가패턴이며, 이벤트 소싱이며 이런거 보다 진짜 중요한건 카프카가 왜 필요한지 여부에 대해 공부를 해야 한다고 생각한다.
모든 기술이 그렇듯 다 탄생 배경이 있다. 그렇다는건 어긋난 방식으로 사용한다면 오히려 성능이 떨어질 수 도 있다는 뜻이 된다.
이 글에서 어떻게 사용하는지에 대해는 자세하게 다루지 않을 수 도 있다. 이것도 보다 중요한건 왜 쓰고 언제 쓰는지가 훨씬더 중요하다 생각한다. 이제 본격적으로 시작해보자.

카프카의 탄생 배경

  1. 대규모 데이터 처리 필요성: 대규모 분산 시스템에서의 로그 처리와 실시간 데이터 스트리밍에 대한 필요성이 커지면서, 여러 시스템 간의 데이터 전송 및 수집을 효율적으로 처리할 수 있는 도구가 필요해졌습니다. 특히, 페이스북과 링크드인 같은 대형 기술 기업들은 로그와 이벤트 데이터를 실시간으로 수집하고 분석하는 시스템을 구축하려고 했습니다.
  2. 기존 시스템의 한계: 기존의 메시징 시스템들, 예를 들어 JMS(Java Message Service)나 AMQP(Advanced Message Queuing Protocol)는 분산 처리 및 확장성에 있어 한계가 있었습니다.

구성 요소

1. Producer (생산자)(필수)

  • 왜 사용하나: 데이터를 생성하고 Kafka에 메시지를 전송하기 위해.
  • 언제 사용하나: 외부 시스템(예: API, DB, 로그 시스템)에서 발생하는 데이터를 Kafka로 스트리밍할 때.
  • 주요 역할: 특정 토픽에 메시지를 보내고, 파티션 전략 등을 설정.
  • 개발자가 하는 일:
    • Kafka Producer 설정 및 생성.
    • 메시지 직렬화(Serialization) 설정.
    • 파티셔닝 전략 설정(필요 시).
    • 전송 시 안정성 설정(ack, retries 등).

2. Consumer (소비자)(필수)

  • 왜 사용하나: Kafka에 저장된 데이터를 읽어오기 위해.
  • 언제 사용하나: 데이터를 처리하거나, 외부 시스템으로 전달해야 할 때(DB 저장, 알림 전송 등).
  • 주요 역할: 특정 토픽 및 파티션에서 메시지를 읽고 처리.
  • 개발자가 하는 일:
    • Kafka Consumer 설정 및 생성.
    • 메시지 역직렬화(Deserialization) 설정.
    • Consumer Group 설정 및 오프셋 관리.
    • 병렬 소비 및 메시지 처리 로직 작성.

3. Topic (토픽)(필수)

  • 왜 사용하나: 메시지를 구분하고, 데이터 스트림을 논리적으로 나누기 위해.
  • 언제 사용하나: 서로 다른 데이터 스트림(로그, 주문 정보, 사용자 이벤트 등)을 구분할 때.
  • 개발자가 하는 일:
    • 적절한 토픽 생성 및 관리.
    • 토픽 파티션 및 복제 설정.
    • Retention(보관 기간) 및 Cleanup 정책 설정.

4. Partition (파티션)(중요)

  • 왜 사용하나: 데이터의 병렬 처리와 확장성을 위해.
  • 언제 사용하나: 높은 처리량이 필요할 때, 여러 Consumer가 병렬로 데이터를 읽을 수 있도록 하기 위해.
  • 개발자가 하는 일:
    • 파티션 개수 설정(처리량 및 Consumer 수에 맞게).
    • 키 기반 파티셔닝 전략 설정(필요한 경우).

5. Consumer Group (소비자 그룹)(중요)

  • 왜 사용하나: 여러 Consumer가 하나의 토픽을 병렬로 읽으면서 중복 소비를 방지하기 위해.
  • 언제 사용하나: 하나의 데이터 스트림을 여러 개의 인스턴스에서 처리할 때(확장성).
  • 개발자가 하는 일:
    • Consumer Group을 구성해 안정적으로 데이터를 병렬 소비.
    • 오프셋 커밋 전략 설정(자동/수동 커밋).

6. Kafka Streams (카프카 스트림)(필요 시)

  • 왜 사용하나: Kafka 데이터를 실시간으로 가공, 집계, 변환하기 위해.
  • 언제 사용하나: 실시간 데이터 파이프라인에서 데이터를 필터링하거나 변환, 상태 기반 연산 등을 할 때.
  • 개발자가 하는 일:
    • 스트림 프로세싱 로직 작성.
    • KTable, KStream을 사용해 실시간 데이터 처리.
    • Join, Aggregate 같은 복잡한 연산 처리.

7. Kafka Connect (카프카 커넥트)(필요 시)

  • 왜 사용하나: 외부 시스템(DB, 클라우드 스토리지 등)과 Kafka 간의 데이터 송수신을 쉽게 하기 위해.
  • 언제 사용하나: Kafka로 데이터를 수집하거나 Kafka 데이터를 외부 시스템으로 내보낼 때.
  • 개발자가 하는 일:
    • 커넥터 설정 및 배포.
    • 커스텀 커넥터 작성(필요한 경우).
    • Kafka Connect의 오프셋 및 오류 처리 정책 설정.

8. KRaft (Kafka Raft Protocol)(알아두면 좋은 정도)

  • 왜 사용하나: Zookeeper 없이 Kafka 클러스터 관리 가능.
  • 언제 사용하나: 최신 Kafka에서 Zookeeper 없이 더 간단한 운영을 원할 때.
  • 개발자가 하는 일:
    • Kafka 설정 시 KRaft 모드 활성화.
    • 클러스터 설정 및 리더 관리.

9. Zookeeper (주키퍼) — (운영/배포 시 중요)

  • 왜 사용하나: Kafka 클러스터의 메타데이터를 관리하고, 브로커 간 조정을 위해.
  • 언제 사용하나: Kafka 클러스터 구성 시 브로커 상태 관리, 파티션 리더 선출, 컨슈머 오프셋 관리 등을 할 때.
  • 주요 역할:
    • Kafka 클러스터의 브로커 상태 모니터링.
    • 파티션 및 리더 선출 관리.
    • 토픽 및 컨슈머 오프셋 메타데이터 저장.
  • 개발자가 하는 일:
    • Zookeeper 설정 및 배포.
    • Kafka와의 연결 설정(KAFKA_ZOOKEEPER_CONNECT).
    • Zookeeper 상태 모니터링 및 장애 조치.

10. Broker (브로커)(운영/배포 시 중요)

  • 왜 사용하나: Kafka의 핵심 구성 요소로, 메시지를 저장하고 전달.
  • 언제 사용하나: Kafka 클러스터를 구성할 때.
  • 개발자가 하는 일:
    • 브로커 설정 및 모니터링.
    • 파티션 리더 및 팔로워 관리.
    • 성능 튜닝 및 장애 조치.

정리하면
producer, consumer, topic은 반드시 알아야 하고
partition, consumer group이 두개는 중요한 개념이구
kafca connect, kafca stream 이 두개는 필요할때
주키퍼랑 브로커는 운영/배포시에 중요하고
kRaft는 알아두면 좋다고 한다.

 

 

++ 카프카 연동이 안 되서 이것저것 시도를 해봤는데 결론은 조금 허무했다.
내가 시도한것들
1. 메이븐 설치 -> 안됨
2. 주키퍼 버전 다운 -> 안하긴함 튜터님이 해보라고 했지만 다른거 먼저 듣는다고..
3.  도커 데스크탑 업데이트 -> 나는 이걸로 해결하려고 안했다구욧... 이게 왜 되냐...
아님 컨테이너 정리를 했었는데.. 이것 때문인가 아... 모르겠다.
심지어 스택 오버플로우 글도 있었네...

 

Kafka Server issue in Docker

I am using docker for my sample Spark + Kafka project in windows machine. I am facing WARN ClientUtils: Couldn't resolve server kafka:9092 from bootstrap.servers as DNS resolution failed for kafka ...

stackoverflow.com

 

반응형

'국비지원 (스파르타)' 카테고리의 다른 글

카프카 - config 동적 할당 (json 매핑)  (1) 2025.03.11
ACID vs BASE  (0) 2025.03.07
스프링 시큐리티(인증)  (0) 2025.03.05
스프링 이벤트  (0) 2025.03.04
DDD와 샤딩(feat.gpt)  (0) 2025.02.28

댓글

Designed by JB FACTORY