728x90
  • 영속적인 저장 방식을 사용한다. 하지만 페이지 캐시를 활용하여 높은 처리량을 제공하는 인메모리(in-memory) 방식이다.\
  • 확장성이 뛰어나고 탄력적이며 내결함성이 있으며 안전하다.
  • Pinterest는 밀리초 지연 및 경량 기능을 위해 Apache Flink 및 Spark보다 Kafka Streams를 선택했다.
  • Kafka는 외부 종속성이 없으므로 유지 관리 비용이 최소화된다
  • 생산자는 Kafka에 이벤트를 "쓰는" 클라이언트 응용 프로그램이고 소비자는 이러한 이벤트를 "읽고 처리"하는 응용 프로그램이다.
    확장성을 달성하기 위해 Kafka는 생산자와 소비자를 분리했으며 서로 불가지론적이다.
  • 카프카는 Publisher(송신자)로부터 전달받은 메시지를 Subscriber(수신자)로 전달해주는 중간 역할
    → 응용 소프트웨어 간에 메시지 교환 담당
    이때, 메시지가 적재되는 공간: Message Queue.
  • 이벤트/데이터 흐름을 중앙에서 관리하는 방식

 

일반적으로 대량의, 비정형 데이터를 받는 용도로 Kafka 와 같은 Queue 를 많이 사용한다.

  • 그러나 최소 비용이 많이 필요할 수 있다. Kafka 는 3대 이상의 클러스터로 운영해야 하고 Zookeeper 클러스터도 필요하기 때문에. (Kafka 2.X 기준)
  • 또한 Kafka 운영 및 모니터링에 노동비용이 많이 필요할 수 있다.
  • AWS 에서는 관리형 Kafka 로 AWS MSK 를 제공해주고 있어, 업그레이드 및 스케일링으로 인한 노동 비용을 줄이고 모니터링을 편리하게 할 수 있다.

 

주키퍼란?(참고, 참고2, 참고3)

  • 컨슈머와 통신
  • 카프카의 메타데이터 정보를 저장
  • 카프카의 상태관리

분산 애플리케이션을 위한 코디네이션 시스템이다. 분산 애플리케이션이 안정적인 서비스를 할 수 있도록 분산되어 있는 각 애플리케이션의 정보를 중앙에 집중하고 구성 관리, 그룹 관리 네이밍, 동기화 등의 서비스를 제공한다.

 

새로운 브로커 추가나 기존 브로커를 감시하고 브로커 목록이 추가나 삭제에 의해서 변화될 경우,

주키퍼는 이런 상태를 프로듀서나 컨슈머에게 통보하여 활성화된 브로커과 동작을 원활하게 한다. (리벨런싱)

또한 특정 토픽의 파티션에 대해서 리더와 팔로워를 기록하고, 프로듀서나 컨슈머에게 정보를 제공한다.

카프카는 주키퍼 없이 동작하지 못한다.

 

Kinesis

AWS에서 제공하는 클라우드 스트리밍 서비스이다. 내구성 있는 실시간 데이터 스트리밍 서비스를 제공
Client (App / Web) 이벤트만 전송하고, 비용 문제로 인해 Kafka 사용이 어렵다면 AWS Kinesis 도 좋은 대안
샤드당, 최대 초당 1천개까지 쓰기가 가능하다.

읽기의 경우에도 제한이 존재하며, Consumer 가 많이 붙는 경우에는 Write 가 적음에도 Shard 를 늘려야한다.
Shard 당 읽기 제한을 Consumer 간 공유하지 않으려면 Enhanced Fan-out 을 사용할 수 있다. 그러나 별도 세팅이 필요하다
728x90

+ Recent posts