전체 글 1341

Consumer의 auto.offset.reset

auto.offset.resetConsumer가 Topic에 처음 접속하여 메시지를 가져올 때 가장 오래된 처음 offset (earliest)부터 가져올 것인지, 가장 최근인 마지막 offset(latest) 이후부터 가져올 것인지를 설정하는 파라미터auto.offset.reset = 처음 offset(earliest)부터 읽음auto.offset.reset = 처음 offset(earliest) 부터 읽음동일 Consumer Group으로 Consumer가 새롭게 접속할 시, __consumer_offsets에 있는 offset 정보를 기반으로 메시지를 가져오기 때문에 earliest로 설정하여도, 0번 offset부터 읽어 들이지 않음Consumer Group의 Consumer가 모두 종료되어도, ..

Consumer의 읽기 Commit 이해

__consumer_offsets 토픽 읽기 실습하기1. consumer.config 용 config 파일 생성echo "exclude.internal.topics=false" > consumer_temp.config2. __consumer_offsets 토픽 읽기kafka-console-consumer --consumer.config /home/min/consumer_temp.config \ --bootstrap-server localhost:9092 --topic __consumer_offsets \ --formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter"3. topic 삭제 후 생성kafka-topics -..

wakeup을 이용한 Consumer 효과적 종료

실습하기1. main Thread가 죽었을 때, wakeup() 실행하도록 Hook 추가//main thread 종료시 별도의 thread로 kafkaconsumer wakeup() 메서드 호출Runtime.getRuntime().addShutdownHook(new Thread(() -> { logger.info("main program starts to exit by calling wakeup"); kafkaConsumer.wakeup(); try { mainThread.join(); } catch (InterruptedException e) { e.printStackTrace(); }})); 2. wakeUp Exception Catch 추가try..

Consumer Fetcher 관련 주요 파라미터와 메커니즘 이해

fetcher는 Linked Queue 데이터를 가지고 오지만, Linked Queue에 데이터가 없을 경우 ConsumerNetworkClient에서 브로커로부터 데이터를 가지고 온다.관련 주요 파라미터fetch.min.bytesfetcher가 record들을 읽어들이는 최소 bytes.브로커는 지정된 fetch.min.bytes 이상의 새로운 메시지가 쌓일 때까지 전송을 하지 않는다.(기본: 1 bytes) fetch.max.wait.ms브로커에 fetch.min.bytes 이상의 메시지가 쌓일 때까지 최대 대기 시간(기본: 500ms)poll()과의 차이 : poll()는 데이터가 없는 상황에서의 대기 시간이고, 해당 파라미터는 데이터가 있는 상황에서 대기하는 것이다.fetch.max.bytesfe..

KafkaConsumer 주요 구성 요소와 Poll() 메소드

KafkaConsumer 주요 구성 요소와 Poll() 메소드ConsumerRecords consumerRecords = KafkaConsumer.poll(Duration.ofMills(1000))브로커나 Consumer 내부 Queue에 데이터가 있다면, 바로 데이터를 반환한다.그렇지 않을 경우 1000ms동안 데이터 fetch를 브로커에 계속 수행하고 결과 반환Poll() 동작 원리Linked Queue에 데이터가 있을 경우 Fetcher는 데이터를 가져오고 반환하며, Poll() 수행 완료ConsumerNetworkClient는 비동기로 계속 브로커의 메시지를 가져와서 LinkedQueue에 저장Linked Queue에 데이터가 없을 경우 1000ms(지정한 시간)까지 브로커에 메시지 요청 후 po..

Consumer 주요 메커니즘

Kafka Consumer브로커의 Topic 메시지를 읽는 역할을 수행한다.모든 Consumer들은 고유한 그룹 아이디(group.id)를 가지는 Consumer Group에 소속되어야 한다.개별 Consumer Group 내에서 여러 개의 Consumer 들은 토픽 파티션 별로 분배된다.Consumer의 Subscribe, Poll, CommitConsumer는 subscribe()를 호출하여 읽어 들이려는 토픽을 등록Consumer는 poll() 메서드를 이용하여, 주기적으로 브로커의 토픽 파티션에서 메시지를 가지고 온다.메시지를 성공적으로 가져 왔으면, Commit을 통해 __consumer_offset에 다음에 읽을 offset 위치를 기재함Consumer의 주요 수행KafkaConsumer는 F..

