카프카 kafka 정리 2

도서 정리 - 아파치 카프카 애플리케이션 프로그래밍 with 자바 (최원영)

  • 카프카 토픽

    • 토픽은 관계형DB에서 테이블과 같으며 토픽 안에는 파티션이 있다

    • 프로듀서 -> 파티션에 적재 -> 컨슈머

    • 모든 파티션에 적재되는 것이 아닌 하나의 파티션에 적재된다

    • queue 자료구조

      • 파티션에 들어있는 데이터를 순차적으로 소비한다

      • 파티션에 있는 데이터는 삭제되지 않는다 -> 한 번 더 가져갈 수 있다

      • 가져간 offset이 커밋(기록)된다

         

 


 

  • 카프카 특징

    1. 높은 데이터 처리량

      • 데이터를 묶어서 송수신하여 네트워크 통신횟수를 최소화

      • 파티션에 나눠 병렬처리

      • 컨슈머도 파티션 개수만큼 늘려 처리량 높인다

    2. 직렬화, 역직렬화로 데이터 타입이 상관 없다

    3. 확장성

      • 브로커 늘려서 scale out

    4. 영속성

      • 처리지점을 알면 재처리 가능

      • 파일시스템에 저장함으로써 장애발생해도 서버 재가동으로 복구

      • 페이지 캐시 메모리에 저장함으로써 속도 개선

    5. 고가용성

      • 프로듀서로 전송받은 데이터는 여러 브로커에 동시 저장(replication)하기 때문에 서버 장애가 발생되어도 처리가 가능하다

      • 3대부터 데이터 유실, 지연 없는 완전 복제가 가능하다

 


 

  • 카프카 프로듀서와 컨슈머

    • 프로듀서 -> 카프카 클러스터(적절한 토픽) -> 컨슈머

    • 프로듀서

      • 프로듀서 API는 카프카의 시작점

        • send는 비동기 응답

        • 메세지 키를 보낼 수도 있고, 커스텀 파티셔너를 생성할 수도 있다

          • 파티션 지정 가능 

      • 직렬화를 통해 바이너리 데이터(동영상)도 전송 가능

    • 컨슈머

      • 컨슈머 그룹을 기준으로 오프셋을 관리함

      • poll로 데이터를 가져온다

      • while(true)와 같은 반복문을 통해 지속적인 데이터 처리를 한다

      • poll하고 commitSync를 통해 수동 오프셋 커밋을 하면 데이터 유실 및 중복을 엄격하게 관리 가능

      • commitAsync 덜 엄격한 커밋

      • 리밸런싱

        • 컨슈머가 추가 또는 제거될 때 파티션을 컨슈멍에 재할당하는 것

      • shutdown hook -> WakeUpException -> 종료처리

 


 

  • 카프카 스트림즈

    • 토픽 -> 스트림즈(stateless) -> 토픽

    • 스트림즈 DSL과 프로세서 API 제공

      • 스트림즈 DSL은 많은 기능을 가진 인터페이스를 제공

    • 태스크(Task)

      • 데이터 처리 최소단위

    • 소스(root) 프로세서 -> 스트림 프로세서(처리) -> 싱크 프로세서

       

    • Kstream 키 값 형태, Ktable 유니크한 키 기준으로 데이터 처리(최신 데이터)

    • StreamsBuilder.stream()에서 스트림 정의

      • StreamsBuilder.filter()

      • StreamsBuilder.join()

      • StreamsBuilder.to() - sync 프로세서로 보낸다

    • KafkaStreams.start()

      • 스트림 빌더에서 정의한 스트림을 실행

    • 프로듀서

      • Properties에 각 프로세서 지정

      • Topology.addSource().addProcessor().addSink()




  • 카프카 커넥트; 특정 작업을 템플릿화한 것

    • 프로듀서

      • 소스 커넥터; 데이터 전송

      • SourceConnector

        • 설정 정의

      • SourceTask

        • 데이터를 토픽으로 전송

    • 컨슈머

      • 싱크 커넥터; 데이터 처리

      • 메서드 재정의하여 사용

    • 컨버터 생성하여 사용 가능

    • 단일모드 커넥트, 분산모드 커넥트(2대 이상)




  • 파티션

    • 토픽 안의 파티션 개수를 줄이는 것은 지원하지 않는다

      • 파티션 수를 줄이려면 토픽을 삭제해야한다

      • 파티션 수는 첫 번째로는 프로듀서의 송신량을 고려하고

      • 두 번째로는 컨슈머의 수신량을 고려해야한다

      • 보통 컨슈머 처리량에 따라 파티션 개수를 맞춘다

    • 파티션은 카프카 병렬처리의 핵심이다

      • 컨슈머 처리량을 늘리거나 컨슈머를 추가하여 병렬처리량을 늘려 데이터 처리의 속도를 개선한다

      • (메세지 키를 사용하는 컨슈머의 경우 파티션의 개수가 달라질 경우 특정 메세지 키의 파티션의 순서를 보장받지 못하는 문제가 있을 수 있다)


 

  • 컨슈머 랙Lag

    • 토픽의 최신 오프셋과 컨슈머 오프셋의 차이

    • 일시적으로 파티션과 컨슈머를 늘리는 방법도 있다

    • 컨슈머 랙 모니터링 툴; 카프카 버로우

  • 프로듀서 설정/옵션

    • 프로듀서 acks

      • 1은 리더 파티션에만 저장

      • all or -1은 전부 저장

    • 멱등성 프로듀서; 한 번만 저장

      • enable.idempotence true

    • 트랜잭션 transactional.id를 설정하면

      • 프로듀서와 컨슈머는 트랜잭션 레코드가 존재하는 데이터만 처리한다

  • 멀티스레드 컨슈머

  • 카프카 미러메이커

 

 

댓글을 작성해보세요.

채널톡 아이콘