iannamkr / TIL

Today I Learn
4 stars 0 forks source link

[Kafka] Expiring record(s) for topic :120000 ms has passed since batch creation #8

Open iannamkr opened 3 years ago

iannamkr commented 3 years ago

KafkaProducer는 RecordAccumulator를 두어서 가능하면 여러 Record를 하나의 RecordBatch로 묶으려 했고, 그 결과 압축과 전송 효율을 높일 수 있도록 구성되어 있다. 그리고 Sender Thread에서는 Java IO Multiplexing을 이용해서, 전송을 위한 별도의 Thread를 생성하지 않고도 효율적으로 전송을 함으로써 전송 성능도 크게 향상시킬 수 있었다.

새로운 RecordBatch를 생성할 때는 BufferPool에서 RecordBatch가 사용할 ByteBuffer를 받아온다. BufferPool의 전체 Size는 buffer.memory 설정에 의해서 결정된다. RecordBatch 생성을 위해 요청한 Buffer Size만큼의 여유가 없으면 할당이 Blocking되고 BufferPool에서 용량이 확보될 때까지 max.block.ms 설정값만큼 기다린다. max.block.ms 설정값만큼의 시간이 초과해도 확보되지 않으면 TimeoutException이 발생한다.

Therefore give a try for increasing request.timeout.ms

image

ref.