본문 바로가기
📨 Apache Kafka

[아파치 카프카 애플리케이션 프로그래밍 with 자바] 1장 들어가며

by GroovyArea 2023. 3. 13.

아파치 카프카

개발 공부를 하며 필수로 MQ, MB 정도는 하나 공부해야 겠다는 생각을 꾸준히 해왔다.

공부할만한 실력이 되는게 베이스가 될 시기와, 실제로 사용해야 될 시기가 딱 맞아 떨어져 바로 공부하기로 마음 먹었다.


카프카란?

  • 카프카 내부에 데이터가 저장되는 파티션 동작은 FIFO 방식의 큐 자료구조와 유사하다.

    큐에 데이터를 보내는 것이 ‘프로듀셔' 이고 데이터를 가져가는 것이 ‘컨슈머'.
  • 카프카를 통해 전달할 수 있는 데이터 포맷은 거의 제한이 없다. 직렬화, 역직렬화를 통해 ByteArray 로 통신하므로 자바에서 선언한 모든 객체를 지원한다. (카프카 클라이언트에서는 기본적으로 ByteArray, ByteBuffer, Double, Long, String 타입에 대응한 직렬화, 역직렬화 클래스가 제공된다)

    기본적으로 제공되는 Class 제외하고 추가로 필요하다면 커스텀 직렬화/역직렬화 클래스(Serializer, Deserializer) 를 상속받아 개발하여 사용할 수 있다.
  • 상용 환경에서 카프카는 최소 3대 이상의 서버(브로커)에서 분산 운영하여 프로듀서를 통해 전송받은 데이터를 파일 시스템에 안전하게 기록한다.
    최소 3대 이상의 서버로 구성된 클러스터 중 일부 서버에 장애가 발생하더라도 데이터를 지속적으로 복제하므로 안전하게 운영할 수 있다.
  • 데이터를 묶음 단위로 처리하는 배치 전송을 통해 낮은 지연과 높은 데이터 처리량을 가지고 있다.

카프카 특징

  • 높은 처리량
    • 카프카는 프로듀서가 브로커로 데이터를 보낼 때와 컨슈머가 브로커로부터 데이터를 받을 때 모두 묶어서 전송한다.
      • 많은 양의 데이터를 송수신할 때 맺어지는 네트워크를 최소화 하기 위함
    • 파티션 단위를 통해 동일 목적의 데이터를 여러 파티션에 분배하고 데이터를 병렬처리 할 수 있다.
      • 파티션 개수만큼 컨슈머 개수를 늘려서 동일 시간당 데이터 처리량을 늘릴 수 있다.
  • 확장성
    • 카프카 클러스터의 브로커를 무중단이면서도 쉽게 scale-in, scale-out 할 수 있다.
  • 영속성
    • 영속성이란 데이터를 생성한 프로그램이 종료되더라도 사라지지 않은 데이터의 특성을 뜻한다.
    • 카프카는 데이터를 파일 시스템에 저장하여 영속성이 가능하고, 파일에 저장하는 특성 때문에 속도가 느려질 수 있는 문제를 해결하기 위하여 파일 I/O 성능 향상을 위해 page cahce 영역을 메모리에 따로 생성하여 사용한다.
  • 고가용성
    • 클러스터로 이루어진 카프카는 데이터의 replication 을 통해 고가용성의 특징을 가진다.
      • 프로듀서로 전송받은 데이터를 1대의 브로커에만 저장하지 않고 다른 브로커에도 저장한다.
    • on-premise 환경의 서버 랙 또는 public cloud 의 리전 단위 장애에도 데이터를 안전하게 복제할 수 있는 브로커 옵션들이 준비되어 있다.

카프카 클러스터를 3대 이상의 브로커들로 구성해야 하는 이유

  • 1대 구성 : 구성할 경우 해당 브로커에 장애는 서비스 장애로 이어진다.
  • 2대 구성 : 1개의 브로커가 죽을 시 다른 브로커가 살아 있으므로 서비스 장애는 발생하지 않는다. 하지만 브로커 간의 데이터가 복제되는 시간 차이로 인해 데이터를 유실할 수 있다.
반응형