Backend/Kafka

Kafka

간지나제 2021. 4. 13. 15:28

배경

링크드인 웹사이트에서 생성되는 로그를 처리하여 웹사이트 활동을 추적하는 것을 목적으로 개발되었다.

대량의 로그를 분석하여 사용자가 웹에서 하는 활동을 모니터링하고 서비스 개선에 활용하는 것이다.

필요한 조건을 모두 만족하는 기술이 없었기에 여러 조건을 고려하여 만들었다.

 

Pub/Sub model을 구현한 분산 메시징 시스템

- 메시지 생산자인 프로듀서를 Publisher, 메시지 소비자인 컨슈머를 Subscriber라고 한다.

- Publiser가 Subscriber에게 직접 메시지를 보내는 것이 아니라 Broker를 통해 전달한다.

- Publisher는 누가 그 메시지를 수신하는지 알 수 없고 브로커에 있는 토픽이라고 불리는 카테고리 안에 메시지를 등록한다.

- 여러 Subscriber가 같은 Topic을 구독하기로 결정한다면, 이들 Subscriber는 같은 메시지를 받는다.

- TV나 라디오 전파 수신을 상상하면 이해하기 쉽다.

 

높은 처리량을 실현하기위해서 어떻게 확장할 수 있는가가 관건

- Consumer Group이라는 개념을 도입하여 Consumer를 확장할 수 있도록 설계했다.

큐 모델과 Pub/Sub 두 가지 모델을 지원한다.

- 여러 Consumer가 같은 토픽을 분산하여 메시지를 읽음으로써 처리의 확장성을 담보한다.

- 브로커가 1대일 경우 병목이 일어날 수 있다.

또한, 장기간에 걸쳐 임의의 타이밍에 데이터를 읽도록 하려면 1대만으로는 유지할 수 있는 메시지양이 부족할 수 있다.

따라서 브로커도 복수 구성하여 확장한다.

 

임의의 타이밍에 데이터를 읽고 메시지를 잃지 않는 것도 특징

- 다른 메시지 큐에서도 데이터 영속화가 가능하지만 실시간 접속에만 중점을 둔 경우가 많다.

이와 달리 Kakfa는 디스크에 저장하므로 장기 보존이 가능하다.

그럼에도 불구하고 높은 처리량을 제공한다.

 

이해하기 쉬운 API 제공

- 프로듀서와 컨슈머를 쉽게 접속할 수 있도록 ConnectAPI를 제공한다.

이를 통해 각종 외부 시스템과 접속할 수 있다.

Framework인 Kafka Connect도 제공함

 

전달보증

- 메시지를 잃지 않고 전달하는 데 있어 전달 보증 기능을 제공한다.

- offset

 

아파치소프트웨어재단에 의해 아파치 카프카란 이름으로 오픈소스로 풀렸다.

 

출처 : 한빛미디어 실전 아파치 카프카

 

Kafka는 하나 이상의 서버로 구성되는 클러스터에서 작동한다.

카프카 클러스터는 토픽(topic)이라고 부르는 파이프라인에 데이터 레코드 스트림을 저장한다.

각각의 레코드는 키,값,타임스탬프로 구성된다.

 

카프카 클러스터는 토픽을 여러 노드에 분산된 파티션에 분산해서 저장한다.

각 파티션은 추가되는 레코드를 순서대로 계속 쌓으며 이에 대한 커밋 로그를 가지고 있다.

카프카 클러스터는 파티션에 개시된 모든 레코드를 설정한 기간동안 보존한다.

 

컨슈머들은 로그에서 어디까지 읽었는지에 대한 정보(offset)만을 저장한다.

이 offset은 컨슈머가 직접 조작하므로 능동적으로 그리고 순차적으로 읽을 수 있다.

필요하다면 과거로 offset을 재 설정할 수 있다.

 

여러 브로커들의 클러스터링을 위해 아파치 주키퍼(Apache Zookeper)를 사용한다.

주키퍼를 사용하여 브로커의 추가 및 장애 상황을 간단하게 대응할 수 있다.

프로듀서가 메시지를 카프카 클러스터로 전송하면 브로커는 또 다른 브로커에게 프로듀서의 메시지를 중복해서 저장한다.

만약 한 브로커에 장애가 생기더라도 중복 저장된 복사본을 컨슈머에게 전달할 수 있으므로 장애 상황을 대비할 수 있다.

 

 

twofootdog.tistory.com/86

 

아파치 카프카(Apache Kafka) 정의 및 특징

최근에 아파치 카프카(Apache Kafka)에 대한 관심이 생겨서 공부를 하게 되었다. 이 글에서는 아파치 카프카에 대한 정의 및 특징에 대해 정리를 해 볼 것이다. 글의 진행 순서는 다음과 같다. 1. 아

twofootdog.tistory.com

 

'Backend > Kafka' 카테고리의 다른 글

Zookeeper  (0) 2021.04.13