Programming-[Backend] (390) 썸네일형 리스트형 [TIL] spring WebFlux, WebClient - 비동기 polling 배경서버에 요청이 들어오면 다른 서버에 비동기적으로 polling 요청을 보내야하는 상황. 처음에는 생각나는대로 while문과 try-catch 문을 사용해 구현했으나, 리팩토링 하다보니 Spring WebFlux를 사용하면 간결한 문법과 함께 polling 시에 벌어지는 여러 상황들을 대처할 수 있는 메서드들이 주어져서 편하게 코딩할 수 있다는 것을 알게되었다. 코드 @Asyncprotected CompletableFuture> pollingAuthResult(String authReqId, String realmId, String clientId, String expiresIn, String interval) { HttpHeaders headers = new HttpHeaders(); hea.. [카프카 핵심가이드] 9. 모니터링 카프카 핵심 가이드 2E: 대규모 실시간 데이터와 스트림 처리그웬 샤피라 , 토드 팔리노 , 라지니 시바람 , 크리트 페티 저자(글) · 이동진 번역제이펍 · 2023년 04월 14일13. 카프카 모니터링하기 13.1 지표 기초13.1.1 지표는 어디에 있는가?카프카의 모든 지표는 JMX(Java Management Extensions) 인터페이스를 통해서 사용할 수 있다.check_jmx, jmxtrans와 같은 JMX 인터페이스에 접속하는 프로그램이 있음Jolokia, MX4J 등은 카프카 프로세스에서 직접 실행되는 JMX 에이전트이다JMX 포트 찾기*주키퍼에 저장되는 브로커에 대한 정보는 /brokers/ids/{브로커 id}에 JSON 형식으로 저장된다. 여기에 hostname, jmx_port가.. [카프카 핵심가이드] 8. 클러스터간 데이터 미러링하기 카프카 핵심 가이드 2E: 대규모 실시간 데이터와 스트림 처리그웬 샤피라 , 토드 팔리노 , 라지니 시바람 , 크리트 페티 저자(글) · 이동진 번역제이펍 · 2023년 04월 14일 10. 클러스터간 데이터 미러링하기카프카에서는 같은 클러스터 내의 노드간 데이터 교환을 `복제(replication)`라 부르기로 하고, 다른 클러스터간 데이터 복제는 `미러링(mirroring)`이라고 부르기로 한다. 10.1 클러스터간 미러링 활용 사례지역 및 중앙 클러스터: 각 도시의 데이터센터에 클러스터를 갖고, 각 데이터들을 중앙 클러스터에 미러링하여 비즈니스적인 분석을 해야하는 경우 활용고가용성(high availability)와 재해 복구(disaster discovery): 여분 준비규제: 국가별, 법적 문제.. [카프카 핵심가이드] 7. 멱등적 프로듀서와 트랜잭션 카프카 핵심 가이드 2E: 대규모 실시간 데이터와 스트림 처리그웬 샤피라 , 토드 팔리노 , 라지니 시바람 , 크리트 페티 저자(글) · 이동진 번역제이펍 · 2023년 04월 14일 1. 멱등적 프로듀서 m1, m2, m1, m2, m3 -> 중복 발생enable.idempotence=trueproducer ID 요청 후, 해당 pid와 레코드 별 seq 넘버를 추가해서 중복 메시지를 없애고 순서 보장 트랜잭션 필요 상황 가정 '이체' 애플리케이션Alice -> Bob 에게 이체하는 상황전송 토픽 이벤트를 가져와서 출력 토픽 2개에 레코드를 쌓는다. (Alice -10$ 인출, Bob +10$ 입금)위의 트랜잭션이 완료되어야 오프셋 커밋이 찍힌다. 트랜잭션 없이 시스템 장애 발생 Alice -> .. 비동기 작업: @Async 어노테이션, 스레드 관리 배경서버에서 polling을 해야하는 상황이 생겼다. 아키텍처상 여러 서버들이 통신을 주고 받는데, 일렬로 구성된 3가지 서버에서 중간 서버의 코드를 작성해야하는 상황이였다. 구체적으로는 keycloak과 중간서버가 사용자의 인증을 기다려야하는 상태였다(아래 그림에서 External Auth Server). External Auth Server는 Keycloak으로부터 인증 요청이 오면, 일단 201로 응답을 한 뒤 AD에 요청을 보내고 polling을 통해 AD의 승인 여부를 기다린다. polling하는 코드는 대략 아래와 같다.@Async protected CompletableFuture> pollingAuthResult(String authReqId, String realmId, String c.. [카프카 핵심가이드] 5. 카프카 어드민 카프카 핵심 가이드 2E: 대규모 실시간 데이터와 스트림 처리그웬 샤피라 , 토드 팔리노 , 라지니 시바람 , 크리트 페티 저자(글) · 이동진 번역제이펍 · 2023년 04월 14일 5. 프로그램 내에서 코드로 카프카 관리하기 5.1 AdminClient 개요5.1.1 비동기적이고 최종적 일관성을 가지는 APIAdminClient는 비동기 결과인 Future 객체를 `Result 객체`로 감싸서 작업이 끝날 때까지 대기하거나 작업 결과에 대해 일반적으로 뒤이어 쓰이는 작업을 수행하는 헬퍼 메서드를 가지고 있음최종적 일관성(eventual consistency)AdminClient API가 리턴하는 Future 객체의 완료 여부는 컨트롤러의 상태가 완전히 업데이트된 상태를 기준으로 한다. 즉 여러 브로커.. [카프카 핵심가이드] 3. 프로듀서 카프카 핵심 가이드 2E: 대규모 실시간 데이터와 스트림 처리그웬 샤피라 , 토드 팔리노 , 라지니 시바람 , 크리트 페티 저자(글) · 이동진 번역제이펍 · 2023년 04월 14일 1. 카프카 프로듀서1.1 카프카 프로듀서 개괄프로듀서가 브로커에 메세지 전송 과정키와 파티션은 선택사항키와 값을 직렬화 후 바이트 배열 변환.파티션을 지정하지 않은경우 파티셔너를 통해 파티션이 결정되고 레코드 배치에 추가.별도의 쓰레드가 카프카 브로커에게 전송브로커는 메세지 응답을 돌려준다 성공의 경우 RecordMetadata 정보를 리턴한다(토픽,파티션,레코드 오프셋). 에러인 경우 에러를 리턴한다.에러를 받은 경우 몇번 더 재전송을 시도할 수 있다. 아래는 프로듀서의 최소 기본값을 설정하여 추가해주는 코드 예시이다... [카프카 핵심 가이드] 1. 카프카 시작하기 카프카 핵심 가이드 2E: 대규모 실시간 데이터와 스트림 처리 그웬 샤피라 , 토드 팔리노 , 라지니 시바람 , 크리트 페티 저자(글) · 이동진 번역 제이펍 · 2023년 04월 14일 1. 카프카 시작하기 어떠한 데이터를 얻을 것인지 합의하고 데이터를 얻을 수 있다면 문제는 해결된다. -닐 디그래스 타이슨 1.1 발행/구독 메시지 전달 초기 발행/구독 시스템에 비해 카프카의 장점은 발행/구독 주체들끼리 직접 연결되지 않고 `중앙 집중화된 메시지 큐 시스템`을 여러 시스템들이 공유 받을 수 있다는 점 1.2 카프카 입문1.2.1 메시지와 배치 메시지 - 카프카 데이터의 기본 단위는 `메시지` == `레코드` - `키` 는 메시지를 저장할 파티션을 결정하기 위해 사용한다. 배치(batch) - 같은 토픽.. 이전 1 2 3 4 5 6 ··· 49 다음