[ 컨슈머 ]
컨슈머는 파티션에서 레코드를 가져와(Subscribe) 데이터를 처리할 수 있습니다.
컨슈머를 역할에 따라 묶은 것을 컨슈머 그룹이라고 부릅니다. 컨슈머 그룹에는 1개 이상의 컨슈머가 있어야 합니다.
컨슈머 그룹은 아래와 같이 어떤 특정 토픽에 대해 데이터를 병렬 처리할 수 있습니다.
단, 아래와 같이 컨슈머가 파티션의 개수보다 많다고 해도 파티션은 최대 하나의 컨슈머에 할당 가능합니다.
[ 목적에 따른 컨슈머 그룹 ]
서로 다른 역할에 따라 컨슈머 그룹을 나누고 데이터를 처리하면, 커플링 약하게 동일한 데이터를 여러 번 처리할 수 있습니다. 둘중 하나의 컨슈머 그룹의 장애가 생기더라도 나머지 컨슈머 그룹이 영향 없이 데이터를 처리할 수 있는 것입니다.
** 엘라스틱 서치는 시간 순서대로 데이터를 검색하던가, 문자열 데이터로 데이터를 검색할 때 사용
** 하둡 적내는 데이터를 오랜 기간 안전하게 적재하기 위한 용도로 사용
[ 컨슈머의 오프셋 커밋 ]
컨슈머는 오프셋 커밋을 통해서 데이터를 어디까지 처리했는지 저장합니다. 예를들어 컨슈머가 파티션#0의 1번 오프셋 레코드를 처리 완료하면, 컨슈머는 "커밋"이라는 명령어를 통해 1번까지 처리했고, 다음 처리할 레코드는 2번이라는 것을 알 수 있습니다. 그리고 2번 오프셋 레코드를 처리하는 도중 이슈가 발생하면, 마지막 커밋이 된 오프셋이 1번임을 보고 2번 레코드부터 다시 처리를 시작합니다.
그러므로 컨슈머를 구현할 때에는 정말로 데이터 처리가 완료되었을 때에 오프셋 커밋을 해야 데이터의 유실 없이 안전하게 처리할 수 있습니다.
[ 어느 오프셋부터 가져갈까? ]
** 기본 설정은 auto.offset.reset = latest
. 가장 최신 오프셋의 레코드부터 가져감
. 컨슈머는 파티션#0의 5번 오프셋 레코드, 파티션#1의 3번 오프셋 레코드 부터 가져감
감
** auto.offset.reset = earlist 로 설정하면
. 각 파티션의 오프셋 중 가장 낮은 숫자부터 가져감
. 컨슈머는 파티션#0의 0번 오프셋 레코드, 파티션#1의 0번 오프셋 레코드 부터 가져감
이미 데이터들이 토픽에 들어와 있는 상태에서, 새로운 컨슈머를 실행시킨다면 auto.offset.reset = earlist 로 설정해야 모든 데이터를 다 처리할 수 있을 것입니다 ^^;
'~2022 > Apache Kafka' 카테고리의 다른 글
[Kafka] 기본 개념 (0) | 2022.03.16 |
---|---|
[Apache Kafka] 10. 프로듀서와 컨슈머의 트랜잭션 (0) | 2021.11.11 |
[Apache Kafka] 8. 복제 (0) | 2021.11.11 |
[Apache Kafka] 7. 프로듀서 (0) | 2021.11.11 |
[Apache Kafka] 6. 카프카 클러스터 (0) | 2021.11.11 |