wisePocket

[Kafka] Apache Kafka가 뭐야? 본문

Kafka

[Kafka] Apache Kafka가 뭐야?

ohnyong 2023. 7. 28. 11:09

처음 보는 용어이다. 뭐하는 것이지?? DB인가? Framework인가? Apache니까 웹서버인가? 

 

여러가지 검색을 했다. 

우선 공식 홈페이지부터

Apache Kafka는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 ​​및 미션 크리티컬 애플리케이션을 위해 수천 개의 회사에서 사용하는 오픈 소스 분산 이벤트 스트리밍 플랫폼입니다.

나 : ???? 뭐라구요?


그들이 특징이라고 써 놓은 핵심 기능들을 살펴본다.

빨간 하이라이트는 내가 이해하지 못한 부분이다. 그냥 다 이해하지 못했다고 보는게 맞다.

하지만 이해한 부분이 하나있다. "풍부한 문서, 온라인 교육, 가이드 튜토리얼, 비디오, 샘플 프로젝트, Stack Overflow에서 배울 수 있다."이 말은 아주 유명한 것이고, 많은 기업들도 관심가지고 있으며 사용하고 있다는 증거이다.

전에 Redis의 개요를 살펴보면서, MongoDB와의 관계를 비교하면서 이해하니 어느정도 감이 잡혔다. 그 배경에는 Oracle을 처음에 배울때가 생각난다. DB라는 것 자체를 처음 접했을때 아무것도 이해 할 수가 없었지만, 이게 뭐다라고 정확하게 지금도 정의하기 어렵고, 부정확한 개념들이 있기 때문에 가르칠 실력은 되지 않는다. 하지만 프로젝트를 진행하면서 데이터를 테이블에 또는 MongoDB에서는 그것이 컬렉션이고, 어디선 도큐먼트고 어디선 레코드고 어디선 필드인지 구분을 하기 시작했고, 더해서 어떻게 추가하고 읽고 수정하고 삭제하는지 SQL문을 작성하고, 그것을 다시 요청하고 반환된 DB값을 변수에 저장하고 json으로 변환하고 JQuery 표현으로 HTML에 담아서 사용자 클라이언트에 보여주는지 이 과정을 진행하면서 어느정도 DB의 용도와 대략적인 과정, 사용 시 필요한 코드 등을 파악하게 되었었다.

이 공부는 위와 같은 경험이 필요하다 생각한다. 처음이라 그렇지 어떻게든 하나씩 내가 쉽게 이해해야 한다. 그럼 우선 내가 나를 이해시켜야 되고, 이후엔 내가 누군가에게 알려 줄 수 있을 정도로 쉽게 알려 줄 수도 있어야 한다. 공식문서는 불친절하다. 어쩔수 없다 정확하고 전문적인 정보니까. 겁내지말자 다 알게 되있다.

공식 홈페이지의 Kafka 핵심 포인트이다.

  • 핵심 역량
    • 높은 처리량
      • 대기 시간이 2ms로 짧은 시스템 클러스터를 사용하여 네트워크 제한 처리량으로 메시지를 전달합니다.
    • 확장 가능
      • 프로덕션 클러스터를 최대 1,000개의 브로커, 하루에 수조 개의 메시지, 페타바이트의 데이터, 수십만 개의 파티션으로 확장합니다. 저장 및 처리를 탄력적으로 확장 및 축소합니다.
    • 영구 저장
      • 분산되고 내구성이 있으며 내결함성이 있는 클러스터데이터 스트림을 안전하게 저장합니다.
    • 고가용성
      • 가용 영역에서 클러스터를 효율적으로 늘리거나 지리적 지역에 걸쳐 별도의 클러스터를 연결합니다. 
  • 생태계
    • 내장 스트림 처리
      • 이벤트 시간 및 정확히 1회 처리를 사용하여 조인, 집계, 필터, 변환 등으로 이벤트 스트림을 처리합니다.
    • 거의 모든 것에 연결
      • Kafka의 즉시 사용 가능한 Connect 인터페이스Postgres, JMS, Elasticsearch, AWS S3 등을 포함하여 수백 개의 이벤트 소스이벤트 싱크와 통합됩니다.
    • 클라이언트 라이브러리
      • 다양한 프로그래밍 언어로 이벤트 스트림을 읽고 쓰고 처리합니다.
    • 대형 생태계 오픈 소스 도구
      • 오픈 소스 도구의 대규모 에코시스템: 다양한 커뮤니티 기반 도구를 활용합니다.
  • 신뢰 및 사용 용이성
    • 미션 크리티컬
      • 주문 보장, 메시지 손실 제로, 효율적인 정확히 한 번 처리로 미션 크리티컬 사용 사례를 지원합니다.
      • 수천 개의 조직이 신뢰하는 인터넷 거대 기업부터 자동차 제조업체, 증권 거래소에 이르기까지 수천 개의 조직에서 Kafka를 사용합니다. 500만 회 이상의 고유 평생 다운로드.
    • 방대한 사용자 커뮤니티
      • Kafka는 Apache Software Foundation에서 가장 활발한 5개 프로젝트 중 하나이며 전 세계에서 수백 개의 모임이 있습니다.
    • 풍부한 온라인 리소스
      • 풍부한 문서, 온라인 교육, 가이드 튜토리얼, 비디오, 샘플 프로젝트, Stack Overflow 등

