Infra/Kubernetes

Kafka & Redis on Kubernetes

서머스 2023. 6. 12. 12:19

(사내 교육 수강 기록입니다)

쿠버네티스 환경에서 Kafka, Redis를 수행하는 방법, 그리고 모니터링 솔루션을 확인하는 방법을 공부해 봤다.

 

https://kafka.apache.org/

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

APACHE KAFKA

- distributed event streaming platform(분산 이벤트 스트리밍 플랫폼)

- high-performance(고성능)

- 최근 여러 기업에서 사용하고 있다.

 

 

Kafka의 구성 요소

Kafka Cluster

- 메시지를 저장하는 저장소

- 하나의 카프카 클러스터는 여러 개의 브로커로 구성된다.

- 데이터를 이동하는데 필요한 핵심 역할

 

Broker

- 각각의 서버라고 볼 수 있다.

- 메시지를 나눠서 저장하고, 이중화 처리하고, 장애 대처 등을 한다.

 

주키퍼 클러스터(앙상블)

- kafka cluster를 관리한다.

- 카프카 클러스터와 관련된 정보가 기록, 관리된다.

 

프로듀서

- 카프카 클러스터에 메시지를 보낸다.

 

컨슈머

- 카프카 클러스터로부터 메시지를 받는다.

 

 

 

토픽

- 메시지를 저장하는 단위, 메시지를 구분하는 용도

- 한개의 토픽은 한 개 이상의 파티션으로 구성된다.

- 파일의 폴더와 유사한 역할

 

파티션

- 메시지를 저장하는 물리적인 파일

- append-only 파일, 추가만 가능하다.

 

 

프로듀서는 메시지를 저장할 때 특정 토픽에 저장하도록 요청하게 된다.

컨슈머는 어떤 토픽에서 메시지를 읽어올 지 결정할 수 있다.

 

Offset

- 파티션 내 메시지가 저장되는 위치

- 각 메시지는 offset1, offset2, ... 값을 갖게 된다. -> 항상 제일 끝에 추가된다. 중간에 삽입되지 x

- 컨슈머는 오프셋 기준으로 메시지를 순서대로 읽는다(섞어서 읽지 못함)

- 메시지는 삭제되지 않고 보존된다.

 

 

프로듀서는 어떤 파티션에 메시지를 저장하는가?

  • 라운드로빈 방식 - 돌아가면서 선택한다.
  • key를 이용한 방식
    • key의 해시값을 이용해서 저장한 topic을 선택한다. 
    • 같은 key <-> 같은 topic
    • 같은 key에 대해서는 메시지의 순서가 유지된다.

 

컨슈머 그룹과 파티션

  • 컨슈머 그룹에 속하게 된다.
  • 한 개 파티션은 컨슈머그룹 내 한 개의 컨슈머에만 연결 가능하다.
  • 컨슈머그룹 기준으로 파티션의 메시지가 순서대로 처리되는 것을 보장한다.

 

Kafka의 성능이 좋은 이유

  • 파티션 파일은 OS 페이지 캐시를 사용한다.
  • 파일 I/O 가 실제로는 메모리에서 처리되기 때문에 속도가 빠르다.
  • Zero Copy 
    • 디스크 버퍼에서 네트워크 버퍼로 직접 데이터 복사 
    • 디스크에서 데이터를 읽어서 네트워크로 보내는 속도가 빨라진다.
  • 브로커의 일이 단순하다
    • 메시징 시스템 (메시지 필터링, 재전송 등)을 하지 않음 -> 프로듀서와 컨슈머가 직접 함
    • 속도가 빠르게 된다

 

 

Redis(Remote DIctionary Server)

  • 데이터베이스, 캐시 또는 메시지 브로커로 자주 사용되는 오프 소스 인메모리 DB
  • list, map, set, sorted set과 같은 고급 데이터 유형을 저장하고 조작할 수 있다.
  • 다양한 형식의 키를 허용하고 서버에서 직접 수행되므로 클라이언트의 작업 부하를 줄일 수 있다.
  • DB 전체를 메모리에 보유하며 Disk는 지속성을 위해서만 사용한다.
  •  

 

'Infra > Kubernetes' 카테고리의 다른 글

EKS로 배포하기  (0) 2022.08.04
kubernetes 9  (0) 2022.07.25
kubernetes 8  (0) 2022.07.22
kubernetes 7  (0) 2022.07.21
kubernetes 5  (0) 2022.07.20