개발자 공부 업무 정보/ETC

아파치 카프카

회님 2022. 10. 19. 16:04
반응형

데브원영님의

아파치 카프카 강의를 듣고 정리합니다.

 

  • 아파치 카프카 개요 및 설명
    • 기존 카프카
      • 데이터 전송소스 어플리케이션과 데이터를 받는 타겟 어플리케이션 (단방향)
      • 위의 소스 어플리케이션 개 수와 타겟 어플리케이션 개 수가 많아지기 시작
      • 위의 상황으로 장애대응이 어려워짐..
      • 추후 유지보수에도 어려움이 있음
    • 아파치 카프카
      • 기존 카프카의 복잡함을 해결하기 위해 등장
      • 링크드인에서 개발했으며 오픈소스 제공
      • 소스 어플리케이션과 타겟 어플리케이션의 커플링을 약하게 한다.
      • 토픽 → 큐
        • 큐에 데이터 넣는건 프로듀서
        • 큐에서 데이터를 받는건 컨슈머
      • 고가용성으로 서버 이슈나 갑작스런 랙이 내려간다거나하는 장애 대응이 가능
      • 빅데이터 처리는 카프카를 안쓰는 곳이 없다..

  • 아파치 카프카의 토픽
    • 카프카에서는 토픽을 여러개 생성 가능
      • 파일시스템의 폴더와 유사
      • 프로듀서가 해당 토픽에 데이터를 넣으며 컨슈머가 가져갈 수 있음
      • 토픽명은 데이터에 대한 정보를 확실하게 나타내어주는게 유지보수에좋음
      • 하나의 토픽은 여러개의 파티션으로 나눌 수 있음..
      • 각 파티션에는 offset으로 0부터 순서대로 데이터가 저장됨.
      • 컨슈머가 파티션내의 데이터를 가져가도 파티션 내의 데이터는 사라지지않음
        • 다른 컨슈머가 들어왔을때 또 0번부터 주기 위함
      • 클릭 로그를 분석하고 시각화 하기위해 엘라스틱서치에 저장하거나 클릭로그를 백업하기 위해 하둡에 저장하기도 함.
      • 파티션 두 개 이상인 경우 데이터를 보낼 때 키를 지정할 수 있음.
        • 만약 키를 설정 안 한다면 라운드 로빈으로 할당.
      • 파티션은 늘리는건 자유롭지만 줄일 수 는 없음.
      • 파티션의 레코드가 삭제되는 타이밍은
  • broker, replication, ISR (핵심요소 3가지)
    • 카프카의 가용성을 보장하는 가장 중요한 개념
    • broker
      • 브로커는 카프카가 설치되어있는 서버의 단위를 말한다
        • 보통 3개 이상의 브로커를 개설하는걸 추천
    • replication
      • 파티션의 복제를 말한다.
      • replication = 1 —> 파티션이 한 개라는 뜻
      • 브로커가 죽더라도 다른 브로커의 복제된 파티션으로 복구 가능

      • ack : 고 가용성을 유지할 수 있으며 replication 과 관계가 있다
        • 0, 1, 2, ALL 중 선택하여 적용
          • 0 : 프로듀서는 리더 파티션에 전송하고 응답 값은 받지 않는다
            • 때문에 리더파티션에 정상적으로 전송됐는지 팔로워들에 정상적으로 복제됐는지 확인불가
            • 속도는 빠르지만 데이터 유실 가능성이 있음

          • 1: 리더 파티션에 전송하고 정상적으로 받았는지 응답을 받는다
            • 다만 팔로워들에 정상적으로 복제됐는지는 확인하지 않는다.
            • 만약 리더파티션이 데이터를 받자마자 브로커에 장애가 생긴다면팔로워파티션에 정상적으로 복제되지 못하고
            • 복제가 되지 않았기에 ack.0과 같이 데이터 유실 가능성이 있다.

          • 2: 리더 파티션에 전송하고 응답을 받은 후 팔로우 파티션에도 데이터가 저장되어있는지

          • ALL : 데이터 유실은 없다. 하지만 0,1에 비해 확인하는 요소가 많아 속도가 많이 차이나게 된다.(많이 느림)
      • rep 가 많아지면 브로커의 리소스 사용량이 늘어나므로 무작정 늘리는건 좋지않음.
      • 3개 이상의 브로커 사용이다 → rep 3으로 적용
    • ISR : In Sync Replica
      • 브로커들의 리더, 팔로워 파티션들을 묶어 ISR이라고 부름

 

파티셔너

 

