분류 전체보기 1341

Custom Partitioner로 메시지의 특정 Partition 설정하기

아무것도 설정하지 않을 경우 CustomPartitioner가 기본적으로 DefaultPartitioner로 설정이 되고, Key가 있으면 Key값에 따른 해시 함수 실행, Key가 없으면 스티키 파티셔닝으로 동작한다.Producer의 메시지 파티셔닝 /** * Compute the partition for the given record. * * @param topic The topic name * @param numPartitions The number of partitions of the given {@code topic} * @param key The key to partition on (or null if no key) * @param keyByte..

idempotence(멱등성) 기반 중복 없이 전송

최대 한번 전송/적어도 한번 전송/ 정확히 한번 전송최대 한번 전송(at most once): 중복 불허, acks = 0적어도 한번 전송(at least once): 중복 허용, retry > 0, acks=1, all정확히 한번 전송(exactly once)중복 없이 전송(Idempotence): Producer의 message 전송! retry 시, 중복 제거Transaction 기반 전송: Consumer > Process > Producer(주로 Kafka Streams)에 주로 사용되는 Transaction 기반 처리최대 한번 전송Producer는 브로커로부터 Ack 또는 에러 메시지 없이 다음 메시지를 연속으로 보낸다.메시지가 소실될 수 있지만 중복 전송은 하지 않는다.적어도 한번 전송Pro..

Producer의 max.in.flight.request.per.connection의 이해

max.in.flight.request.per.connection브로커 서버의 응답없이 Producer의 Sender thread가 한번에 보낼 수 있는 메시지 배치의 갯수default 값은 5로, kafka producer 의 메시지 전송 단위는 Batch이다.비동기 전송 시 브로커의 응답 없이 한꺼번에 보낼 수 있는 Batch의 갯수는 max.in.flight.per.connection에 따름Producer 메시지 전송 순서와 Brocker 메시지 저장 순서B0 이, B1보다 먼저 Producer에서 생성된 메시지 배치max.in.flight.requests.per.connectio = 2(1보다 클 경우)에서 B0,B1 2개의 배치 메시지를 전송.B1은 성공적으로 기록되었으나, B0의 경우 Writ..

Ch08. 엘라스틱서치 클라이언트 - Transport 클라이언트

엘라스틱서치 7.0에서 Tranport 클라이언트 모듈은 미지원되고 8.0에서는 모두 제거될 예정 Transport 클라이언트 연결dependencies { compile group: 'org.elasticsearch.client', name: 'transport', version: '6.4.3'}Settings settings = Settings.builder() .put("cluster.name", "javacafe-es") //.put("client.transport.sniff", true) .build();TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new TransportAddress(..

Elastic Search 2025.10.03

Ch08. 엘라스틱서치 클라이언트 - 엘라스틱서치 클라이언트의 이해

클라이언트 모듈엘라스틱서치에서는 다양한 프로그래밍 언어에서 직접적으로 사용할 수 있는 라이브러리를 개발해서 제공한다.(지원하지 않는 언어에 대해서는 직접 클라이언트를 개발해서 추가하는 법 제공) 엘라스틱 서치에서 지원하는 언어별 라이브러리Java REST ClientJava APIJavaScript APIGroovy APINET APIPHP APIPerl APIPython APIRuby APICommunity Contributed Clients 자바 클라이언트 모듈내부적으로 Http 방식으로 Rest API를 사용해 접근하는 방식과 네티 모듈을 이용해 네이티브 클라이언트를 통해 접근하는 방식 2가지가 있다. Rest Client 방식Java High Level Rest Client라고도 불린다.Http ..

Elastic Search 2025.10.02

Producer의 전송/재전송 내부 메커니즘 및 재전송 동작 관련 주요 파라미터

Producer 메시지 전송/재전송 시간 파라미터max.block.ms: Send() 호출 시 Record Accumulator에 입력하지 못하고 Block 되는 최대 시간. 초과 시 Timeout Exceptionlinger.ms: Sender Thread가 Record Accumulator에서 배치별로 가져가기 위한 최대 대기시간request.timeout.ms: 전송에 걸리는 최대 시간. 전송 재시도 대기시간 제외.!초과 시 retry를 하거나 timeout exception 발생retry.backoff.ms: 전송 재시도를 위한 대기 시간deliver.timeout.ms: Producer 메시지(배치) 전송에 허용된 최대 시간. 초과 시 Timeout ExceptionRetries와 Deliver..

Producer의 메시지 배치 전송 내부 메커니즘

Serialize > Partitioning > Compression > Record Accumulator 저장 > Sender에서 별도의 Thread로 전송Record Accumulator에서 Batch 단위로 전송하게 된다.Producer Record와 Record BatchKafkaProducer 객체의 Send() 메서드는 호출 시마다 하나의 ProducerRecord를 입력하지만 바로 전송되지 않고 내부 메모리에서 단일 메시지를 Topic 파티션에 따라 Record Batch 단위로 묶은 뒤 전송한다.메시지들은 Producer Client의 내부 메모리에 여러 개의 Batch들로 buffer.memory 설정 사이즈만큼 보관할 수 있으며 여러 개의 Batch들로 한꺼번에 전송될 수 있다.상세 분..

acks 값 설정에 따른 Producer의 전송 방식 차이 이해

Producer의 acks 설정에 따른 send 방식producer는 해당 Topic의 Partition의 Leader Broker에게만 메시지를 보낸다.Leader Broker는 받은 메시지를 Replicars에게 메시지를 복제하여 전달한다.acks = 0 인 경우producer는 Leader Broker가 메시지 A를 정상적으로 받았는지에 대한 Ack 메시지를 받지 않고, 다음 메시지인 B를 바로 전송메시지가 제대로 전송되었는지 브로커로 부터 확인을 받지 않기 때문에 메시지가 브로커에 기록되지 않더라도 재 전송하지 않음메시지 손실의 우려가 가장 크지만, 가장 빠르게 전송할 수 있음(IOT 센서 데이터 등 데이터 손실에 민감하지 않은 데이터 전송에 활용)acks = 1인 경우Producer는 Leade..

Ch07. 한글 검색 확장 기능 - 자바카페 플러그인

한글 유니코드의 이해현대의 문자 표현은 모두 유니코드로 이뤄지며, 전 세계의 문자를 모두 표현하기 위한 영역 중 한글은 0x0000 ~ 0xFFFF 영역으로 표현한다. 한글 자모를 표현하는 유니코드Hangul Jamo와 Hangul Compatibility Jamo에 정의한글 자모는 유니코드 0x1100 ~ 0x11FF까지의 범위를 가지며 총 256자로 구성된다.한글 호환용 자모는 유니코드 0x3130 ~ 0x318F까지의 범위를 가지며, 총 96개의 공간 중 94자를 정의해서 구성된다.현대 한글 체계에서는 초성 19자, 중성 21자, 종성 28자로 분류한글 음절을 표현하는 유니코드음절은 한글 자모에서 제공하는 초성, 중성, 종성으로 이뤄진 한글 한 글자를 표현하는 단위를 의미한다.모든 글자는 Hangu..

Elastic Search 2025.09.28

Ch07. 한글 검색 확장 기능 - 한글 키워드 자동완성

Suggest API는 영문을 처리하는데 적합하지만 한들을 처리하는 데는 적합하지 않다. Completion Suggest API를 이용한 한글 자동 완성1. 인덱스 생성PUT /ac_test{ "settings": { "index": { "number_of_shards": 5, "number_of_replicas": 1 } }}2. 매핑 설정PUT /ac_test/_mapping/ac_test{ "properties": { "itemSrc": { "type": "keyword" }, "itemCompletion": { "type": "completion" } }}자동 완성을 위해 필드 타입을 completion으로 설정해야한다...

Elastic Search 2025.09.28