CS/Apache Kafka

[Kafka - 00] 카프카 개요 및 특징, 구성

JWonK 2023. 8. 21. 23:25
728x90
반응형

 

Kafka 기본 구성

 

00. Kafka란?


Kafka는 분산 데이터 스트리밍 플랫폼으로, 대량의 실시간 데이터를 처리하고 저장하는데 사용되는 오픈 소스 솔루션이다.

아파치 카프카(Apache Kafka)라는 이름으로도 잘 알려져 있다. 이는 LinkedIn에서 개발된 후에 아파치 소프트웨어 재단에 기증되어 개발 및 관리되고 있다.

 

Kafka는 다양한 애플리케이션 간에 데이터 스트림을 안정적으로 전달하고, 실시간으로 데이터를 처리, 분석하고 저장하는 데 사용된다.

 

대표적인 특징으로 높은 처리량, 순서 보장, 적어도 한 번 전송 방식(At least Once), 강력한 파티셔닝, 자연스러운 백프레셔 핸들링, 로그 컴팩션 같은 기능이 존재한다.

 

 

▶ 순서 보장

: 이벤트 처리 순서가 보장되면서, 엔티티 간의 유효성 검사나 동시 수정 같은 무수한 복잡성들이 제거됨으로써 구조 또한 매우 간결해졌다.

 

 

 적어도 한 번 전송 방식

  • 분산된 여러 네트워크 환경에서의 데이터 처리에서 중요한 모범 사례는 '멱등성'이다.
    • '멱등성'이란 동일한 작업을 여러 번 수행하더라도 결과가 달라지지 않는 것을 의미한다. 따라서 프로듀서가 재전송을 하더라도 데이터 변화는 일어나지 않는다.
  •  백엔드 시스템들이 중복 메시지 처리가 가능하도록 허용된다면 복잡한 트랜잭션 처리 또한 필요하지 않게 된다. 이로 인한 아키텍처는 더욱 단순해지고 처리량 또한 높아진다.

 

 

 자연스로운 백프레셔 핸들링

  • 카프카의 클라이언트는 풀[pull] 방식으로 동작한다. 풀 방식의 장점으로는 자기 자신의 속도로 데이터를 처리할 수 있다는 점이다.
  • 반면 푸시[push] 방식은 브로커가 보내주는 속도에 의존해야 한다는 한계가 있다.카
  • 성능과 편리함에 집중하고자 풀 방식을 채택한 카프카 클라이언트는 복잡한 피드백이나 제한의 요구사항이 사라져 매우 간단하고 편리하게 클라이언트를 구현할 수 있다.

 

 

 강력한 파티셔닝

  • 카프카의 파티셔닝 기능을 이용하면, 논리적으로 토픽을 여러 개로 나눌 수 있다.

 

 

 

 

 

 

 

 

01. Kafka의 주요 특징


 

높은 처리량과 낮은 지연시간

[출처 - https://www.confluent.io/blog/kafka-fastest-messaging-system/]

 

  • 카프카는 매우 높은 처리량과 낮은 지연시간을 자랑한다.
  • kafka, Pulsar, RabbitMQ를 비교한 결과를 보면 처리량이 가장 높은 것은 카프카이며 응답 속도가 가장 빠른 것은 RabbitMQ이다.
  • 하지만 처리량과 응답 속도를 함께 비교하면 카프카가 돋보적이다.

 

▶ 높은 확장성

  • 카프카는 손쉬운 확장이 가능하도록 설계된 애플리케이션이다.
  • 후에 관련된 글 업로드 할 예정이다.

 

 

▶ 고가용성

  • Kafka는 클러스터 내 리플리케이션[replication] 기능을 추가했고, 이를 통해 카프카 클러스터의 고가용성이 확보되었다.
  • 카프카 내부 동작 관련 게시글에서 관련 내용을 업로드 할 예정이다.

 

 

▶ 내구성

  • 프로듀서는 카프카로 메시지를 전송할 때, 프로듀서의 acks라는 옵션을 조정하여 메세지의 내구성을 강화할 수 있다.
  • 강력한 내구성을 원한다면 acks=all로 설정하면 된다. 이 기능을 활성화 할 경우, 프로듀서에 의해 카프카로 전송되는 모든 메시지는 안전한 저장소인 카프카의 로컬 디스크에 저장된다.
  • 이렇게 할 경우, 컨슈머가 메시지를 가져가더라도 메시지는 삭제되지 않고 지정된 설정 시간 또는 로그의 크기만큼 로컬 디스크에 보관되므로, 코드의 버그나 장애가 발생하더라도 과거의 메시지들을 불러와 재처리할 수 있다.

 

 

 

▶ 개발 편의성

  • 카프카는 메시지를 전송하는 역할을 하는 프로듀서[producer]와 메시지를 가져오는 역할을 하는 컨슈머[consumer]가 완벽하게 분리되어 동작하고 서로 영향을 주지도 받지도 않는다.
  • 이러한 구성에 따라 원하는 기능만 개발할 수 있기 때문에 개발 편의성이 향상된다.
  • 또한 개발 편의성을 제공하기 위해 카프카에서는 카프카 커넥트[kafka connect]스키마 레지스트리[Schema Registry]를 제공한다.
    • 스키마 레지스트리는 카프카를 사용하는 많은 개발자가 데이터 활용보다는 데이터를 파싱하는 데 많은 시간을 소모하는 매우 비효율적인 현실을 보완하고자 스키마를 정의해서 사용할 수 있도록 개발된 애플리케이션이다.
    • 카프카 커넥트는 프로듀서와 컨슈머를 따로 개발하지 않고도 카프카와 연동해 손쉽게 소스와 싱크로 데이터를 보내고 받을 수 있는 별도의 애플리케이션이다.
      • 카프카 커넥트는 엘라스틱서치[Elasticsearch]. HDFS 등 다양한 소스와 싱크를 제공하므로 개발 편의성을 높일 수 있다.

 

 

 

 

 

 

 

03. Kafka의 기본 구성


Kafka 기본 구성

 

  • 카프카는 데이터를 받아서 전달하는 데이터 버스[Data bus]의 역할을 한다.
  • 카프카에 데이터(메시지)를 만들어서 주는 쪽을 프로듀서[Producer]라 부른다.
  • 카프카에서 데이터(메시지)를 소비하는 쪽을 컨슈머[Consumer]라 한다.
  • Zookeeper는 카프카의 정상 동작을 보장하기 위해 메타데이터(metadata)를 관리하는 코디네이터[coodinator]라 한다. 브로커들의 노드 관리 등을 하고 있다로 이해하면 충분하다.
728x90
반응형