본문 바로가기
Message Streaming Platform/Kafka

1. 카프카 컨슈머 소개

by 댓츠굿 2022. 11. 21.

프로듀서가 전송한 데이터는 카프카 브로커에 적재된다. 컨슈머는 적재된 데이터를 사용하기 위해 브로커로부터 데이터를 가져와서 필요한 처리를 한다. 예를 들어, 마케팅 문자를 고객에게 보내는 기능이 있다면 컨슈머는 토픽으로부터 고객 데이터를 가져와서 문자 발송 처리를 하게 된다.

 

토픽에 데이터가 들어오면 컨슈머를 사용 - 컨슈머 애플리케이션 생성

컨슈머 애플리케이션 - 데이터베이스에 데이터를 저장한다던가 다른 애플리케이션과 통신. ex) SMS, EMAIL

 

 

- Fetcher : 리더 파티션으로부터 레코드들을 미리 가져와서 대기.

- poll() : Fetcher에 있는 레코드들을 리턴하는 레코드.

- ConsumerRecords : 처리하고자 하는 레코드들의 모음. 오프셋이 포함되어 있음.

 

1. 카프카 클러스터. 즉, 리더 파티션에 있는 브로커가 데이터를 보내면 Fether가 우선적으로 데이터를 받게 된다.

그렇게 해서 completedFetches. 데이터를 충분히 받게 되면, 내부에서 poll() 메서드를 통해서 데이터를 처리할 ConsumerRecords 객체를 받게 된다. 리스트로 데이터를 Array 같이 하나하나씩 처리하거나 병렬로 처리할 수 있다.

특이한 점은 poll() 함수를 호출하기 전에 이미 데이터를 가져온다는 점이다. 그렇기 때문에 poll()을 조금 늦게 하더라도, 즉 레코드의 처리속도가 늦더라도 충분히 이미 데이터를 가지고 왔기 때문에 거기에서 처리하는 만큼 속도를 유지하면서 처리해도 된다.

 

가져올 때도 카프카 클러스터, 즉 브로커에서 리더 파티션에 있는 데이터를 가져올 때 다 배치로 미리 가져오는 형태이기 때문에 데이터 처리속도가 매우 빠르더라도 크게 걱정할 필요가 없다.

 

ConsumerRecords는 처리하고자 하는 레코드들의 모음. 프로듀서에서 보낸 레코드는 브로커에 저장될 때 오프셋이 저장된다. 이렇게 저장된 오프셋은 레코드에서 오프셋을 확인할 수 있게 되고 처리가 완료되었다면 커밋이라는 과정을 통해서

우리는 0번 오프셋에 있는 레코드까지 처리했어

우리는 1번 오프셋에 있는 레코드까지 처리했어

이런식으로 판단하게 되는 것이 바로 커밋이라는 과정이 있다.

 

실제로 처리를 완료한 레코드에 대해서는 반드시 커밋을 수행해야 정상적으로 컨슈머가 처리되었다라는 것을 보장할 수 있게 된다.

 

 

참고) 인프런 - 아파치 카프카 애플리케이션 프로그래밍

반응형