실전 카프카 - 1장

Sixhustle·2022년 12월 5일
0

Kafka

목록 보기
1/1
실전 카프카 개발부터 운영까지 - 1장 카프카 개요

Kafka는 LinkedIn 내부에서 발생하고 있는 이슈들을 해결하기 위해 만들어졌다.
데이터 파이프라인 확장의 어려움, 이기종 간의 호환성, 고성능 기반의 실시간 데이터 처리의 어려움 문제를 해결하기 위해 2010년 개발되었다.


잘란도 도입 사례

  • 이벤트 드리븐 시스템 구성을 채택
  • 아래의 문제점들을 직면
    • 여러 네트워크를 이용하는 환경에서 모든 데이터 변경에 대한 올바른 전달 보장 문제
    • 동일한 데이터를 동시에 수정하면서 저오학하게 순서를 보장하는 문제
    • 다양한 클라이언트들의 요구사항을 효율적으로 지원하는 문제
    • 빠른 전송을 위한 클라이언트 또는 대량의 배치 전송을 위한 클라이언트를 지원하기 어려운 문제
  • 동기 방식의 한계점을 느끼고 비동기 방식으로 전환 고려

비동기 방식, Kafka 도입

  • 선택 이유는 높은 처리량, 순서 보장, 적어도 한 번 전송 방식, 강력한 파티셔닝, 자연스러운 백프레셔 핸들링, 로그 컴팩션 같은 기능때문

높은 처리량

  • HTTP 기반으로 전달되는 이벤트일지라도 카프카로 처리되는 응답시간은 불과 한 자리 수의 ms 단위로 처리

순서 보장

  • 이벤트 처리 순서가 보장

적어도 한 번 전송 방식

  • 분산 네트워크 환경에서 중요한 것은 멱등성(동일한 작업을 여러번 해도 결과가 동일하다)
  • 메세지를 재전송하여 메시지 손실에 대한 걱정이 사라진다.
  • 시스템들이 중복 처리 가능하도록 허용된다면, 트랜잭션 처리 등이 필요 없어진다.

백프레셔 핸들링

  • 카프카의 클라이언트는 pull 방식으로 동작
  • push로 동작할 경우, 클라이언트의 부하를 관리하기 어려울 수 있음

강력한 파티셔닝

  • 논리적으로 토픽을 여러 개로 나눌 수 있다.
  • 다른 파티션들과 관계없이 처리할 수 있으므로 효과적인 수평 확장이 가능

카프카로 유턴한 트위터

이벤트 버스를 구축해 운영하던 트위터가 Kafka를 도입

vs 이벤트 버스

이벤트 버스

  • 서빙 레이어와 스토리지 레이어가 분리되어 있어 추가적인 홉이 필요
  • fsync() 사용하는 동안 블록킹

카프카

  • 카프카는 하나의 프로세스에서 스토리와 요청 모두 처리
  • OS에 의존해 백그라운드로 fsync()를 처리하고 제로 카피 사용

카프카로 처리할 수 있는 고민들

  • 동기/비동기 데이터 전송에 대한 고민이 있는가?
  • 실시간 데이터 처리에 대한 고민이 있는가?
  • 현재의 데이터 처리에 한계를 느끼는가?
  • 새로운 데이터 파이프라인이 복잡하다고 느껴지는가?
  • 데이터 처리의 비용 절감을 고려하고 있는가?

카프카 주요 특징

이 부분은 왜?라는 의문점이 많은데, 하나씩 찾아보는 걸로

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

  • 왜? 어떻게?

높은 확장성

  • 왜? 어떻게?

고가용성

  • 2013년에 클러스터 내 레플리케이션 기능을 추가
  • 개발자가 다른 작업없이 기본적으로 레플리케이션이 되는것인지?

내구성

  • 프로듀서의 acks 옵션을 조정하여 내구성을 강화할 수 있다. 어떻게?
  • 프로듀서에서 카프카로 전송되는 모든 메시지는 카프카의 로컬 디스크에 저장된다.
  • 컨슈머가 메시지를 가져가도, 삭제되지 않고 지정된 설정 시간 또는 로그의 크기만큼 보관된다.
  • 메시지들은 여러 브로커에 저장되므로, 브로커 한 대가 종료돼도 다른 브로커의 로컬 디스크에 저장된 내용으로 복구할 수 있따.

개발 편의성

프로듀서와 컨슈머 상세 동작

  • 메시지를 전송하는 프로듀서와 메시지를 가져오는 컨슈머가 완벽하게 분리되어 동작, 서로 영향을 쥦도 받지
    도 않는다.
  • 5장에서 다룸

카프카 커넥트(Kafka Connect)

  • 프로듀서와 컨슈머를 개발하지 않고도 카프카와 연동해 데이터를 보내고 받을 수 있는 애플리케이션

Schema Registry

  • 데이터 파싱하는데 시간을 쏟는 비효율적인 현실을 보완하고자 스키마를 정의해서 사용하는 애플리케이션
  • 8장에서 다룸

운영 및 관리 편의성

  • 7장에서 다룸

카프카의 성장

날짜버전내용
2013.12v0.8레플리케이션 추가
2015.02v0.8.2스키마 레지스트리 추가
2015.11v0.9카프카 커넥트 공개
2016.05v0.10카프카 스트림즈
2021.09v3.0주키퍼 의존성에서 해방

ETC

  • 데이터 처리 아키텍처 중 배치 파이프라인과 실시간 파이프라인이 있는 것을 람다 아키텍처
  • 위의 문제들을 해결하기 위한 카프카 기반의 Kappa 아키텍처 존재

Reference

0개의 댓글