성실한 사람이 되자

성실하게 글쓰자

This is spear

Programming/KAFKA

현재 스트리밍 서비스를 이끌고 있는 주 기술/ 아파치 카프카 (Apache Kafka - 이벤트 스트리밍 플랫폼)

Imaspear 2020. 8. 26. 23:51
728x90

 

 

 

 스마트폰 보급과 함께 사용자가 데이터의 양이 급격하게 증가하면서 빅데이터 들을 처리하는 기술이 눈에 띄게 중요해졌습니다. 기본적인 데이터 처리하는 방식에서는 파일을 저장하고 그 다음 읽는 게 순서였지만, 데이터 전송 속도 증가와 빅데이터 처리 기술의 고도화로 인해 파일 저장과 동시에 읽을 수 있게 되었습니다. 이러한 기술을 스트리밍 서비스라고 부릅니다. 그래서 유튜브와 같이 스트리밍 서비스에서 실시간으로 데이터를 처리하는 곳에 사용되는 기술 중에 하나를 소개할까 합니다. 

 

 

 

간단한 카프카의 소개


 

 

 카프카는 이벤트 스트리밍 플랫폼입니다. 특정한 이벤트 전송로인 파이프라인을 관리하여 여러 스토리지 간의 연결을 통합, 관리 프로그램입니다. 쉽게 표현하자면 대량의 데이터를 분산 관리해주는 시스템입니다.

 카프카의 장점은 데이터가 리퀘스트 한 만큼만 정확하게 보내진 다는 점과 카프카 스스로 데이터 복사본을 만들어 데이터가 임의로 없어지는 걸 방지해준다는 점에 있습니다. 정확하고 안정성이 있기에 대량의 데이터를 실시간 캡처하고 데이터를 저장하는 곳에서 많이 사용합니다.  

 

 

 

 

 

 

 

이벤트란 무엇인가?


 우선 kafka 내에서 사용하는 용어인 이벤트(event)는 어떤 일이 일어났을 떄 그 사건을 하나의 이벤트라고 정의합니다. 다른 플랫폼에서 지원하는 문서(Documentation)에서 이벤트를 레코드(record) 또는 메시지(message)라고도 합니다. kafka에서 데이터를 읽거나 쓸 때 이벤트 단위로 작동합니다. 하나의 이벤트 단위 안에 이벤트 키(event key), 이벤트 값(event value), 타임스탬프(event time stamp) 마지막으로 선택 옵션인 메타 데이터 헤더(meta data header)가 존재합니다.

 

  • event key : "This is spear"
  • event value : "Show me the money"
  • event tims stamp : "2020-08-26"

 

 

이벤트 스트리밍이란


 

 이벤트 스트리밍은 DB, 센서, 모바일 장치 등과 같은 이벤트 소스에서 이벤트 스트림 형태( 데이터의 순서 )로 실시간 데이터를 캡처하는 걸 뜻합니다. 이벤트 스트리밍은 검색 가능하도록 이벤트 스트리밍을 지속적으로 저장합니다. 또한 이벤트 스트림을 실시간 조작, 처리하며 필요에 따라 이벤트 스트림을 다른 대상 기술로 라우팅 합니다.

즉, 이벤트 스트리밍이 데이터의 지속적으로 흐를 수 있게 하고 해석을 통한 적절한 정보가 적절한 장소에 제공되도록 합니다. 

 

 

 

 

이벤트 스트리밍이 사용되는 곳


 

  • 증권, 은행, 보험 등 실시간 결제 및 금융을 처리
  • 물류 및 자동차 산업과 같이 실시간 차량 및 배송 추적
  • 공장, IoT 장비 및 기타 장비에서 센서 데이터를 지속적으로 캡처, 분석
  • 소매, 호텔 및 여행 산업, 모바일 어플에서 고객 상호 작용 주문 및 주문 수집
  • 병원에서 환자를 모니터링하여 상태 변화 예측과 응급 상황에 적시 치료  

 

 

 

Apache Kafka

 

