일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- JDK
- broker
- Vmagent
- restdocs
- ProjectLoom
- kafka
- Brooklin
- springboot
- OpenJDK
- JVM
- java
- OFFSET
- swagger
- Reassign
- Zookeeper
- Rebalance
- Mirror
- Vmalert
- VictoriaMetrics
- Reactive
- raft
- 비동기
- webflux
- API문서
- tsdb
- consumer
- ExecutableJar
- spring
- NoClassDefFoundError
- Today
- Total
목록 전체 글 (33)
거북이 developer
Server Configuration @EnableWebFlux @EnableWebFlux 어노테이션을 정의할 경우 DelegatingWebFluxConfiguration 이 동작하는데 해당 Configuration 이 수행하는 기능은 다음과 같다. WebFlux Application 운영을 위한 default spring configuration 을 정의해준다. WebFluxConfigurer 를 정의한 configuration 이 있는지 탐지 및 customizing 된 내용 적용. @Configuration @EnableWebFlux public class WebConfig { // ... } 만약 @EnableWebFlux 를 사용하지 않고 직접 핸들링 하고 싶다면, DelegatingWebFlu..
WebClient 생성 create WebClient 는 간단하게 static 메서드로 생성이 가능하다. static method 로 생성할 경우 디폴트로 Reactor Netty HttpClient 를 사용하므로 reactor-netty 라이브러리에 대한 의존성이 필요하다. WebClient webClient1 = WebClient.create(); WebClient webClient2 = WebClient.create("http://naver.com"); builder 몇가지 옵션을 설정하려면 builder 를 사용하여 생성하는것을 권장한다. uriBuilderFactory: base URL 과 관련하여 UriBuilderFactory 를 커스텀하게 구현했을 경우. defaultUriVariables..

Filter Spring Webflux 에서는 MVC 의 Interceptor 와 비슷한 역할을 하는 HandlerFilterFunction 과 Servlet Filter 와 비슷한 역할을 하는 WebFilter Interface 를 제공하고 있다. HandlerFilterFunction 핸들러 펑션에 필터를 적용할 땐 RouterFunction Builder 를 사용하면 되는데, 다음과 같은 함수가 있다. before : Handler 함수 수행 전에 동작하는 함수를 등록하며 인자로 Function 를 받는다. after : Handler 함수가 수행 완료되면 동작하는 함수를 등록하며 인자로 BiFunction 를 받는다. filter : 인자로 HandlerFilterFunction 를 받으며, 필터..
HandlerFunction ServerRequest 를 받아 ServerResponse 를 리턴하는, MVC 의 Controller 와 유사한 로직을 구현하는 함수이다. ServerRequest와 ServerResponse는 자바 8 방식으로 HTTP 요청과 응답에 접근할 수 있는 불변(immutable) 인터페이스다. 요청, 응답 body 모두 리액티브 스트림 back pressure로 처리한다. request body는 리액터 Flux나 Mono로 표현한다. response body는 Flux와 Mono를 포함한 어떤 리액티브 스트림 Publisher든 상관없다. 자세한 정보는 Reactive Libraries 를 참고. ServerRequest ServerRequest로 HTTP 메소드, URI,..
Request Mapping Spring Webflux 에선 아래와 같이 2가지 programming model 이 있고 그에 맞게 Request Mapping 을 해줄 수 있다. Annotated Controllers 스프링 MVC와 동일하며 spring-web 모듈에 있는 같은 어노테이션을 사용한다. 스프링 MVC와 웹플럭스 컨트롤러 모두 리액티브(Reactor, RxJava) 리턴 타입을 지원하기 때문에 이 둘을 구분하기 어렵다. 한 가지 눈에 띄는 차이는 웹플럭스에선 @RequestBody로 리액티브 인자를 받을 수 있다. 스프링 웹플럭스는 어노테이션 기반 프로그래밍 모델을 지원하기 때문에, @Controller, @RestController 컴포넌트로 요청을 매핑하고, 입력을 받고, except..

Spring Webflux 란? Spring 5.0 버전부터 추가된 리액티브 스택 웹 프레임워크다. 완벽하게 non-blocking 으로 동작하며, Reactive Streams back pressure를 지원하고, Netty, Undertow, 서블릿 3.1+ 컨테이너 서버에서 실행된다. 기존 Spring MVC 와 같이 Spring Framework 에 공존하고 MVC 를 사용하며 Webflux 개발을 하는것도 가능하다. Spring Webflux 는 왜 만들어졌나? 적은 쓰레드로 동시 처리를 제어하고 적은 하드웨어 리소스로 확장하기 위한 논블로킹 웹 스택의 필요성이 대두됨. 이전에도 서블릿 3.1 은 논블로킹 I/O를 위한 API를 제공했지만, 서블릿으로 논블로킹을 구현하려면 다른 동기 처리나(Fi..
Multi-Threaded Message Consumption with the Apache Kafka Consumer 토픽에서 레코드는 파티션이라는 더 작은 단위로 묶인다. 이 단위는 결과의 정확성을 훼손하지 않고 독립적으로 처리할 수 있으며, 병렬 처리를 위한 토대가 된다. 병렬 처리는 일반적으로 스케일링을 통해서 가능하다. 같은 그룹 내에 여러 컨슈머를 두고, 각 컨슈머는 토픽 파티션들의 서브셋으로 부터 데이터를 가져가 처리하고 단일 쓰레드에서 실행된다. 대부분의 유즈 케이스에서 단일 쓰레드에서 메시지를 읽고 처리하는 것은 문제가 없다. 따라서, 쓰레드당 컨슈머 모델은 아파치 카프카 컨슈머에서 흔히 사용된다. I/O 연산이 들어가지 않는 처리는 일반적으로 매우 빠르기 때문에, poll 루프도 잘 동작..
Kafka 에서 rebalance가 의미하는 것은 Group resource 재할당 Membership 변화 자세한 설명은 [Consumer 파티션 리밸런싱] 참조 1. Static Membership이란? Dynamic Membership과는 다른, multi group내에서 영속적인 멤버를 이야기한다. 같은 구독을 재사용하도록 하고 구 member들이 코디네이터로 부터 인식할 수 있도록 한다가 목표이다. 새로운 consumer는 "group.instance.id" 설정을 사용하여 consumer instance에서 unique를 보장하도록 설정한다. 다시 시작하는 동안 코디네이터에 assign된 memberID가 손실되지만, 코디네이터는 이 멤버를 join Reqeust에서 제공된 그룹 instanc..