Ch09. 엘라스틱서치와 루씬 이야기 - 클러스터 관점에서 구성요소 살펴보기

엘라스틱 서치는 기본적으로 클러스터라는 단위로 데이터를 제공한다. 클러스터는 하나 이상의 물리적인 노드로 이뤄지며, 각 노드는 모두 데이터를 색인 및 검색 기능을 제공하는 물리적인 서버이다. 내부에는 루씬 라이브러리가 자리 잡고 있다.클러스터클러스터는 데이터를 실제로 가지고 있는 노드의 모음이다.(엘라스틱서치에서는 관련된 모든 노드들을 논리적으로 확장해 클러스터라고 부른다.)같은 클러스터 내부의 데이터만 서로 공유가 가능하기 때문에, 연관된 모든 노드는 하나의 클러스터에서 구성원으로 연결되어야 한다.같은 클러스터를 구성하는 노드들은 같은 클러스터 이름으로 설정해야 한다(클러스터 이름을 통해 구성원 인식)같은 클러스터 내부 노드는 데이터 색인, 검색 작업을 함께 수행하며, 장애 시, 데이터 복구 작업도 서..

Elastic Search 2025.10.05

Ch02. 데이터 베이스 시작 - 제약 조건

제약 조건은 테이블에 데이터를 저장할 때, 특정 규칙을 지키도록 강제하는 장치다. 이 규칙 덕분에 우리는 잘못되거나 일관성 없는 데이터가 입력되는 것을 원천적으로 차단할 수 있다. 데이터의 '무결성', 즉 데이터에 결점이 없는 상태를 유지하는 것이 제약 조건의 핵심 목표다. 제약 조건NOT_NULL : 필수 입력 항목 지정이 제약 조건이 걸린 열에는 NULL 값(값이 없음)을 허용하지 않는다.즉, 데이터를 INSERT 할 때 이 열의 값은 반드시 입력되어야 한다. 고객의 이름, 아이디, 상품의 가격 등은 비어있으면 안 되는 핵심 정보이므로 NOT_NULL을 설정해야 한다.UNIQUE : 중복 불가 항목 지정이 제약 조건이 걸린 열의 값은 테이블 내에서 항상 고유해야 한다. 즉, 중복된 값을 허용하지 않는..

Ch02. 데이터 베이스 시작 - 데이터 타입

데이터 타입은 단순히 '숫자'나 '글자' 정도로만 구분되지 않는다. 어떤 종류의 숫자인지, 글자의 길이는 어떻게 되는지에 따라 타입을 세분화해서 선택해야 저장 공간을 효율적으로 사용하고 데이터의 정확성을 높일 수 있다. 왜 이렇게 다양한 데이터 타입이 필요할까? 답은 '효율성'과 '정확성'에 있다. 알맞은 크기의 옷을 입어야 편한 것처럼, 데이터에 딱 맞는 타입을 지정해야 저장 공간(디스크)과 메모리를 아끼고, 데이터의 성격을 명확히 하여 오류를 줄일 수 있다.숫자 타입정확한 숫자 타입타입저장 공간(Bytes)설명INTEGER, INT4가장 일반적으로 사용되는 정수 타입(-2,147,483,648 ~ 2,147,483,647)TINYINT1매우 작은 정수를 저장할 때 사용 (-128 ~ 127)SMALL..

Ch02. 데이터 베이스 시작 - SQL이란

SQL(Structured Query Language)란?우리는 앞서 CREATE , INSERT, SELECT같은 몇 가지 영어 단어로 데이터베이스를 다뤄봤다. 이 명령어들의 집합이 바로 SQL(Structured Query Language), 우리말로는 구조화된 질의 언어다. 여기서 또다시 질문을 던져보자. 왜 우리는 SQL이라는 새로운 언어를 배워야만 하는가? MySQL, Oracle, PostgreSQL, Microsoft SQL Server 등 세상에는 다양한 종류의 관계형 데이터베이스가 존재한다. 예를 들어서 현재 팀에서 MySQL을 사용해서 열심히 배웠는데, 다른 팀으로 이동하거나 다른 회사로 이직했을 때 Oracle을 사용한다고 가정해보자. 만약 이 데이터베이스들이 각자 다른 명령어를 사용..