본문 바로가기

spring boot

[Spring + Kafka] Spring-Kafka-Streams 간단한 실습 kafka Streams 어떤 Topic으로 들어오는 데이터를 Consume하여, streams api를 통해 처리된 후, 다른 Topic으로 전송(Producing) 하거나 끝내는 행위를 하게 된다. Consumer Stream Consumer/Producer Seperate One Processing Single Complex Batch Processing O X Threading/Pararellism X O Stateful Operations Only Stateless O build.gradle에 다음과 같은 dependency를 추가한다. implementation 'org.apache.kafka:kafka-streams' 데이터 변경 후 다른 Topic 전달 @Configuration @Enab.. 더보기
[Spring + Kafka] 간단 성능 모니터링 환경: Spring Boot Project 2.7.5 + Spring-Kafka 2.8.10 코드를 사용한 Metrics 확인 @Bean public ApplicationRunner runner(KafkaTemplate kafkaTemplate, KafkaListenerEndpointRegistry registry) { return args -> { Map producerMetrics = kafkaTemplate.metrics(); for (MetricName metricName : producerMetrics.keySet()) { log.info("metricName = {}, value = {}", metricName.description(), producerMetrics.get(metricName).. 더보기
[Spring + Kafka] AdminKafka 사용하기 Spring이 제공하는 Adminkafka를 사용하여 Topic, 설정 정보 등의 다양한 Kafka 정보를 조회 및 변경, 삭제할 수 있다. 환경: Spring Boot Project 2.7.5 + Spring-Kafka 2.8.10 Topic 정보 확인하기 @Service public class KafkaManager { private final AdminClient adminClient; private final Logger log = LoggerFactory.getLogger(this.getClass()); public KafkaManager(KafkaAdmin kafkaAdmin) { this.adminClient = AdminClient.create(kafkaAdmin.getConfigurati.. 더보기
[Spring + Kafka] Consume Messages Message Listener Record MessageListener Auto Commit AcknowlegingMessageListener Manual Commit ConsumerAwareMessageListener Consumer 객체 활용 AcknowledgingConsumerAwareMessageListener Manual Commit + Consumer 객체 활용 Batch BatchMessageListener Auto Commit BatchAcknowlegingMessageListener Manual Commit BatchConsumerAwareMessageListener Consumer 객체 활용 BatchAcknowledgingConsumerAwareMessageListener Manua.. 더보기
[Spring + Kafka] Publish Messages 메시지 발행 방법 KafkaTemplate 사용 ProducerFactory 클래스를 사용해서 생성한다. 트랜잭션을 사용하지 않는 경우, Singleton으로 생성한다. flush()를 사용할 경우, 같은 Producer를 사용하는 다른 Thread에서 지연 현상이 발생할 수 있다. * 2.3 이후 부터는 producerPerThread 속성이 추가되어, true로 설정할 경우, 각 Thread에서 별도의 생성자를 만들고 캐시 처리한다. -> flush() 사용에도 지연 현상이 발생하지 않는다. 2.5.10 이후에는 설정을 업데이트하거나, 제거할 수 있는 Method를 제공한다. SSL 키 변경 등에서 유용할게 사용할 수 있다. reset()을 사용하면, 기존 Producer는 닫고 새로운 설정으로 Pr.. 더보기
[Spring + Kafka] Topic 생성 및 조회, 삭제하기 Topic 생성 시 고려해야 할 점 Topic 명 Topic 명은 한 번 정하면, 바꾸기가 매우 어렵기 때문에 Rule을 적용한 패턴을 통해 의미를 부여한다. Topic의 파티션 개수 계산 파티션 개수: 1초 당 메시지 발행 수 / Consumer Thread 1개가 1초당 처리하는 메시지 수 파티션 개수를 늘릴 수는 있지만 줄일 수는 없다. Retention 시간 kafka borker가 메시지를 어느 시간까지 보관할지 시간이나 byte에 따라서 초과 시, 데이터를 삭제한다. 디스크 크기와 데이터의 중요성에 따라 판단한다. 환경: Spring Boot Project 2.7.5 + Spring-Kafka 2.8.10 Application.yml 설정 spring: kafka: bootstrap-serve.. 더보기
[Spring + Kafka] 간단 실습 * 본 글에서는 Spring + Kafka를 매우 간단하게 적용해 볼 예정이다. kafka 간단 정리 Porudcer는 Topic에 데이터를 적재하고, Consumer는 Topic에서 데이터를 가져와 처리한다. Topic은 키 값에 따라 여러 파티션으로 나눠서 적재(파티셔닝)되고, Consumer Group의 포함된 하나의 Comsumer가 하나의 Partition을 담당하여 데이터를 처리한다. Consumer가 데이터를 처리하면, ACK를 날려 데이터를 처리했다고 표시한다. ACK를 날리는 방법은 여러 가지가 존재한다. Kafka의 자세한 설명은 다음 링크를 통해서 확인할 수 있다.https://yeongchan1228.tistory.com/52 [Kafka] Apache Kafka란? 데이터가 흐르는.. 더보기
[Spring] 알림 기능에 SSE 적용하기 * 주기적으로 Client에서 데이터를 가져와야 하는 경우 사용할 수 있는 방법 Polling 일정 주기를 가지고 서버의 API를 호출하는 방법 실시간으로 데이터가 업데이트 되지 않는다는 단점 존재 불필요한 요청이 발생하기 때문에 서버 부하 발생 호환성이 좋다는 장점을 가짐 Long-Polling 서버로 요청이 들어올 경우, 일정 시간 동안 대기 했다가 요청한 데이터가 업데이트 된 경우 서버에서 웹 브라우저로 응답을 보냄 연결이 된 경우 실시간으로 데이터가 들어올 수 있다는 장점이 존재 Polling보다 개선된 형태이지만, 데이터의 업데이트가 빈번한 경우 Polling과 유사하다는 단점이 존재 SSE (Server-Sent Event) 서버에서 웹 브라우저로 데이터를 보냄. 웹 브라우저에서 서버 쪽으로 .. 더보기