본문 바로가기

Kafka10

9. Kafka - Producer 메커니즘 1 Kafka Producer의 내부 배치 전송 방식 1) KafkaProducer.send() 2) Serializer -> 직렬화 3) Partitioner -> 파티셔닝 4) Compression -> 압축 방식 5) Record Accumulator 6) Sender 이렇게 send 메서드부터 Sender까지 총 6단계로 이루어져 있다. 1. KafkaProducer.send() .send()는 호출 시마다 하나의 ProducerRecord를 입력하지만 내부 메모리에서 파티션에 나뉘는 것에 따라 Record Batch 형태로 전송된다. buffer.memory 설정 크디만큼 메모리에 보관하였다가 send되며 여러 개의 batch들로 한꺼번에 전송될 수 있다. 이것은 카프카의 Main Thread에 의.. 2024. 4. 4.
8. Kafka - Idempotence, 멱등성 1. 최대 한 번 전송 (at most once) acks = 0으로 비동기로 전송만 한 번 수행, 유실될 수 있지만 재전송하지 않는 방법. 2. 적어도 한 번 전송 (at least once) 중복을 허용하며 실패시에도 retry로 재전송, acks = 1, all 브로커로부터 ACK를 받고 다음 메시지를 전송. 메시지 소실은 없지만 중복 전송을 할 수 있음. 데이터를 보낸 후, 저장 되었지만 ACK를 보내지 못한 경우 다시 보내게 되어 중복이 가능. 3. 정확히 한 번 전송 (exactly once) 중복 없이 전송(Idempotence, 멱등성), 메시지 전송 재시도 시 중복을 제거함 트랜잭션 기반의 전송. Producer가 메시지를 전송할 때 프로듀서의 ID와 메시지 Sequence를 Header.. 2024. 4. 4.
7. Kafka Producer 메시지 전송과 재전송 옵션 max.block.ms send() 호출 시 Record Accumulator가 꽉 차서 입력되지 못하여 block 되는 최대 시간. 초과되면 Timeout Exception이 발생. linger.ms Record Accumulator에서 Sender Thread로 보내는 대기 시간. 즉 Producer가 메시지를 보낸 후 지정된 시간 동안 대기하여 모아서 처리하게 됨. request.timeout.ms Sender Thread에서 Broker로 메시지를 송신한 후 응답을 기다리는 시간.응답이 오지 않는 경우 재전송을 하거나 Timeout Exception 발생. retry.backoff.ms 재전송 시도를 하기 위한 대기 시간 delivery.timeout.ms 전송과 재전송을 하는 과정에서 허용된 최.. 2024. 4. 4.
6. Kafka - Java Kafka Clients의 Send 메소드 카프카 클라이언트를 개발할 때 보통 자바를 쓴다. Producer Client의 별도 Thread 가 전송을 담당한다는 점에서 기본적으로 Thread간의 비동기 전송이다. 즉 Main Thread가 있고, Serializer를 통해 전송하려는 데이터를 일련의 바이트로 변환한다. 즉 객체나 데이터를 바이트스트림으로 변환하여 Partitioner를 거쳐 이전에 학습했던 대로 파티션 별로 별도의 배치에 따라 담겨진 후 Sender에게 보내지는데, Sender는 메인 쓰레드가 아닌 별도의 Send Network Thread가 전송하게 된다. 1 2 3 4 5 6 Main Thread Send Network Thread DATA.send() Serializer Partitioner Topic Partition#1.. 2024. 4. 4.