Kafka에 대하여

김득회·2022년 8월 23일
0

Kafka

목록 보기
1/13

비즈니스 소셜 네트워크 사이트인 LinkedIn에서 파편화된 데이터 수집 및 분배 아키텍처를 운영하는 데에 큰 어려움을 겪었다. 서비스가 커지면서 애플리케이션의 개수가 점점 많아져 데이터 전송라인이 기하급수적으로 많아져 복잡해지기 시작했다.

이것을 극복하기 위하여 각각의 애플리케이션을 연결하는 것이 아닌 한 곳에 모아 처리 할 수 있도록 중앙 집중화를 하여 여러 애플리케이션에서 취합한 데이터 스트림을 한 곳에서 실시간으로 관리할 수 있는 Apache Kafka가 탄생하게 되었다.

Apache Kafka는 분산 메시지 스트리밍 플랫폼이며 데이터 파이프라인을 구성할 때 많이 사용한다.
대용량 실시간 로그처리에 특화된 오픈소스로, 여기서 말하는 로그는 일반적으로 생각하는 텍스트 로그가 아닌 데이터의 집합을 의미한다.

카프카는 높은 처리량, 확장성, 영속성, 고가용성의 특징을 가지며 내결함성(High Availability)와 장애 허용 (Fault Tolerant)특징을 가지고 있다.

카프카 특징

  • 높은 처리량

    • 프로듀서가 브로커로 메시지를 보낼 때와 컨슈머가 브로커로 부터 데이터를 받을 때 모두 묶어서 전송한다. -> 많은 양의 데이터를 묶음단위로 처리하는 배치로 빠르게 처리할 수 있다.

    • 파티션 단위를 통해 동일 목적의 데이터를 여러 파티션에 분배하고 데이터를 병렬로 처리할 수 있다. -> 파티션 개수만큼 컨슈머 개수를 늘려 동일 시간당 데이터 처리량을 늘리는 것

  • 확장성

    • 데이터 파이프 라인에서 데이터를 모을 때 데이터 양의 예측은 불가 함으로 가변적인 환경에서 안정적으로 확장 가능하도록 설계하여 데이터가 적을 때는 카프카 클러스터의 브로커를 최소한의 개수로 운영을 하다가 데이터가 많아지면 브로커 개수를 자연스럽게 늘려 스케일 아웃(scale out) 할 수 있다.

      반대로 데이터 개수가 적어지고 추가 서버들이 더이상 필요없게되면 브로커 개수를 줄여 스케일 인(scale in) 할 수 있다.

  • 영속성

    • 카프카는 다른 메시징 플랫폼과 다르게 전송 받은 데이터를 메모리에 저장하지 않고 파일 시스템에 저장한다.
    • 페이지 캐시를 사용하여 파일 시스템에서 한번 읽은 파일 내용을 메모리에 저장하여 다시 사용하는 방식을 채택하여 처리량이 높다는 특징이 있다.
  • 고가용성

    • 3개 이상의 서버들로 운영되는 카프카 클러스터는 장애가 발생하더라도 무중단으로 안전하고 지속적으로 데이터를 처리할 수 있다.
    • 프로듀서로 전송 받은 데이터는 1개의 브로커에만 저장하는 것이 아니라, 또 다른 브로커에도 저장을 하여 한 브로커에 장애가 발생하더라도 나머지 브로커에 저장되어 있으므로 지속적으로 데이터 처리가 가능하다.

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

클러스터를 구성할 때 브로커의 개수의 제한은 없지만, 1개로 운영할 경우 브로커 장애는 서비스의 장애로 이어지므로 권장하지 않는다.

2개로 운영할 경우 안정적으로 운영할 수는 있지만, 브로커간 데이터가 복제되는 시간 차이로 인해 데이터 유실이 발생할 수 있다.

유실을 막기 위해서 min.insync.replicas 옵션을 사용하여 최소 2개 이상의 브로커에 데이터가 완전히 복제됨을 보장하는 옵션으로 해결한다. 때문에 브로커는 3개 이상으로 구성하는 것이 적합하다.

profile
감성 프로그래머 HoduDeuk

0개의 댓글