[kafka] 2.Kafka의 요청 처리 방식

Kafka는 메시지 큐 시스템으로 크게 2가지의 사용 전략이 있다. 일반 적으로 분산 메시지 큐로 사용하거나, 데이터 허브로 사용 할 수 있다.

그 중 데이터 허브로 사용하면서 하나의 클러스터에 데이터를 집중 시키면, 데이터를 한 곳에서 관리하면서 운영 효율이 증가하게 된다.

Kafka 요청 처리 방식

Kafka는 요청을 처리할 때 크게 두 개의 스레드 레이어를 사용한다.

  1. 네트워크 스레드

    • 이벤트 루프를 처리하는 스레드
    • 클라이언트와의 이벤트 기반 비동기 I/O 처리를 수행
    • 클라이언트 소켓에 도착한 request을 가져와서 request 객체를 생성하고, 준비된 response 객체를 클라이언트 소켓에 입력하는 역할

    kafka-eventloop-thread.png

  2. 요청 핸들러 스레드

    • 네트워크 스레드가 가져온 요청의 내용을 처리해서 필요한 응답 객체를 네트워크 스레드에 반환 하는 역할

Kafka 전체 흐름

  1. 요청 읽기

    1. 클라이언트 소켓에 요청 도착

    2. 네트워크 스레드가 요청을 가져와 request 객체를 생성하고 request queue에 저장

      request queue는 브로커 내에 하나만 존재 한다.

    3. 모든 요청 핸들러 스레드가 request queue를 pulling하면서 요청을 가져온다.

    kafka-request-read

  2. 요청 처리

    1. 요청 핸들러 스레드가 큐에서 요청을 가져오면 작업을 처리하고 response 객체를 생성하고 response queue에 저장한다.

      response queue는 네트워크 스레드 당 한개씩 존재한다.

    kafka-request-handling

  3. 응답 쓰기

    1. 네트워크 스레드가 response queue에서 response를 가져와 클라이언트 소켓에 입력해서 처리를 완료한다.

    kafka-response-write