분류 전체보기(362)
-
Kafka - 신뢰성 있는 카프카 애플리케이션을 만드는 3가지 방법(멱등성 프로듀서, 트랜잭션 컨슈머, 컨슈머 중복 적재)
1. 멱등성 프로듀서1.1. 중복 데이터 produce 문제 상황만약 네트워크에 이슈가 생겨서, Acknowledge 전송이 실패되면 중복으로 데이터를 produce할 수 있다.1.2. 멱등성 프로듀서 사용PID(Producer unique ID)를 같이 보내서 브로커에 메시지가 저장되어있음을 같이 저장해서 중복 메시지가 발행되면 토픽에 개시하지 않음. 아래는 실제 3.0 이상의 카프카 프로듀서 팩토리 코드인데, 디폴트로 true로 설정된 코드. 2. 트랜잭션 컨슈머 + 프로듀서컨슈머와 프로듀서를 하나의 트랜잭션으로 묶어서 처리하는 방식임. 특이하게 커밋을 Producer가 한다. 트랜잭션 컨슈머 + 프로듀서 구성으로 되어있고 그 프로듀서가 발행한 이벤트를 consume하는 컨슈머는 반드시isolati..
2024.06.18 -
Springboot + koltin coroutine 사용법
1. 코루틴이 왜 필요할까?코루틴은 비동기 프로그래밍을 단순화하고, 효율적인 동시성(concurrency) 관리를 가능하게 하는 프로그래밍 개념입니다. 코루틴은 경량 스레드(lightweight thread)와 같이 작동하는데, 개발자가 프로그램의 어느 시점에서든 실행을 일시 중지하고 필요할 때 재개할 수 있게 해줍니다. 이러한 특성 덕분에 코루틴은 네트워크 호출, 데이터베이스 트랜잭션과 같은 비동기 작업을 쉽고 효과적으로 처리할 수 있으며, 이런 작업들을 마치 동기적 코드처럼 보이게 만들어 줍니다.필요성은 비동기 코드를 더 간결하고 이해하기 쉽게 만들며, 자원을 효율적으로 사용할 수 있습니다. 전통적인 멀티 스레딩 접근 방식에 비해 메모리 사용을 줄이고, 컨텍스트 스위칭의 오버헤드를 감소시킬 수 있어 ..
2024.05.16 -
Spring kafka + micrometer tracing
build.gradleimport org.jetbrains.kotlin.gradle.tasks.KotlinCompileplugins { id("org.springframework.boot") version "3.2.5" id("io.spring.dependency-management") version "1.1.4" kotlin("jvm") version "1.9.23" kotlin("plugin.spring") version "1.9.23"}group = "com.spring"version = "0.0.1-SNAPSHOT"val jvmVersion = JavaVersion.VERSION_17java { sourceCompatibility = jvmVersion}repositor..
2024.05.14 -
Micrometer Tracing
기본 사용법// Span을 생성한다. 만약 현재 쓰레드에 스팬이 있다면, 현재 새로 생성한 newSpan의 부모가 된다.Span newSpan = this.tracer.nextSpan().name("calculateTax");// Span을 시작하고 Scope에 넣는다.(Scope에 넣는다는 의미는 Thread local에 스팬을 넣는다는 뜻)try (Tracer.SpanInScope ws = this.tracer.withSpan(newSpan.start())) { // 더 나은 디버깅을 위해서 Span에 key/value 쌍을 넣을 수 있다. newSpan.tag("taxValue", taxValue); // Span에 이벤트 로깅을 할 수 있다.(이벤트에는 타임스탬프가 찍힌다.) ..
2024.04.30 -
Kafka - Spring kafka Producer, Consumer 예제 코드 및 오프셋 커밋, 에러 핸들링 설명
아래는 ContainerFactory 및 conusmer, producer 설정들이다. package com.spring.kafkasample.config import org.apache.kafka.clients.consumer.ConsumerConfig import org.apache.kafka.clients.producer.ProducerConfig import org.apache.kafka.common.serialization.StringDeserializer import org.apache.kafka.common.serialization.StringSerializer import org.springframework.context.annotation.Bean import org.springframe..
2023.11.18 -
spring kafka commit 실패시 next poll때 일어나는일
https://stackoverflow.com/questions/64681806/not-acknowledging-the-kafka-message-at-all-in-manual-immediate-mode Not acknowledging the kafka message at all in MANUAL_IMMEDIATE mode I could not find any documentation related to this issue, hence the question. What happens if @KafkaListener method does not call acknowledgement.acknowledge() at all when the ackModeis set to stackoverflow.com nack()..
2023.11.07