Kafka
-
kafka message queue를 service 사이의 메시지 전송의 매개체로 사용하는 경우각 서비스들에서 메시지를 produce, consume 하는 dto class가 다를 수 있다. 이러한 경우에 어떻게 spring-kafka 설정을 가져가야 하는지 알아보도록 하자. 기본 kafka 설정 spring: kafka: producer: value-serializer: org.springframework.kafka.support.serializer.JsonSerializer consumer: value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer 보통은 위와 같이 어떠한 종류의 s..
[Kafka] Serializer, Deserializerkafka message queue를 service 사이의 메시지 전송의 매개체로 사용하는 경우각 서비스들에서 메시지를 produce, consume 하는 dto class가 다를 수 있다. 이러한 경우에 어떻게 spring-kafka 설정을 가져가야 하는지 알아보도록 하자. 기본 kafka 설정 spring: kafka: producer: value-serializer: org.springframework.kafka.support.serializer.JsonSerializer consumer: value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer 보통은 위와 같이 어떠한 종류의 s..
2024.06.26 -
동기적으로 API를 호출한다면 응답이 올 때까지 기다렸다가, 응답을 받으면 해당 응답의 결과 값을 기반으로 다음 로직을 진행한다. 다만, 최근에는 kafka와 같은 message queue의 도입으로 요청을 보내는 쪽에서 결과에 대한 처리를 보장하는 것보다는 요청을 받은 쪽에서 멱등성을 보장해 주는 역할이 더 커진 것 같다. 이러한 consumer의 역할을 만족하기 위해서 spring-kafka에서는 consumer에서 요청을 처리하는 과정에 exception이 발생했을 때 쉽게 처리할 수 있도록 @RetryableTopic 기능을 제공한다. 쉽게 말하면, Consumer에서 요청을 처리하는 과정에서 문제가 생겼을 때 다시 처리할 수 있도록 재처리-토픽을 두고, 해당 토픽에 메시지를 전송해 주는 것이다...
[Kafka] Spring Kafka @RetryableTopic or RetryTopicConfiguration동기적으로 API를 호출한다면 응답이 올 때까지 기다렸다가, 응답을 받으면 해당 응답의 결과 값을 기반으로 다음 로직을 진행한다. 다만, 최근에는 kafka와 같은 message queue의 도입으로 요청을 보내는 쪽에서 결과에 대한 처리를 보장하는 것보다는 요청을 받은 쪽에서 멱등성을 보장해 주는 역할이 더 커진 것 같다. 이러한 consumer의 역할을 만족하기 위해서 spring-kafka에서는 consumer에서 요청을 처리하는 과정에 exception이 발생했을 때 쉽게 처리할 수 있도록 @RetryableTopic 기능을 제공한다. 쉽게 말하면, Consumer에서 요청을 처리하는 과정에서 문제가 생겼을 때 다시 처리할 수 있도록 재처리-토픽을 두고, 해당 토픽에 메시지를 전송해 주는 것이다...
2024.04.08 -
Spring-Kafka를 이용하여 Consumer를 구현하게 되면, 보통 @KafkaListener를 많이 사용한다. @KafkaListener( topics = "testTopic1", groupId = "test-consumer-group1", concurrency = "1" ) public void test(Message message) { //... } @KafkaListener의 설정 중에 concurrency라는 설정을 알아보자. 해당 설정은 consumer의 thread 개수를 지정하는 값이다. 그렇다면, 하나의 consumer에서 동시에 여러 message를 처리할 수 있도록 thread를 늘리면 좋을 것이라는 생각이 드는데, thread 개수를 늘린다고 무조건 처리량이 좋아지는 것은 아니..
[Kafka] Spring Kafka Listener Concurrency 설정Spring-Kafka를 이용하여 Consumer를 구현하게 되면, 보통 @KafkaListener를 많이 사용한다. @KafkaListener( topics = "testTopic1", groupId = "test-consumer-group1", concurrency = "1" ) public void test(Message message) { //... } @KafkaListener의 설정 중에 concurrency라는 설정을 알아보자. 해당 설정은 consumer의 thread 개수를 지정하는 값이다. 그렇다면, 하나의 consumer에서 동시에 여러 message를 처리할 수 있도록 thread를 늘리면 좋을 것이라는 생각이 드는데, thread 개수를 늘린다고 무조건 처리량이 좋아지는 것은 아니..
2024.02.28 -
일반적으로 kafka message queue를 활용하면 아래와 같이 하나의 topic을 두고 message를 produce 하고 consume 한다. 위와 같은 경우 이외에 filtering이나 추가 로직을 중간에 두어 여러 topic을 사용하며 체이닝 하는 형식으로 kafka를 활용하기도 한다. 이러한 경우에 여러 producer, consumer를 생성해서 사용하는 것보다는 kafka stream을 활용할 수 있을것 같다 Kafka Stream Kafka Streams는 카프카에 저장된 데이터를 처리하고 분석하기 위해 개발된 자바 라이브러리 장점 카프카와 완벽한 호환 Kafka에서 공식적으로 제공되는 라이브러리 Exactly-once 처리 보장 스케쥴링 도구가 별도로 필요 없음 자체 로컬 상태 저장..
[Kafka] Kafka Stream란 ( Consumer와 비교 )일반적으로 kafka message queue를 활용하면 아래와 같이 하나의 topic을 두고 message를 produce 하고 consume 한다. 위와 같은 경우 이외에 filtering이나 추가 로직을 중간에 두어 여러 topic을 사용하며 체이닝 하는 형식으로 kafka를 활용하기도 한다. 이러한 경우에 여러 producer, consumer를 생성해서 사용하는 것보다는 kafka stream을 활용할 수 있을것 같다 Kafka Stream Kafka Streams는 카프카에 저장된 데이터를 처리하고 분석하기 위해 개발된 자바 라이브러리 장점 카프카와 완벽한 호환 Kafka에서 공식적으로 제공되는 라이브러리 Exactly-once 처리 보장 스케쥴링 도구가 별도로 필요 없음 자체 로컬 상태 저장..
2024.02.14