카프카 데이터 시작점은 프로듀서이다. 프로듀서는 데이터를 직렬화하여 리더 브로커의 특정 토픽 파티션에 전송한다.
카프카 라이브러리로 간단하게 producing 해보는 코드였음
프로듀서는 레코드를 배치 전송한다. 모아두고 특정 사이즈 이상이면 브로커로 전달함으로써 향상된 성능을 꾀한다. 또한 압축을 제공하지만 CPU 사용량과의 트레이드 오프이다. 압축을 진행하면 컨슈머에서도 압축을 풀어야한다. 레코드를 특정 파티션으로 보내는 옵션도 존재한다.
| 옵션 | 설명 | 필수 여부 |
|---|---|---|
| bootstrap.servers | 프로듀서가 데이터를 전송할 대상 카프카 클러스터의 브로커 주소 | 필수 |
| key.serializer | 메시지 키 직렬화 클래스 | 필수 |
| value.serializer | 메시지 값 직렬화 클래스 | 필수 |
| acks | 0, 1, -1 로 파티션에 어디까지 전송 성공을 성공으로 볼 것인가 | 옵션 |
| buffer.memory | 브로커로 전송할 데이터 배치 버퍼 메모리양 (기본값: 32MB) | 옵션 |
| retries | 브로커로부터 에러를 받을 때 재전송 시도 횟수 | 옵션 |
| batch.size | 배치로 전송할 레코드 최대 용량 | 옵션 |
| linger.ms | 배치 전송전까지 기다리는 최소 시간 | 옵션 |
| partitioner.class | 레코드를 파티션에 전송할때 적용할 파티셔너 클래스 | 옵션 |
| enabled.idempotence | 멱등성 프로듀서로 동작할지 여부 | 옵션 |
| transactional.id | 레코드 전송 시 레코드를 트랜잭션 단위로 묶을지 | 옵션 |
같은 메시지 키를 가진 데이터는 같은 파티션에 들어간다. 혹은 파티션 번호를 직접 지정해줄수도 있다.
Partitioner 인터페이스를 구현하여 커스텀 파티셔너를 등록할 수 있다.
컨슈머는 프로듀서가 적재한 데이터를 사용하기 위해 브로커로부터 데이터를 가져와서 처리한다.