728x90
목차
1. Producer란
•메시지를 생산해서 카프카의 토픽으로 메시지를 보내는 애플리케이션 서버
•프로듀서의 주요 기능은 각각의 메시지를 토픽 파티션에 매핑하고 파티션의 리더에 요청을 보내는 것이다
•키 값을 정해 해당 키를 가진 모든 메시지를 동일한 파티션으로 전송
( 키를 입력하지 않으면 라운드 로빈 방식으로 균등 분배 )
( 키를 입력하지 않으면 라운드 로빈 방식으로 균등 분배 )
2. send()로 메시지 보내는 방법
1) 메시지 보내고 확인하지 않기
- 프로듀서에서 서버로 메시지 보내고 성공적으로 도착했는지 확인하지 않음
- 메시지 손실 가능성이 있어 일반적인 서비스 환경에서는 사용하지 않음
2) 동기 전송
- 메시지를 보내고 send() 메소드의 future 객체를 리턴
- get() 메소드로 Future를 기다린 후 send()가 성공했는지 확인
- 에러가 없으면 RecordMetadata를 통해 파티션과 오프셋 정보 출력
- 신뢰성 있는 메시지 전송
3) 비동기 전송
- Send() 메소드를 콜백과 함께 호출
- 카프카 브로커에서 응답을 받으면 콜백
- 응답을 기다리지 않기때문에 빠른 전송
- 메시지를 보내지 못했을대 예외를 처리하게 해 에러를 기록하거나 향후 분석을 위해 에러 로그 등에 기록할 수 있음
3. 메시지 전송 방법
Acks 옵션 설정에 따라 메시지 손실 여부와 메시지 전송 속도 및 처리량이 달라진다.
방법1) 메시지 손실 가능성이 높지만 빠른 전송이 필요한 경우
- acks=0으로 설정한다.
- producer만 준비되면 즉시 보내기 때문에 빠르게 메시지를 보낸다.
방법2) 메시지 손실 가능성이 적고 적당한 속도의 전송이 필요한 경우
- acks=1로 설정한다.
[방법2 메시지 전송 과정]
1) Producer가 acks=1옵션으로 Leader에게 메시지를 보낸다.
2) Leader는 메시지를 받은 후 저장하고 Producer에게 메시지를 받았다고 acks를 보낸다.
3) Follower들은 Leader를 주기적으로 바라보고 있다가 Leader에 새로운
메시지가 있는 것을 확인하고 Follower들도 저장한다.
방법3) 전송 속도는 느리지만 메시지 손실이 없어야 하는 경우
- acks=all로 설정한다.
- producer가 메시지를 전송하고 난 후 leader가 메시지를 받았는지 확인하고 추가로 Follower까지 메시지를 받았는지 확인한다.
- 브로커의 설정까지 조정 (min.insync.replicas)
[방법3 메시지 전송 과정]
1)Producer가 acks=all 옵션으로 Leader에게 메시지를 보낸다.
2)Leader는 메시지를 받은후 저장하고, Producer에게 메시지를 받았다고 acks를 보낸다.
3)Follower들은 Leader를 주기적으로 바라보고 있다가, Leader에 새로운 메시지가 있는 것을 확인하고 Follower들도 저장한다.
4)Leader와 Follower들은 Producer에게 메시지를 받았다고 acks를 보낸다.
4. Producer 주요 옵션
- bootstrap.servers: 전체 카프카 리스트를 적어주는 것을 권장. 하나만 사용시 장애 발생시 불능
- acks
- Producer가 카프카 토픽의 리더에게 메시지를 보낸 후 요청을 완료 전 ack(승인)의 수
- 해당 옵션이 작으면 성능이 좋으나 메시지 손실 가능성이 있다.
- ack=0 : 어떠한 ack도 기다리지 않는다.
- ack=1 : 리더는 데이터를 기록하지만, 모든 팔로워는 확인하지 않는다.(손실 가능성 있음)
- ack=all, -1 : 리더는 ISR 그룹의 모든 팔로워로부터 데이터에 대한 ack을 기다림
- 권장 : 프로듀서는 ack=all, 브로커의 min.insync.replicas의 옵션은 2, 리플리케이션 팩터=3이다.
즉 리더신호 하나 팔로워신호 하나 총 2개만 ack되어도 손실 없이 유지 할 수 있다.
- Buffer.memory: producer가 카프카 서버로 데이터를 보내기 위해 잠시 대기 할 수 있는 전체 메모리 바이트
- Compression.type: 어떤 타입으로 압축할지를 결정
- Retreis: 일시적인 오류로 인해 전송에 실패한 데이터를 다시 보내는 횟수
- Batch.size : producer는 같은 파티션으로 보내는 여러 데이터를 함께 배치로 보내려고 시도한다. 정의된 크기보다 큰 데이터는 배치를 시도하지 않는다.
- Linger.ms : 배치 형태의 메시지를 보내기 전 추가적인 메시지들을 위해 기다리는 시간을 조정. 기본값=0 (지연없음)
4. 참고 문서
https://wiki.navercorp.com/pages/viewpage.action?pageId=565993281
https://12bme.tistory.com/529
728x90
'스터디 > Kafka' 카테고리의 다른 글
Kafka 아키텍처 및 동작방식(3)- Consumer, Polling, Rebalancing (0) | 2025.01.10 |
---|---|
Kafka 아키텍처 및 동작 방식(1) - Partition, Offset, Broker (0) | 2025.01.08 |
Kafka 주요 용어 정리 (0) | 2025.01.05 |
Kafka 구조 및 구성 요소, Pub/Sub 모델 (0) | 2025.01.04 |
Kafka 기본 개념 및 의미 (0) | 2025.01.03 |
댓글