카프카 프로듀서
카프카 프로듀서는 브로커에 존재하는 토픽에 메시지를 전달하는 역할을 담당합니다.
- Topic 에 해당하는 메시지를 생성 후 해당 Topic으로 데이터를 publish 한다.
또한, 메시지 전송이 실패할 경우, 재전송을 한다.
카프카 프로듀서는 브로커로 메시지를 보낼때 파티션 Key 도 함께 보낼 수 있습니다. 브로커는 파티션 Key 의 유무에 따라 데이터를 저장하는 방식이 달라집니다.
파티션 Key 가 null 인 데이터 전송
Topic 에 Partition 이 한개인 경우는 데이터들이 순차적으로 쌓이게 된다. Topic 에 Partition 이 여러개인 경우 Round Robin 형식으로 데이터가 쌓이게 된다.
파티션 Key 를 전송할 경우
Kafka 는 Key 를 특정한 Hash 값으로 변형 시켜 Partition 과 1:1 매칭을 시킵니다. 각 파티션에 동일 Key 의 Value 만 쌓이게 된다. Partition 의 개수와 Key 의 개수가 일치하지 않는 경우 Key 와 Partition 의 매칭이 깨지게 돼 Key 와 Partition 연결은 보장되지 않습니다.
Ack 옵션
카프카 Producer 에는 Ack 라는 상세 옵션이 있고 Partition 의 Replication 과 관련이 있다.
Ack 는 0, 1, All 옵션 3개중 하나를 선택할 수 있습니다.
Ack 가 0일 경우 Producer 는 Leader Partition 에 데이터를 전송하고 응답값은 받지 않습니다. Leader Partition 에 데이터가 정상적으로 전송 됐는지, 나머지 Partition 에 정상적으로 복제 됐는지 알 수 없고 보장할 수 없습니다. 속도는 빠르지만 데이터가 유실 될 가능성이 있습니다.
Ack 가 1일 경우 Leader Partition 에 데이터를 전송하고 응답값을 받는다. 나머지 Partition 에 데이터가 복제 됐는지는 알 수 없다. Leader Partition 이 데이터를 받은 즉시 Broker 가 장애가 난다면 나머지 Partition 에 데이터
Ack 가 All 일 경우 Follow Partition 에 복제가 잘 일어났는지 응답 값을 받는다. 확인하는 부분이 많아 속도가 현저히 느리다.