인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

채채님의 프로필 이미지
채채

작성한 질문수

[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!

레코드 전송 결과를 확인하는 프로듀서 애플리케이션

ProducerWithSyncCallback 코드 관련 질문

작성

·

173

0

안녕하세요, ProducerWithSyncCallback 코드에서 궁금한 점이 있어 질문 남깁니다.

try {
  RecordMetadata metadata = producer.send(record).get();
  logger.info(metadata.toString());
} catch (Exception e) {
  logger.error(e.getMessage(), e);
} finally {
  producer.flush();
  producer.close();
}

예제로 보여주신 위 코드에서 producer.flush() 코드가 배치 사이즈만큼 레코드가 쌓이는 걸 기다리지 않고 바로 레코드를 브로커로 보내는 코드로 알고 있는데, producer.flush() 코드가 finally에 있는 것이 의아해서 질문드립니다.

producer.send 호출 후 linger.ms 가 0이라서 바로 브로커로 보내지고 해당 결과를 기다리던 get이 결과를 받아 logger.info 를 호출한 것으로 이해했는데요, 그럼 위 예제에서 producer.flush()는 불필요한 코드로 보면 될까요?

제가 잘못 이해하고 있는 부분이 있는지 확인 부탁드립니다:)

답변 1

1

데브원영 DVWY님의 프로필 이미지
데브원영 DVWY
지식공유자

안녕하세요 조채은님,

이해하신대로, get()이 결과를 받기까지 기다립니다. 그렇기 때문에 위 코드에서 flush()는 큰 의미가 없다고 보면 됩니다.

채채님의 프로필 이미지
채채

작성한 질문수

질문하기