본문 바로가기

좋아하는 것_매직IT/10.microservice

11.마이크로서비스, 카프카에 대해서 알아보자.

반응형

카프카란?

  • 아파치 재단의 카프카는 pub-sub모델의 메세지 큐
  • 분산환경에 특화되어 설계되어 있다는 특징을 가지며, 그외에 클러스터 구성, fail-over, replication와 같은 여러 가지 특징을 가짐.

카프카의 아키텍처

  • 마이크로서비스영역에서 카프카는 흥미로운 선택. 
  • 카프카의 특징
    • 자바로 구현되어 있으며, API는 언어 중립 프로토콜과 함께 사용할 수 있음.
    • 높은 처리량, 낮은 지연시간과 같은 일반적인 기능외에 복제를 통해 개별 서버의 장애를 보완, 더 많은 서버 대수로 확장가능함.
      • 참고페이지 : https:/kafka.apache.org
    •  메시지 기록을 저장함.
      • 레코드를 영구히 보존함.
    • 많은 양의 데이터를 처리할 수 있으며, 여러 서버로 분산 가능.
    • 스트리밍 처리 기능을 갖추고 있음.
    • 애플리케이션은 카프카에서 데이터 레코드를 수신하고 변형한 후 카프카에 해당 변형 데이터를 전달 할 수 있음.

라이선스

  • 아파치 2.0

카프카의 API

  • 프로듀서 API는 데이터를 전달함.
  • 컨슈머 API는 데이터를 수신함.
  • 스트림 API는 데이터를 변환할 수 있음.
  • 다양한 프로그래밍 언어로 개발된 카프카 클라이언트 목록에 대한 정보

카프카의 레코드

  • MOM에서는 데이터를 메시지라 부르는 반면, 카프카는 데이터를 레코드(record)라고 부름.
  • 레코드의 값을 블랙박스로 취급, 데이터를 해석하지 않음.
  • 레코드에는 키(key) 와 타임스탬프(timestamp)가 존재함.

카프카의 토픽

  • 토픽은 레코드 집합을 말함.
  • 프로듀서는 특정 토픽에 레코드를 보내고, 컨슈머는 특정 토픽의 레코드를 수신함.

카프카의 파티션

  • 토픽은 파티션(partition) 으로 나눔.
  • 파티션은 레코드의 순서를 강하게 보장및 병렬처리도 가능함.
  • 각 레코드는 단 하나의 파티션에 저장됨. 레코드 키를 해싱 계산해 해당 레코드를 파티션에 저장함.
  • 각 파티션의 레코드의 순서가 유지됨.
  • 파티션에 저장되는 레코드 순서는 컨슈머가 레코드를 읽는 순서를 의미함.
  • 파티션을 읽을 때는 선형. 컨슈머는 순서대로 각 레코드를 처리해야 함.
  • 파티션간에는 병렬로 처리될 수 있음.
  • 파티션은 레코드가 추가되는 파일

카프카의 커밋

  • 컨슈머 관점에서 보면 카프카는 각 파티션에 대한 오프셋을 저장함.
  • 오프셋은 컨슈머가 읽고 처리한 파티션에서 마지막으로 읽은 레코드를 나타냄.
  • 컨슈머가 레코드를 처리할 때 새로운 오프셋을 커밋함.
  • 카프카는 어느 컨슈머가 어느 레코드를 처리했는지, 어떤 레코드가 처리되고 있는 중인지 항상 인지함. 
  • 커밋은 오프셋을 기반으로 함.

카프카의 폴링

  • 컨슈머는 데이터를 폴링(polling)함.
    • 컨슈머는 새로운 데이터를 얻은 후 처리 함.

카프카의 복제

  • 파티션에 데이터를 저장함.
  • 한 파티션의 데이터는 다른 파티션의 데이터와 독립적임.
  • 하나의 서버에서 여러 파티션이 분산 저장가능함. 또한, 파티션은 여러서버에 걸쳐 분산될 수 있음.
  • 각 카프카 서버에서 일부 파티션을 처리하게 해서 부하 조절 기능을 구현할 수 있음.
  • 더 많은 부하를 처리하려면 새로운 서버를 추가하고, 일부 파티션을 새로운 서버로 이동시켜야함.
  • 파티션은 복제가 가능함. 
  • 데이터는 여러 카프카에 저장됨.
  • 복제를 통해서 장애에 안전해짐. 특정 카프카 서버에 장애가 발생하거나 데이터를 손실하더라도 다른 복제본이 있기때문에 데이터를 안전하게 보관함.
  • 카프카는 여러 복제본과 동기화된 복제본 개수를 변경해 CAP 정리와 관련된 다양한 절충안을 제공함.

카프카의 리더 그리고 팔로어

  • 복제는 하나의 리더에서 데이터를 저장하고, 나머지 복제 데이터를 팔로어에서 저장하는 방식으로 구현됨.
  • 프로듀서는 리더에 직접 저장 요청을 보냄. 

카프카의 재시도 기능

  • 컨슈머에 전달되는 것이 성공적이지 않다면 프로듀서는 API를 사용해 전달을 재시도하도록 지정할 수 있음.
  • 기본설정은 레코드 전달을 재시도 하지 않도록 설정되어있음. 따라서 레코드가 유실될 수 있음.

카프카의 지속성

  • 카프카는 메시징 시스템과 데이터 저장 솔루션이 혼합된 솔루션임.
  • 컨슈머는 파티션의 레코드를 읽을 수 있고, 프로듀서는 파티션의 레코드를 저장할 수 있음.
  • 레코드의 기본 저장기간은 7일이지만 변경 가능. 또한 레코드를 역구히 저장할 수 있음. 컨슈머는 레코드의 오프셋을 저장함.

결론

  • 카프카는 마이크로서비스 간의 비동기 통신에 대한 흥미로운 접근방법을 제공 가능함.
  • 아래 장점으로 마이크로서비스에서 다른 비동기 통신 매커니즘이 융용하더라도 카프카를 살펴 볼 것을 추천함.
    • 장점
      • 카프카는 레코드를 영구적으로 저장할 수 있음.
      • 컨슈머의 오버헤드는 낮음.
      • 카프카의 파티션에는 병렬처리 개념을 가지고 있으며 컨슈머 그룹에서는 컨슈머가 레코드 순서를 보장하는 개념을 가지고 있음.
      • 카프카는 메시지 배달을 보장할 수 있음.
      • 컨슈머는 성공적으로 처리한 레코드를 커밋함, 에러가 발생하면 레코드를 커밋하지 않고 다시 처리하려고 시도함.
728x90
300x250