본문 바로가기
study/geultto

[Apache Kafka] 아파치 카프카 : 그래서 왜 쓰는 건데?

by 고기만두(개발자) 2024. 1. 20. 19:33
728x90
반응형

[타겟 독자]

그래서 카프카를 왜 쓰는지, 어떤 장점이 있는지가 궁금한 사람

(이론 습득 정도는 별로 상관이 없을 것 같다)


대용량 처리에 대한 지식을 가지고 싶었고 카프카 인강을 수강하고 있다.

수강후기는 https://career-gogimandu.tistory.com/222

 

Apache Kafka 시리즈 - 초보자를 위한 아파치 카프카 강의 v3 후기

글또 9기 * 유데미 콜라보 이벤트로 인터넷 기술 강의 2종을 무료로 수강할 수 있는 기회가 생겼다. 궁금했지만 한번도 배워볼 수 없었던 카프카 강의를 그 중 하나로 선택하였다. 대용량 데이터

career-gogimandu.tistory.com

 

그런데 강의를 듣고 이론을 머리에 집어넣고 실습을 따라하다 보니 근본적으로 궁금했다.

그래서 왜 카프카를 쓰는데?

사람들이 왜 카프카에 주목하는데?

 

 

기술적인 이해도 당연히 중요하다, 

(그래서 기본적인 사용방법이나 기본 개념에 대한 글도 따로 쓸 것이다)

그런데 그 기술은 분명 '어떤 문제점'을 해결하기 위해 등장하였고,

많은 사람들이 가려워하는 부분을 긁어주었고,

그래서 인기를 끌게 된 것이라고 생각한다.


아파치 카프카는 링크드인이 개발한 오픈소스 메시지 브로커 프로젝트이고~~

로 글을 시작할거면 내 글보단 책이나 다른 블로그나 하다못해 위키백과를 보는게 낫지 않을까.

그런 글을 쓸 시간에 나는 다른걸 보거나, 취미활동을 하는게 더 나을 수도 있다고 생각한다.

728x90

원래 모든 사업의 초기모델은 심플하다.

유저도 적고, 화면/테이블 수도, 트랜잭션도 많지 않을 것이다.

 

그런데 비즈니스가 커지고, 서비스가 많아지면 시스템 설계가 갈수록 매우 복잡해진다.

그리고 이 시스템들간 오가는 데이터를 관리하는 데에 점점 어려움이 생긴다.

데이터가 오가는 프로토콜 방식도 신경써야 하고,

포맷이 바이너리인지 json인지 등등이 서로 다를 수도 있다.

데이터가 어떤 스키마 형식을 가지는지,

어떻게 변하는지(값의 추가 수정 삭제 등)에 대한 관리의 문제도 생긴다.

점점 사용자가 많아지고 서비스도 커지면서 부하도 많아진다.

이건 대학생 시절 시스템 통합 실습 시간에도 배운 적이 있다.

 

복잡한 시스템
하나 하나 덧대다가 이렇게 복잡해졌어요

다시 말해,

end-to-end 연결을 계속 하다가는

1. 연결이 갈수록 거미줄 마냥 복잡해진다.

2. 문제점이 생기면 관련된 여러 시스템을 까보고, 모니터링 해야 한다.

3. 시스템 하드웨어 증설 및 유지보수의 필요성이 생길 때, 점점 대수도 많아지고 작업도 복잡해진다.

4. 연결된 각 시스템이 제멋대로 만들어질 경우 데이터 파이프라인의 관리와 통합도 복잡해진다

 

정도로 문제점을 요약할 수 있겠다.

 

 

그래서

모든 시스템으로 데이터를 실시간 전송할 수 있고, 확장성도 좋은 허브가 될 시스템의 필요성이 대두되었다.

 

카프카 개발팀은 그래서 

  • 모든 시스템으로 데이터를 전송하자!
  • 실시간 처리가 가능하게 하자!
  • 확장성이 좋은 시스템을 만들자!
  • 이벤트나 데이터의 흐름을 중앙에서 관리하자!

라는 목적을 가지고 카프카를 만들게 된 것 같다.

내 장점이 뭔지 알아
출처 - 최고심

실제로 카프카의 가장 큰 장점은

  • 분산형이고, 회복력 있는 아키텍처: 분산 아키텍처를 기반으로 하여 데이터의 안정적인 분산과 처리를 제공한다. 그리고 시스템을 완전히 종료하지 않아도 클러스터에 여러 브로커를 추가하거나 노드를 확장하는 등, 업글/정비하는 데에 문제가 없다.
  • 수평적 확장성 : 브로커를 추가하고 확장하는 데에 문제가 없고, 대용량 메시지를 처리할 수 있다. 또한 클러스터를 확장하면서도 선형적으로 성능이 향상되어, 비즈니스의 확장성 요구를 충족시킬 수 있다.
  • 고성능 : latency 10ms 내외의 사실상의 실시간 시스템이다. 수많은 이벤트를 실시간으로 처리하고 대용량의 데이터를 안정적으로 저장할 수 있어, 대규모 데이터 환경에서도 우수한 성능을 제공한다. 

end to end카프카 중앙집중형

 

카프카라는 중앙의 멋진 허브를 통해서, 모든 이벤트와 데이터 흐름이 중앙에서 관리될 수 있게 되었다.

그리고 기존의 end-to-end 시스템에 비해 훨씬 간결하고 정리된 (그림만 봐도 느껴지는) 구조를 가지게 되었다.

 

