일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- notification
- 카프카 트랜잭션
- nginx
- JPA
- redis
- 레디스
- 성능
- NoSQL
- 푸시 번역
- 카프카
- Java
- nginx설정
- Push
- 디자인패턴
- nginx설치
- GCM
- 웹사이트성능
- GCM 번역
- 자바스크립트
- 푸시
- 웹사이트최적화기법
- kafka
- git
- gcm 푸시 번역
- 웹사이트 성능
- 페이스북 번역
- APNS
- Design Pattern
- php
Archives
- Today
- Total
간단한 개발관련 내용
CHAPTER4. 카프카 컨슈머: 카프카에서 데이터 읽기 본문
반응형
카프카 완벽 가이드 4장 요약: 컨슈머
4.1 카프카 컨슈머: 개념
컨슈머와 컨슈머 그룹:
- 컨슈머는 보통 컨슈머 그룹의 일부로 동작하며, 동일 그룹의 컨슈머들은 서로 다른 파티션의 메시지를 읽는다.
- 파티션보다 많은 컨슈머를 추가하면 일부는 유휴 상태가 됨.
- 컨슈머 그룹별 데이터 분리: 애플리케이션마다 별도 그룹 생성 필요.
- 컨슈머를 추가해 그룹 확장 시, 각 컨슈머는 일부 메시지만 처리.
리밸런스(rebalance):
- 파티션 재할당 과정으로, 컨슈머 추가/종료/충돌, 토픽 변경 시 발생.
- 리밸런스 전략:
- 조급한 리밸런스: 모든 컨슈머가 소유권 포기 후 재할당. 전체 작업 중단 위험.
- 협력적 리밸런스: 파티션 일부만 재할당해 중단 최소화.
정적 그룹 멤버십:
group.instance.id
설정 시, 컨슈머 종료 후에도 그룹 멤버십 유지.- 리밸런스 없이 기존 할당 파티션 유지 가능.
4.2 카프카 컨슈머 생성
- 컨슈머 인스턴스 생성에는 기본 설정 필요:
bootstrap.servers
key.deserializer
value.deserializer
4.3 토픽 구독
- 컨슈머는 하나 이상의 토픽을 구독 가능.
- 정규식 구독: 동적 토픽 구독에 유용하지만 오버헤드가 발생할 수 있음.
4.4 폴링 루프
- poll() 메서드:
- 서버에서 새로운 데이터를 읽어오는 루프.
- 메시지 처리:
record.topic()
,record.partition()
,record.offset()
등을 사용.
- 스레드 안전성:
KafkaConsumer
는 스레드 안전하지 않으므로, 각 스레드에 별도 컨슈머를 생성하거나 작업 스레드와 분리해야 함.
4.5 컨슈머 설정
중요 설정:
- 데이터 크기 및 시간:
fetch.min.bytes
: 최소 데이터량.fetch.max.wait.ms
: 데이터 수집 대기 시간.fetch.max.bytes
: 최대 응답 크기.
- 파티션 및 메시지 처리:
max.poll.records
: 폴링당 최대 레코드 수.max.partition.fetch.bytes
: 파티션별 최대 바이트 수.
- 세션 및 타임아웃:
session.timeout.ms
: 컨슈머가 살아 있다고 간주되는 시간.heartbeat.interval.ms
: 하트비트 간격.max.poll.interval.ms
: 폴링 간 최대 시간.request.timeout.ms
: 브로커 응답 대기 시간.
- 오프셋 관리:
auto.offset.reset
: 커밋되지 않은 오프셋의 처리 방식. (latest
기본값)enable.auto.commit
: 자동 커밋 여부. (false
권장)
- 데이터 크기 및 시간:
파티션 할당 전략:
- Range, RoundRobin, Sticky, Cooperative Sticky 지원.
4.6 오프셋과 커밋
오프셋 커밋:
- 메시지 처리 후 성공적으로 처리된 마지막 메시지의 오프셋을 커밋.
- 커밋 정보는
__consumer_offsets
토픽에 저장.
자동 커밋:
enable.auto.commit=true
설정 시 기본 5초 간격으로 자동 커밋.- 크래시 발생 시 중복 메시지 가능성.
수동 커밋:
enable.auto.commit=false
설정.- 동기/비동기 커밋 조합으로 효율적 처리.
4.7 리밸런스 리스너
- 리밸런스 전후 작업을 처리하는 리스너 제공:
onPartitionsAssigned
: 파티션 할당 시 호출.onPartitionsRevoked
: 파티션 해제 시 호출.onPartitionsLost
: 파티션 손실 시 호출.
4.8 특정 오프셋 읽기
- 특정 오프셋에서 읽기:
seekToBeginning()
,seekToEnd()
로 시작점 설정.- 특정 오프셋으로 이동 가능.
4.9 폴링 루프 종료
- 컨슈머 종료:
consumer.wakeup()
호출로 폴링 루프를 안전하게 중단.- 종료 시
consumer.close()
호출로 리소스 정리.
4.10 디시리얼라이저
이벤트를 애플리케이션에서 처리 가능한 형태로 변환.
Serdes:
- Serializer와 Deserializer를 묶어서 제공.
- 직렬화/역직렬화 간 호환성 중요.
커스텀 디시리얼라이저:
- 직접 구현 가능하지만 권장되지 않음.
- Avro 및 스키마 레지스트리를 사용하는 것이 일반적.
4.11 독립 실행 컨슈머
- 컨슈머 그룹 없이 독립적으로 사용 가능.
4.12 요약
- 컨슈머 그룹과 리밸런스의 작동 방식을 이해하고 신뢰성 있는 오프셋 커밋 전략을 세우는 것이 중요.
- 디시리얼라이저와 데이터 처리 방식을 명확히 설정하여 데이터의 호환성을 보장.
반응형