https://velog.io/@hyeondev/Apache-Kafka-의-기본-아키텍쳐

Apache Kafka

아파치 카프카는 분산 메시지 스트리밍 플랫폼이며, 데이터 파이프 라인을 구성할 때 많이 사용된다. 카프카는 대용량 실시간 로그처리에 특화되어 개발된 오픈소스인 만큼, 분산 및 복제 구성과 더불어 Fault-Tolerant 한 안정적인 아키텍처와 빠른 성능으로 데이터를 처리할 수 있다.

서비스에서 사용하고 있던 리소스 공간은 서비스의 로직과는 별개로, 상황에 따라 필요가 없어질 수도 있고 확장이 필요할 수 있다. 또한 최근 증장하고 있는 다양한 서비 디바이스 특성에 따라 비동기 메시징 프레임워크를 기반으로 통신할 필요가 있을 수 있다. (예를 들면 디바이스가 가진 네트워크 커텍션이 탄탄하지 못하기 때문에 네트워크 지연 가능성을 고려해야하는 경우가 있다)

결국 이 같은 필요성은 느슨한 결합으로 구성된 컴퓨터 아키텍처를 선호하게끔 하였다. 이를 기반으로 등장한 비동기 메시징 프레임워크 중 하나가 아파치 카프카이다.

사실 아파치 카프카는 링크드인에서, 자사에세 발생하는 이슈를 해결하고자 개발된 기술이다. 링크드인에서 사용하던 기존 아키텍처에서는

  1. 통합된 데이터 전송 영역의 부재로 데이터 처리의 복잡도가 증가
  2. 데이터 파이프 라인의 관리가 어려웠다

는 문제점이 있었다. 때문에 특정 부분을 수정해야할 때도 연관된 부분을 모조리 찾아 수정해야할 수도 있었다.

이 문제점을 해결하기 위해, 링크드인에서는 Kafka 라는 새로운 시스템을 구축하였으며, 다음 4가지 컨셉을 목표로 하였다.

  1. Publish 모델과 Subscribe 모델의 분리
  2. 영구성을 가지고 있는 데이터를 여러 Subscribe 모델이 사용할 수 있도록
  3. 높은 처리량을 위한 메시지 최적화
  4. 데이터의 증가에 따른 Scale Out

Apache Kafka 가 개발된 배경을 간단하게 설명하였는데, 이런 배경과 목적을 갖고 탄생한 카프카는 아키텍쳐의 관점에서 몇 가지 특징을 가지고 있다. 먼저 카프카는 본래 메시지 스트리밍 플랫폼이기 때문에 레코드 스트림이 발생하면 → 처리한다 는 컨셉을 지닌다. 따라서 실시간 애플리케이션 구축에 유용한데, 이 스트리밍을 Consuming / Producing 프로세스 를 통해 실현시키도록 하였다. 한마디로, publish / subscribe 패턴을 지향하는 아키텍처로 개발되었는데, 이제 이 아키텍처와 그 구성 요소들에 대해 자세히 다뤄본다.

Apache Kafka : pub / sub 모델