카프카 프로듀서의 중요개념

  • 동작설명
    1. 프로듀서가 데이터를 보내면
    1. 무조건 파티셔너를 통해서 브로커로 전송
    1. 파티셔너는 데이터를 어떤 토픽의 파티션에 넣을지 결정한다
      1. 레코드에 포함된 메시지의 키 또는 값에 따라 결정
  • 프로듀서에서 파티셔너를 설정하지 않을 경우
    • 디폴트 : UniformStickyPartitioner로 설정 된다.
  • UniformStickyPartitioner ( 파티셔너의 디폴트 )
    • 메시지 키가 있을 때와 없을 때 다르게 동작한다.
      • 키가 있을 때
        1. 파티셔너에 의해 hash(메시지 키) 생성 ⇒ 파티션 번호
          1. 동일한 메시지 키를 가진 값은 동일한 hash key를 만들기 때문에 항상 동일한 파티션에 들어가는 것을 보장한다.
          1. 따라서 순서를 지켜 데이터를 처리 할 수 있다.
            1. ex) 서울의 온도를 집어 넣을 때 Key ) 서울 → 동일 파티션에 순서대로 서울 온도가 들어감.
          1. 파티션 한개의 큐는 순서를 지켜준다.
        1. 위 생성된 hash값을 통해 어느 파티션으로 들어갈 지 결정을 한다.

         

      • 키가 없을 때
        1. 라운드 로빈 방식으로 동작한다.
        1. 프로듀서에서 배치로 모을 수 있는 최대한의 레코드들을 모아서 파티션 단위로 보낸다
        1. 알아서 적절히 분배 된다고 생각하면 됨

  • 파티셔너 인터페이스를 이용해 커스텀 파티셔너를 만들 수 있다.
    • AMQP 메시징 프로그램에서 우선순위를 넣는것과 같다
      • 커스텀 파티셔너는 직접 데이터를 어떤 토픽에 넣을지 선택할 수 있기에

 

카프카 컨슈머 랙 (Lag)

  1. 프로듀서가 마지막으로 넣은 데이터의 offset과 컨슈머가 마지막으로 읽은 offset의 차이를 말한다.
  1. 토픽에 여러 파티션이 존재하면 여러 Lag이 존재한다.그중 가장 높은 값을 records-lag-max라 부른다.

 

컨슈머 랙 모니터링

카프카 클라이언트 라이브러리를 사용하여 카푸카 컨슈머 구현 가능하다.

여기서 구현한 카프카 컨슈머 클래스를 이용해 현재 Lag정보를 가져올 수 있고 이는 모니터링이 가능하다.

 

Lag 실시간 모니터링

  • 데이터를 Elasticserch나 InfluxDB와 같은 저장소에 넣은 뒤Grafana 대시보드를 통해 확인 할 수 있다.

컨슈머 로직단에서 랙을 모니터링하는건 좋지않다.

컨슈머에 부담이가거나 장애가 생기면 랙 모니터링을 할 수 없기에 ..

링크드인에서 이에따라 Burrow를 만들었다.

 

Burrow

  • 컨슈머의 lag 모니터링을 도와주는 독립적인 어플리케이션
  • 특징
    1. 멀티 카프카 클러스터 지원
    1. 슬라이딩 윈도우를 통한 컨슈머의 상태 확인
      1. error warn ok
    1. HTTP API 제공

카프카, 레빗엠큐 레디스 큐의 큰 차이점

구분 메시지 브로커 이벤트브로커
사용처 대기업의 메시지 기반 미들웨어 아키텍처에서 사용 서비스에서 나오는 이벤트를 마치 데이터베이스에 저장 하듯이 이벤트 브로커의 큐에 저장한다.
특징 메시지를 받아서 처리하고 나면 즉시 또는 빠른시간에 삭제 된다. 이벤트, 메시지 를 하나만 보관하고 인덱스를 통해 개별 엑세스 관리 데이터 처리하고도 삭제하지 않는다
장점   1. 딱 한번 일어난 이벤트 데이터를 브로커에 저장 하므로써 단일 진실 공급원으로 사용가능.

2. 장애가 일어났을때 장애가 일어난 곳에서부터 재처리 가능

3. 많은 양의 실시간 스트림 데이터를 실시간 처리 가능

4. 이벤트 브로커로 클러스터를 구축하면 이벤트 기반 마이크로 서비스 아키텍처로 발전하는데에 아주 중요한 역할을 할 뿐만 아니라 메시지 브로커 역할도 가능하다.
종류 레디스 큐 레빗 엠큐 등 카프카 , 키네시스( AWS )

 

 

 

※ 단어 참고

 

offset : 프로듀서가 토픽에 데이터를 전송하면 파티션에 0부터 차례대로 증가하며 번호를 매겨 적재된다. 여기서 매겨진 번호가 offset이다

 

미들웨어 : 서비스하는 어플리케이션들을 보다 효율적으로 아키텍처들을 연결하는 요소들로 작동하는 소프트웨어 ex) 메시징 플랫폼, 인증 플랫폼, 데이터베이스 등..

 

 

반응형