Kafka 컨슈머

1 minute read

Consumer

프로듀서가 전송한 데이터는 카프카 브로커에 적재된다. 컨슈머는 적재된 데이터를 사용하기 위해 브로커로부터 데이터를 가져와서 필요한 처리를 한다.

예를 들어, 마케팅 문자를 고객에게 보내는 기능이 있다면 컨슈머는 토픽으로부터 고객 데이터를 가져와서 문자 발송 처리를 하게된다.


내부구조

카프카 클러스터 → Fetcher(completedFetchers) → poll → ConsumerRecords

  1. Fetcher : 리더 파티션으로부터 레코드들을 미리 가져와서 대기한다.
  2. poll() : Fetcher에 있는 레코드들을 리턴하는 함수이다.
  3. ConsumerRecords : 처리하고자 하는 레코드들의 모음이다. (오프셋이 포함되어 있다)

컨슈머 그룹

컨슈머 그룹으로 운영하는 방법은 컨슈머를 각 컨슈머 그룹으로부터 격리된 환경에서 안전하게 운영할 수 있도록 도와주는 카프카의 독특한 방식이다.

컨슈머 그룹으로 묶인 컨슈머들은 토픽의 1개 이상 파티션들에 할당되어 데이터를 가져갈 수 있다. 컨슈머 그룹으로 묶인 컨슈머가 토픽을 구독해서 데이터를 가져갈 때, 1개의 파티션은 최대 1개의 컨슈머에 할당 가능하다. 그리고 1개 컨슈머는 여러개의 파티션에 할당될 수 있다.

이러한 특징으로 컨슈머 그룹의 컨슈머 갯수는 가져가고자 하는 토픽의 파티션 갯수보다 같거나 작아야 한다.

  • 컨슈머 그룹의 컨슈머가 파티션 갯수보다 많을 경우
    • 만약 4개의 컨슈머로 이루어진 컨슈머 그룹으로 3개의 파티션을 가진 토픽에서 데이터를 가져가기 위해 할당하면 1개의 컨슈머는 파티션을 할당받지 못하고 유휴 상태로 남게 된다.
    • 파티션을 할당받지 못한 컨슈머는 스레드만 차지하고 실질적인 데이터 처리를 하지 못하므로 애플리케이션 실해에 있어 불필요한 스레드로 남게 된다.
  • 컨슈머 그룹을 활용하는 이유
    • 운영 서버의 주요 리소스인 CPU, 메모리 정보를 수집하는 데이터 파이프라인을 구축한다고 가정해 보자.
    • 실시간 리소스를 시간순으로 확인하기 위해서 데이터를 엘라스틱서치에 저장하고 이와 동시에 대용량 적재를 위해 하둡에 적재할 것이다.

-->

Categories:

Updated:

Comments