반응형

2021/10 6

Spring-Kafka Consumer 실패 시 재처리 ( Reply - @SendTo )

들어가기 전에 Consumer를 통해 카프카 클러스터에서 데이터를 Read할 때 모두 정상처리된다면 좋겠지만 그렇치 못한 경우도 있습니다. 그럴 경우 Spring-Kafka에서 재처리를 편리하게 할 수 있도록 Reply(@SendTo), Retry 기능을 제공합니다. 이번 글에서는 재처리 하는 방법에대해서 정리해보겠습니다. 목차 재처리를 해야하는 이유 ReplyTemplate 구성 @SendTo를 사용한 ReplyTemplate 구현 Reply 처리 플로우 1. 재처리를 해야하는 이유 Consumer를 이용해 카프카 클러스터에서 Read 한 후 Repository에 저장할 수도 있고 메일 발송을 할 수도 있고 다양하게 사용할 수 있습니다. 하지만 Repository 서버가 다운된다거나 메일 발송 중 메일..

Study/message-queue 2021.10.15

Spring-Kafka Consumer Offset 관리

들어가기 전에 Consumer를 AutoCommit을 false로 설정하고 사용하고 있습니다. Consumer에서 로직을 완료하고 partition에 commit을 처리하도록 작성하였습니다. 그런데 로직을 처리하던 중 Exception이 발생했고 partition에 commit을 하지 못했습니다. 그렇다면 이 Consumer는 무한 루프에 빠져 데이터를 계속 읽고 Exception을 계속 발생시킬까요? 정답은 NO! 입니다. Consumer 내부에서 Partition Offset과는 별개로 Consumer만을 위한 Offset을 관리하고 있기 때문입니다. Consumer Polling 방식 Consumer는 KafkaMessageListenerContainer에서 새로운 Thread를 생성하여 while..

Study/message-queue 2021.10.14

[엘레강트 오브젝트] 4-3장 final이나 abstract이거나

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 잘못된 상속 클래스의 신분 올바른 설계 결론 1. 잘못된 상속 상속은 매우 강력한 기능입니다. 하지만 상속을 잘못 사용한다면 문제를 일으킬 수 있습니다. 문제를 일으키는 원인은 가상 메서드입니다. 코드로 살펴보겠습니다. open class Document { fun length(): Int { return content().length } open fun content(): String { // read document // load byte array return "" } } 위 코드와 같은 Document 클래스가 있..

Study/object 2021.10.13

Spring-Kafka Consumer Validation

모든 코드는 Github에 올려두었습니다. 들어가기 전에 Consumer는 Kafka에 Topic, Partition의 Record를 읽어오는 역할을 합니다. 하지만 Kafka에 잘못된 데이터가 들어오는 경우 Consumer에서는 데이터를 Validation 처리하여 올바른 데이터만 처리해야합니다. 이번 글에서는 Spring-Kafka를 사용하는 Consumer에서 어떻게 Validation 처리를 하는지 작성해보겠습니다. 목차 Validation 방식 Validation 구성 Consumer Validation 구현 Validation 테스트 @KafkaListener ErrorHandler 결론 Validation 방식 Spring-Kafka는 Version 2.2 부터 @KafkaListener의 ..

Study/message-queue 2021.10.12

[엘레강트 오브젝트] 4-2장 체크 예외(checked exception)만 던지세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 Checked Exception vs Unchecked Exception 꼭 필요한 경우에만 예외를 잡자 항상 예외를 체이닝하자 단 한번만 복구하자 관전-지향 프로그래밍을 사용하자 하나의 예외 타입만으로도 충분하다 1. Checked Exception vs Unchecked Exception 두 Exception의 차이는 이 글을 참조해주세요. unchecked exception fun length(file: File): Int { if (!file.exists()) throw IllegalArgumentException..

Study/object 2021.10.06

[엘레강트 오브젝트] 4-1장 절대 NULL을 반환하지 마세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 무너진 신뢰 빠르게 실패하기 vs 안전하게 실패하기 NULL 대안 주관적인 생각 1. 무너진 신뢰 이전 글에서 메서드 인자에 Null을 전달하는 것은 매우 안좋은 방법이라고 소개하였습니다. 마찬가지로 NULL을 반환하는 방법 또한 안좋은 방법입니다. class Page( val title: String? ) { fun title(): String? { if (title == null) { return null // null return } return "Elegant Objects" } } 위와 같은 Page 클래스가 있..

Study/object 2021.10.05
728x90
반응형