- 카프카는 클라이언트 API를 포함해서 배포되며, 이것을 사용해서 개발자는 카프카의 프로듀서와 컨슈머 애플리케이션 개발
프로듀서 개요
- 서로 다른 용도의 요구사항은 카프카에 메시지를 쓰는 프로듀서 API를 사용하는 방법과 구성에 영향을 줌
- 프로듀서 컴포넌트의 작업 처리 개요
- ProducerRecord 생성
- 토픽과 값 포함, 선택적으로 키와 파티션 지정
- 직렬화
- 파티셔너에서 파티션 선택
- 같은 토픽과 파티션으로 전송될 메시지들을 모아 배치처리
- 브로커는 메시지를 처리한 후 응답을 전송
- RecordMetadata 는 토픽, 파티션, 파티션 내부의 메시지 오프셋 생성
- 에러 발생시 몇번 더 재전송 후 에러 전송
카프카 프로듀서 구성하기
- 카프카 프로듀서 객체는 세 개의 필수 속성을 갖는다
- bootstrap.servers
- 프로두서가 사용하는 브로커들의 host:port 목록을 이 속성에 설정
- 모든 브로커의 host:port 정보를 포함할 필요는 없다. 그러나 최소한 두 개 중단대비
- key.serializer
- 메시지 키를 직렬화하기 위해 사용되는 클래스 이름을 이 속성에 설정
- 세가지 타입의 직렬화를 지원하는 ByteArraySerializer, StringSerializer, IntegerSerializer 포함
- value.serializer
- 메시지 전송 방식
- Fire-and-forget(전송 후 망각)
- 메시지 전송하고 성공 또는 실패에 따른 후속처리 x
- Synchronous send(동기식 전송)
- 작업이 완료될때까지 기다렸다가 처리 결과 반환
- Asynchronous send
- send 메서드를 호출할 때 콜백 메서드를 구현한 객체를 매개변수로 전달
- 응답을 받을때 자동으로 callback 메서드가 호출되므로 send가 성공적으로 수행되었는지 알 수 있음
카프카에 메시지 전송하기
- 프로듀서는 Producer Record 객체를 전송하므로 객체를 먼저 생성
- 생성자는 토픽 이름, 키, 값 을 인자로 받는다
- 키와 값의 타입은 직렬처리기와 프로듀서 객체에서 사용하는 타입이 같아야함
- 프로듀서 객체의 send() 메서드를 사용해서 레코드를 전송
- 메시지는 버퍼에 수록된 후 별개의 스레드에서 브로커로 전송된다
- 성공적으로 쓰면 RecordMetadata 반환, 이것을 받은 send 메서드는 Future 객체를 반환
- 카프카에 메시지를 전송하기 전에 프로듀서에서 에러가 생기면 예외 발생
- 직렬화 실패 SerializationException