https://kafka.apache.org/

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org


역시나 공식 문서는 무슨소리인건지 하나도모르겠다. 심각한건 이건 공식 홈페이지 메인에 요약하고 요약하고 요약한 한줄짜리 문장인데 이해가 안된다..

이럴땐 나와같이 완전 처음 접하는 사람들로부터 키워드를 구해야 한다. 개발자 블로그들을 살펴보았다.

수 십개를 살펴본 결과 복붙이 많다. 너무 어렵다. 그들만의 리그이다. 그러던 와중 늅늅거리고 쩔쩔메고 있는 나를 가장 이해시킬 것 같은 문장들을 가진 개발자님의 블로그를 찾았다.

https://min-nine.tistory.com/222

 

Apache Kafka란? - 아파치 카프카에 대한 학습

대학생 시절에는 프로그래밍 언어를 위주로 공부하였고, 개발자가 되어 4년차가 된 지금, 프로그래밍 언어의 장벽은 낮아졌고 오히려 프로그래밍 아키텍쳐, 디자인 패턴, 파이프라인 구축 등

min-nine.tistory.com

 

Kafka란?

링크드인(Linked In)에서 2011년 오픈소스로 공개한 대용량, 대규모 메시지 데이터를 빠르게 처리하도록 개발된 분산 메시징 플랫폼으로 빅데이터를 분석할 때 여러 스토리지와 분석 시스템에 데이터를 연결하기 위한 용도 등으로 현재 많이 사용되고 있습니다. 주로 데이터 파이프라인 구성시 사용되는 오픈소스 솔루션이고, 더 쉽게 이야기 하면 아파치 카프카는 어플리케이션간에 메시지를 교환하기 위해 사용되는 메세지 시스템 이라고 생각하면 됩니다.

여기까지도 대략 이해는 되도 전반적으로 무슨 말인지 이해 할 수가 없었다. 하지만 아래 묘사를 통해서 한 발자국 나아갔다. 색상으로 두개의 연관을 보기 좋게 하니 이해가 된다.

메일시스템을 생각해 봅니다. <- 그래 나도 메일은 쓰고 있지
1. 발신자메일을 작성하여 수신자메일 서버 메일을 발송합니다. <- 메일 보내기하면 서버로 보내겠지
2. 수신자메일서버에 저장되어 있는 본인의 메일을 원하는 시간에 언제든 볼 수 있습니다. <- 받는 사람도 서버에 저장된 메일을 보겠지.

카프카 시스템은 이렇습니다.
1.프로듀서(producer 혹은 publish라고 명칭) 메시지카프카 클러스터에 보내게 되고, 카프카 클러스터 안에 해당 토픽에 저장되어 보관됩니다.
2.컨슈머(consumer 혹은 subscriber라고 명칭)카프카 클러스터 안의 해당 토픽에 저장되어있는 메시지필요로 할 때 브로드캐스팅(brodcasting) 형식으로 가져다 쓸 수 있습니다.

정리하고 나니 동일한 구조이다.

  • 발신자 = 프로듀서, 퍼블리시(셔)
  • 메일 = 메시지
  • 메일서버 = 카프카 클러스터
  • 메일서버에 저장 위치 = 카프카클러스터 내 토픽에 저장 위치
  • 수신자 = 컨슈머, 구독자
  • 원하는 시간에 볼 수 있다 = 필요로 할 때 Brodcasting 형식으로 가져다 쓴다.

오늘은 이 정도로 전반적으로 어떤 기능을 해주려는 것인지 파악은 되었고, 아직 정확한 개념은 아니니까 이어서 하나씩 개념을 이해하고 실습까지 해봐야겠다.