Full of Troves, Blog
Development Blog
-
[Kafka]한번에 여러 건의 메시지를 컨슘하는 BatchListener (feat. 멀티 스레드)
보통 일반적인 카프카 리스너는 public void consumeTest(ConsumerRecord<String, TestDto> record, ConsumerRecordMetadata meta)에서 볼 수 있듯이 ConsumerRecords가 아닌 ConsumerRecord 단수 파라미터를 받게 된다. 한번에 하나의 레코드만 받아다가 하나의 메시지를 처리할 수 있다. 카프카 리스너를 일종의 배치처럼 특정 타이밍마다 혹은 어느정도의 메시지가 쌓였을 때만 컨슘하여 메시지를 한번에 처리할 수 있는 방법이 없을까 찾아보다가...
-
[Java]Validation과 Custom Validator
개발하다보면 컨트롤러로 들어오는 파라미터에 대한 검증이 필요한 경우가 있다. 원시적인 방법으로는 컨트롤러에서 직접 해당 파라미터에 대한 검증을 마칠 수 있을 것이고, 조금 더 발전된 방법으로는 별도의 Validation을 담당하는 유틸이나 클래스를 만들어서 파라미터만 넘겨주면 검증을 마친 뒤 true or false로 검증 여부를 전달하거나 유틸 안에서 Custom Exception을 발생시켜서 호출 자체를 더이상...
-
[Kafka]Kafka Partitioner
Default Partitioner 사내에 본격적으로 Kafka 도입이 된 지도 1년이 좀 넘은 듯 하다. 구축부터 세팅, 관리까지는 별도의 DevOps팀이 있어서 이쪽 팀에서 책임져주고 있다. 이렇게 Kafka를 도입하여 실제 Producer/Consumer를 개발하여 운영해오면서 겪어본 사례 중 하나를 소개해보고자 한다. Kafka 도입 후에 컨슈머에서는 별도의 Custom Partitioner를 사용하고 있지 않았고, 메시지를 발행할 때도 별도의...
-
[Kafka]CommitFailedException
CommitFailedException 어느날 컨슈머 운영 중에 핀포인트에 에러 카운트가 남아있는 것을 보고 해당 파드 로그를 확인하던 중 CommitFailedException과 관련된 로그를 확인하여 대응했던 일이 있었다. java.lang.IllegalStateException: This error handler cannot process 'org.apache.kafka.clients.consumer.CommitFailedException's; no record information is available ... Caused by: org.apache.kafka.clients.consumer.CommitFailedException: Offset commit cannot be completed since the consumer is not part...
-
[기타]2021년 회고록
정말 오랜만에 글을 적는다. 2021년이 다 가고 2022년도 벌써 절반을 향해 달려가고 있는데 이제 2021년 회고록을 올리는 이유가 무엇이냐면… 그냥 별 이유없이 내가 게을러졌기 때문이다. 사실 이직하고 첫 해였던 2020년보다 2021년이 더 바쁜 한 해였기도 했고 업무적으로 상당히 많은 과부하(?)를 받았기에 번아웃까지는 아니지만 업무시간이 끝나면 줄곧 방전되곤 했다. 나이 앞자리가...