본문 바로가기
  • 시 쓰는 개발자
1일 1개념정리 (24년 8월~12월)/네트워크, 클라우드

1일1개 (100) - 카프킥!!

by poetDeveloper 2024. 12. 8.

1일 1개념정리 24.08.09.금 ~ 

 

큰 결정에 큰 동기가 따르지 않을 때도 있다. 하지만 큰 결심이 따라야 이뤄낼 수 있다.

무조건 무조건 1일 1개의 개념 정리하기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!


#100. Kafka

"대규모 데이터 처리"라는 맥락에서 빠지지 않는 툴이 있는데, 바로 카프카다. 진입장벽이 높아보여서 어떻게 해야할지 시도조차 못했는데, 일단 이론 정리부터 시작해보려 한다. 기술적인 내용보다 "어떤 맥락으로" 대규모 데이터를 처리하는지 알아보려 한다.

 

Karfka 구성 요소

카프카 자체는, 대규모 데이터 처리를 위한 "분산 메시지 브로커"이다. 실시간 데이터 스트리밍을 처리하고 데이터를 수집하고 저장하여 분석한다. 실제로 링크드인 같은 경우에는 카프카로 하루에 수십TB 데이터를 처리하여 실시간 추천 서비스를 제공한다.

 

주요 구성요소는 다음과 같다.

  • Producer : 데이터를 생성하고 카프카로 전송하는 역할이다. ex. 애플리케이션 로그
  • Broker : 데이터를 저장하고 분산 처리한다. 이때 각 노드가 브로커 역할을 한다.
  • Topic  : 데이터를 분류하기 위한 "논리적 단위"다. 각 토픽은 여러 파티션으로 나뉘어 병렬 처리가 가능하다.
  • Consumer : 데이터를 읽고 처리한다. ex. DB 저장, 실시간 분석 등
  • Zookeeper (또는 KRaft) : 브로커 메타데이터를 관리하고 클러스터 상태를 모니터링한다.

→ 내 생각에 핵심은 생산자와 소비자를 분리했다는 것이다. 생산자는 데이터를 받는 쪽이고, 소비자는 데이터를 처리하는 쪽이다. 생산자가 데이터를 보내는 동안 소비자가 빨리 처리하지 못해도 문제가 전혀 없다. 다만 데이터를 중간에 안전하게 저장해두고, 소비자가 준비되면 가져가게 한다. = 마치 택배회사가 배송 물품을 창고에 보관해두고, 배달원이 여유 있을 때 물건을 가져가는 방식이다.

 

쉽게 설명

정확히 어떻게 대규모 처리를 하는 걸까 ?

 

쉽게 설명하자면, 추석때 고속도로를 정리해서 목적지로 보내주는 교통관리 시스템이다. 데이터가 쏟아지는 경우를 생각해보자. 웹사이트에서 클릭할 때, 스마트폰의 앱, 공장 센서데이터 등에서 참 많은 데이터가 발생하는데 이런 데이터가 너무 많아서 단순한 시스템으로는 처리하기 어렵다. 

→ 그래서 카프카가 "데이터를 중간에서 모으고, 정리하고, 전달하는 역할"을 한다. 그러면 흘러오는 데이터를 바로바로 처리하는데 유용한 것이다. 비유하면 이렇다.

  • 고속도로 : 데이터가 지나가는 길
  • 차선 : 파티션. 즉 데이터를 여러 "차선"( = 파티션)으로 나눠서, 막힘없이 빠르게 보내줌.
  • 톨게이트 직원 : 누가 어떤 데이터를 보내는지 기록하고 정리함

 

Q.중간에 카프카가 정보 받아 확인하는 과정이 있는데, 더 느려지지 않을까요 ??

이는 카프카 처리 방식에 대해 알아야한다. 카프카는 설계 자체가 데이터를 효율적으로 처리하는데 최적화되어 있다.

  1. 분산 처리 : 데이터를 여러 "파티션"에 나눠 저장하므로 여러 컴퓨터가 동시에 데이터를 처리할 수 있다. 즉, 고속도로 차선 여러개 둬서 데이터(자동차)를 병렬 처리함
  2. Batch 처리로 효율성 up : 카프카는 데이터를 "묶음(Batch)"으로 처리한다. 즉 한 번에 100건의 데이터를 묶어서 보내면, 네트워크 비용과 전송 속도를 크게 줄일 수 있다.
  3. 디스크 기반 설계 : 데이터를 메모리가 아니라 디스크에 저장하지만, 고성능 디스크와 최적화된 읽기/쓰기 방식으로 빠르게 동작한다. 그리고 디스크에 순차적으로 데이터를 기록하기 때문에 속도 저하가 거의 없다.

 

카프카는 데이터를 어떻게 처리할까?

Step 1. 생산자가 데이터 전송

"사용자가 상품 A를 클릭했습니다" 라는 데이터가 카프카로 전송 → 카프카는 데이터를 적절한 토픽에 기록, 데이터가 디스크에 저장

 

Step 2. 데이터 파티셔닝

데이터를 토픽 안의 여러 파티션으로 나눔 → 파티션이 많을수록 여러 컴퓨터가 데이터를 동시에 처리할 수 있어서 속도가 빨라짐. 이때 사용자 ID처럼 특정 기준에 따라 데이터를 파티션에 모아두면 처리 효율이 매우 높아짐.

 

Step 3. 소비자가 데이터를 가져감

데이터를 필요한 곳으로 전달하는데, 소비자가 원하는 속도에 맞게 처리 가능함. 실시간으로 데이터가 필요하면 일단 바로 가져가고, DB에는 느리게 저장할 수 있다.

 

Q. 만약 카프카 없이 처리한다면 어떤 문제가 있나 ?

  1. 즉각적인 처리 : 데이터가 오면 바로 처리해야 하기 때문에 병목현상이 발생
  2. 장애 시 데이터 손실 : 데이터를 처리하는 시스템이 고장나면 데이터가 유실될 수 있다.
  3. 확장성 부족 : 데이터가 많아지면 시스템 전체가 느려질 가능성이 매우 높다.
반응형