그 외에도 비즈니스적으로도 많은 장점을 가진다.

  • 이벤트 소싱(Event Sourcing) 및 메시지 기반 아키텍처: 이벤트 소싱 패턴을 구현하여 시스템 상태의 변경 이력을 기록하고 추적할 수 있다. 그리고 메시지 기반 아키텍처를 채택하여 다양한 시스템 간 통합 및 비동기 통신을 간편하게 구현할 수 있다.
  • 실시간 스트리밍 및 처리: 카프카는 스트림 처리를 위한 Kafka Streams API를 제공하여 실시간으로 데이터를 처리하고 분석할 수 있고, 이를 통해 비즈니스 인텔리전스와 실시간 의사 결정에 활용할 수 있다.
  • 생태계의 다양성: 여러 다양한 도구 및 라이브러리들이 카프카와 통합되어 있고, 이를 활용하여 데이터 처리, 모니터링, 관리 등을 효과적으로 수행할 수 있다. 실제로 자바 기반으로 라이브러리를 가지고 와서 사용하기에 어렵지 않았다.
  • 연속적인 데이터 흐름의 처리:  실시간으로 발생하는 데이터 스트림을 처리하고 저장하는 데 탁월한 성능을 보여주어, 빠르게 변화하는 비즈니스 요구사항에 대응할 수 있다.
  • 다양한 사용 사례 지원: 로그 및 이벤트 기록, 모니터링, 통계 수집, 사물인터넷(IoT) 등 다양한 분야에서 활용될 수 있어, 다양한 비즈니스 도메인에서 사용할 수 있다.
반응형

 

쇼핑몰로 예시를 들어보자면

  • 웹사이트에서 벌어지는 조회, 주문, 결제 같은 이벤트
  • 상품의 가격 값을 변동하는 관리자의 행동
  • 물건값 결제를 위해 금융기관과의 통신
  • 사용자들의 페이지 반응

같은 모든 데이터 스트림이 생성되고 카프카에 전송된다. 그리고 카프카를 거쳐서

  • 데이터가 데이터베이스에 저장되고
  • 이벤트가 분석계로 들어가고
  • 결제 및 배송에 관련하여 파라미터가 전송되고
  • 반응이 로그로 남을 것이다.

그러면 카프카는 어떻게 중앙 집중형 허브가 될 수 있었나?

실전화기

메시지를 주고받는 통신의 과정에서,

기존의 방식대로라면 참여하는 개체가 많아질 수록 각 개체를 연결해줘야 해서 확장성에 어려움을 갖게 된다.

(실 전화기를 생각하면 된다... 이걸 10명 100명이 사용한다 치면...땀난다;;)

그리고 누군가에게 장애가 나면 또 일일이 그걸 처리해줘야 한다.

또한 , 메시지의 용량이 커질 수록 데이터를 모아 전달함에 있어 성능상 이슈가 생길 수밖에 없다.

 

그래서 카프카는 pub/sub 모델을 사용한다.

프로듀서 (송신자) 와 컨슈머 (수신자) 를 분리하여, 보내는 사람은 보내는 것만, 받는 사람은 받는 것만 하게 하고

중간의 파티션이 이를 전달 및 기록하게 하였다.

또한, 하나의 토픽에 여러 프로듀서/컨슈머가 동시에 접근이 가능하다.

카프카 통신방식
카프카를 이해하는 단 한장의 이미지로 나는 이걸 고르겠다.

또한, 무슨 일이 생겨서 파티션 하나가 터지거나 처리가 늦어져도 다른 파티션이 살아있으면 그 파티션이 일을 해줄 거고.

일정 보관 주기 동안 그 메시지는 카프카의 저장공간에 안전하게 보관되어 안정성도 높다.

파티션도 여러개 설정하여 사용할 수 있어 확장성도 좋다.

그 파티션을 구성하는 요소 중 zookeeper 가 중요한 위치를 차지했는데,

곧 fade out될 기술이라 뭐 굳이 여기서까지 다루진 않아도 될 것 같다.

 

아파치 카프카, ‘주키퍼(ZooKeeper)’ 제거한다

분산 이벤트 스트리밍 플랫폼 ‘아파치 카프카(Apache Kafka)’의 메타데이터 관리 도구 ‘주키퍼(ZooKeeper)’가 단계적으로 제거될

www.ciokorea.com

 

 


Outro. 다른말론 사족.

 

처음에는 카프카의 리밸런싱과 운영체제에 관한 글을 쓰고 싶었는데

마침 글또 제출봇으로 검색해보니 비교적 최근에 리밸런싱에 관한 글을 쓰신 분이 계셨다.

굳이 같은 주제로 정면 경쟁을 하고 싶지 않았다.

 

그리고 최근 글또에서 진행한 글쓰기 세미나 1회차를 수강했는데,

듣다보니 글의 주제의식을 뾰족하게 가져가는 것이 좋겠다는 생각을 하게 되었다.

그래서 chatGPT에게도 처음에는 카프카에 대한 글을 써줘 ! 로 일을 시키다가

(진짜 chatGPT가 글을 잘 쓴다면 그대로 정리해서 써볼 생각도 있었다. 현생이 최근 많이 바빴기 때문),

점점 주제를 뾰족하게 이리 저리 돌려보게 되었다.

돌리다 보니 그래서 이걸 '왜' 쓰게 되었는지에 대한 글이 쓰고 싶어졌고,

쓰다보니 네트워크 / 운영체제 에 대한 지식도 더 깊이있게 들어가보고 싶어졌다.

이래서 공부는 끝이 없는 걸까.

 

+ 글쓰기 세미나를 통해 시간관리 팁에 대해서도 배울 수 있었는데,

오늘은 단적인 목표로 놀거 다 놀다가 (....)

아시안컵 축구 경기를 보기 전까지 바짝 집중해서 끝내본다 라는 목표를 가지고 글을 썼다.

 

세미나 과제/후기도 내일 마저 작성해야지.

728x90
반응형

댓글