kafka는 서버와 클라이언트로 구성되어 있다.


 

 kafka는 고성능 Tcp 네트워크 프로토콜을 통해 입출력되는 데이터를 분산시키는 시스템을 갖추고 있습니다. kafka는 서버와 클라이언트로 구성되어 있습니다. 

 서버에서 kafka는 데이터를 저장하는 스토리지 하나 또는 둘 이상의 서버 클러스터로 실행됩니다. 서버 중 일부는 브로커(Broker)라고 하는 스토리지 계층을 형성합니다. 다른 서버는 kafka connect를 실행하여 데이터를 이벤트 스트리밍으로 지속적으로 가져오고 내보내 관계형 DB 및 기타 클러스터(Cluster)와 같은 기존 시스템과 kafka를 통합시킵니다. kafka conntect로 연결되어 있을 때 브로커(Broker)라는 스토리지 서버 중 하나가 문제가 생겨도 다른 서버가 작업을 대신합니다. 

 클라이언트에서는 대규모 이벤트 스트림을 병렬로 읽고 쓰고 처리하는 분산 어플리케이션 및 마이크로 서비스를 작성 가능하게 합니다.

 

 

kafka는 이벤트를 정확히 한 번만 처리한다. 


 

kafka에서는 데이터 처리하는 데 두 가지의 처리하는 기능이 존재합니다. 첫 번째로 kafka에 이벤트를 쓰는 권한(Write)을 가진 클라이언트 어플리케이션인 생산자(Producer)이고 두 번째로는 이벤트를 읽는 권한(Read) 클라이언트인 소비자(Consumer)가 존재합니다. kafka에서 생산자와 소비자는 완전히 분리되어 있습니다. 이는 kafka의 높은 확장성을 달성하기 위한 핵심 요소입니다. 쓰는 권한을 가지고 있는 생산자 클라이언트는 읽는 권한을 가진 소비자 클라이언트를 기다리지 않습니다. 즉 두 기능이 분리되어 정확하게 이벤트 들을 한 번씩만 처리한다는 뜻입니다.

 

 

 

 

하나의 토픽(topic)에서 이벤트들은 필요로 할 때마다 읽을 수 있다.


 

 이벤트들은 조직적이고 견고하게 "topic"이라는 영역에 저장됩니다.( topic은 파일 시스템에서 폴더와 유사하고 이벤트들을 파일에 해당합니다. ) kafka 안에 존재한 topic 들은 대량의 생산자와 대량의 구독자가 존재합니다. 물론 하나의 토픽은 이벤트들을 쓸 수 있는 생산자와 읽을 수 있는 소비자가 많을 수도 있고 존재하지 않을 수도 있습니다.

 kafka에서는 전통적인 메시지 시스템과 달리 이벤트들을 소비하고 나서 삭제할 수 없습니다. 대신 각 topic마다의 구성 세팅에 따라 저장할 기간을 정해 시간이 지나면 삭제할 수 있습니다. 그렇기에 kafka는 데이터 크기에 따라 효과적으로 반응하여 장기간 데이터를 저장해도 안전합니다. 

 

 topic들은 서도 다른  브로커(Broker)에 있는 여러 버킷(bucket)들에 분산되어 있습니다. 데이터가 분산되는 위치는 클라이언트 어플리케이션에서 동시에 여러 브로커(Broker)들이 데이터를 읽고 쓸 수 있도록 하므로 확장성이 필요합니다. 

 topic에 이벤트가 저장될 때, topic의 파티션(partition) 중 하나에 추가된다. 동일한 이벤트 키(consumer ID or vehicle)를 가진 이벤트들은 같은 파티션(partition)에 저장된다. 그리고 kafka는 주어진 동일한 영역의 파티션(topic-partition)의 쓰인 것과 같은 순서로 해당 파티션(partition)의 이벤트를 읽도록 설정되어 있습니다.

 

 

사본을 이용해 이벤트들을 안정적으로 처리할 수 있다.


 kafka는 데이터를 내결함성 및 고 가용성으로 만들기 위해 지역 또는 데이터 센터 간 모든 주제를 복제할 수 있습니다. 그래서 잘못될 경우를 대비해 데이터 사본을 보유한 여러 브로커가 항상 존재합니다. 일반적인 설정은 3개의 복사본이 존재하고 이 복제는 파티션 단위로 수행됩니다.

 

 

 

카프카에 대한 간단한 소개를 마치고 밑에 카프카 공식 문서를 게시하겠습니다.

 

kafka.apache.org/documentation/#intro_platform

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

 

카프카는 윈도우에서는 사용이 불가능 하니 리눅스와 같은 OS를 이용하여 테스트해야합니다. 카프카 사용하는 방법은 추후에 작성하도록 하겠습니다. 

 

 

오늘은 여기까지~

'Programming > KAFKA' 카테고리의 다른 글

아파치 카프카 시작하기(install Apache Kafka )  (0) 2020.11.27