본문 바로가기

전체 글140

6. Reactive - Reactor Schedulers Reactor의 Scheduler는 비동기 작업을 관리하는데 사용된다. Schedulers.immediate() : 현재 쓰레드에서 동기작업 실행 Schedulers.single() : 단일 백그라운드 쓰레드에서 작업 실행 Schedulers.parallel() : 병렬로 사용할 수 있는 별도 쓰레드 풀로 작업 실행 (CPU 개수) Schedulers.boundedElastic() : 별도의 쓰레드로 그때 그때 맞게 유연하게 작업 실행 (쓰레드 개수의 제한은 있음) public Flux fluxMapWithSubscribeOn() { return Flux.range(1, 10) .map(i -> i * 2) .subscribeOn(Schedulers.boundedElastic()) .log(); } pu.. 2024. 4. 5.
9. Kafka - Producer 메커니즘 1 Kafka Producer의 내부 배치 전송 방식 1) KafkaProducer.send() 2) Serializer -> 직렬화 3) Partitioner -> 파티셔닝 4) Compression -> 압축 방식 5) Record Accumulator 6) Sender 이렇게 send 메서드부터 Sender까지 총 6단계로 이루어져 있다. 1. KafkaProducer.send() .send()는 호출 시마다 하나의 ProducerRecord를 입력하지만 내부 메모리에서 파티션에 나뉘는 것에 따라 Record Batch 형태로 전송된다. buffer.memory 설정 크디만큼 메모리에 보관하였다가 send되며 여러 개의 batch들로 한꺼번에 전송될 수 있다. 이것은 카프카의 Main Thread에 의.. 2024. 4. 4.
8. Kafka - Idempotence, 멱등성 1. 최대 한 번 전송 (at most once) acks = 0으로 비동기로 전송만 한 번 수행, 유실될 수 있지만 재전송하지 않는 방법. 2. 적어도 한 번 전송 (at least once) 중복을 허용하며 실패시에도 retry로 재전송, acks = 1, all 브로커로부터 ACK를 받고 다음 메시지를 전송. 메시지 소실은 없지만 중복 전송을 할 수 있음. 데이터를 보낸 후, 저장 되었지만 ACK를 보내지 못한 경우 다시 보내게 되어 중복이 가능. 3. 정확히 한 번 전송 (exactly once) 중복 없이 전송(Idempotence, 멱등성), 메시지 전송 재시도 시 중복을 제거함 트랜잭션 기반의 전송. Producer가 메시지를 전송할 때 프로듀서의 ID와 메시지 Sequence를 Header.. 2024. 4. 4.
5. Reactive - Reactor와 연산자 Reactor의 핵심요소 1. Stream 1) publisher 2) subscriber 3) subscription 4) processor subscriber는 subscribe를 통해 publisher에게 요청을 하게되고, 이 과정에서 subscription이라는 객체로 publisher와 연결. subscriber는 구독하여 요청하거나 요청 취소할 수 있고, publisher는 데이터를 제공하거나, 오류처리, 종료시킬 수 있다. processor는 publisher와 subscriber를 상속받는 인터페이스이다. 2. asynchronous 데이터 처리 중 같은 쓰레드 혹은 다른 쓰레드를 사용하거나 병렬 처리할 수 있다. 3. back pressure 처리속도 불균형이 있을 경우 불균형을 처리하는.. 2024. 4. 4.