전체 글 1341

Consumer에서 여러 개의 Topic 읽기

1) Topic 생성Topic-p3-t1kafka-topics --bootstrap-server localhost:9092 --create --topic topic-p3-t1 --partitions 3Topic-p3-t2kafka-topics --bootstrap-server localhost:9092 --create --topic topic-p3-t2 --partitions 3 2) ConsumerMTopicRebalance 생성 public static void main(String[] args) { //String topicName = "pizza-topic"; Properties props = new Properties(); props.setProperty(C..

Consumer의 Heartbeat 스레드와 관련 주요 파라미터

HeartBeat Thread를 통해서 브로커의 Group Coordinator에 Consumer의 상태를 전송한다.Heart Beat 관련 주요 파라미터Consumer 파라미터 명기본값(ms)설명heartbeat.interval.ms3000- heart beat thread가 heart beat를 보내는 간격- session.timout.ms보다 낮게 설정되어야 한다. session.timeout.ms의 1/3 보다 낮게 설정하는 것을 권장한다.session.timeout.ms45000- 브로커가 Consumer로 Heart Beat를 기다리는 최대 시간- 브로커는 이 시간동안 Heart Beat를 Consumer로 부터 받지 못하면 해당 Consumer를 Group에서 제외하고, Rebalance 지..

Consumer의 Static Group Membership

필요성많은 Consumer를 가지는 Consumer Group에서 Rebalance가 발생하면 모든 Consumer들이 Rebalance를 수행하므로 많은 시간이 소모되고, 대량 데이터 처리 시 Lag가 더 길어질 수 있다.유지보수 차원의 Consumer Restart도 Rebalance를 초래하므로 불필요한 Rebalance를 발생시키지 않을 방법을 대두.Static Group MembershipConsumer Group내의 Consumer들에게 고정된 ID를 부여Consumer 별로 Consumer Group 최초 조인 시 할당된 파티션을 그대로 유지하고, Consumer가 shutdown 되더라도 session.timeout.ms 내에 재기동되면, Rebalance가 수행되지 않고 기존 파티션이 재..

Group Cordinator와 Consumer의 Rebalance 상세 메커니즘

Group coordinator와 Consumer의 RebalanceBroker의 Group Coordinator는 아래 상황에서, Consumer Group내의 Consumer들에게 파티션을 재할당하는 Rebalancing을 수행하도록 지시한다.Consumer Group 내에 새로운 Consumer가 추가되거나 기존 Consumer가 종료될 때Topic에 새로운 Partition이 추가될 때동작 순서Consumer Group 내의 Consumer가 브로커에 최초 접속 요청 시 Group Coordinator 생성한다동일한 group.id로 여러개의 Consumer로 Broker의 Group Coordinator 접근한다가장 빨리 Group에 Join을 요청한 Consumer에게 Consumer Grou..

Ch04. 조회와 정렬 - null

NULL 비교SELECT * FROM products WHERE description = NULL실행결과는 없다.분명 보급형 스마트폰의 description 값은 NULL이기 때문에 조회가 될 것으로 기대했는데, 기대와는 다르게 아무 상품도 조회되지 않았다.NULL 연산 - 알 수 없음데이터베이스에서 '값이 없음'을 나타내는 특별한 상태를 NULL이라고 한다. NULL은 숫자 0이나 빈 문자열( '' )과는 완전히 다른 개념이다. 말 그대로 '알 수 없는 값', '존재하지 않는 값'이다.상품 설명이 비어있는 상품을 찾기 위해 WHERE description = NULL이라고 쓰면 될까? 절대 안 된다. NULL은 특정 값이 아니기 때문에 등호(= )로 비교할 수 없다. SQL에서 NULL이 '값이 없는 ..

Ch04. 조회와 정렬 - Distinct

데이터를 조회하다 보면, 우리가 원하지 않는 중복된 값들이 계속 나타나는 경우가 있다. 이럴 때 어떻게 유일한 값들만 깔끔하게 추려낼 수 있을까? DistinctDISTINCT는 SELECT문에서 컬럼 이름 바로 앞에 붙여 사용하며, 조회된 결과에서 중복된 행을 모두 제거하고 유일 한(unique) 값 남겨준다.select distinct customer_idfrom orders;각 고객 ID가 한번씩만 나타난다.1 , 2 , 3 번 고객이 우리 쇼핑몰에서 주문을 했다는 사실을 명확하게 알 수 있다여러 컬럼에 DISTINCT 적용하기DISTINCT는 하나의 컬럼에만 사용할 수 있는 것이 아니다. 여러 개의 컬럼을 대상으로도 사용할 수 있다. 이 경우, 지정된 모든 컬럼의 조합이 유일한 것들만 보여준다. ..

Ch04. 조회와 정렬 - Limit

데이터가 수백만, 수천만 건이 된다고 상상해 보자. 이 데이터를 SELECT 문으로 한 번에 모두 조회하는 것은 시스템에 엄청난 부담을 준다. 조회 속도가 느려지는 것은 물론이고, 심하면 서버가 다운될 수도 있다. 네트워크에도 부하가 걸린다.사실 우리는 전체 데이터가 아니라 '상위 N개'만 보거나, '특정 구간'의 데이터만 잘라서 보고 싶은 경우가 훨씬 많다. 이럴때 사용하는 것이 바로 LIMIT 절이다. 조회 결과 개수를 제한하는 LIMITSELECT 열이름FROM 테이블이름WHERE 조건ORDER BY 정렬기준LIMIT 개수;LIMIT 는 ORDER BY` 와 함께 사용해야 진정한 의미가 있다. 왜일까? 앞에서 말했듯이 데이터베이스는 결과의 순서를 보장하지 않는다.정렬되지 않은 상태에서 `LIMIT ..

Ch04. 조회와 정렬 - order by

SELECT와WHERE 만 사용해서 데이터를 조회하면, 그 결과는 어떤 순서로 나올까? 정답은 '알 수 없다' 또는 '데이터베이스 마음대로'이다. 데이터베이스는 데이터를 가장 효율적으로 저장하고 관리할 뿐, 우리가 조회할 때 특정 순서대로 보여줘야 할 의무가 없다. 어떨 때는 기본 키(PRIMARY KEY) 순서로, 어떨 때는 데이터가 삽입된 순서로 보이는 등 일관성이 없다.따라서 데이터를 분석하거나 보고서를 만들 때는 의미 있는 순서로 나열하는 과정이 반드시 필요하다. '최신순', '가격 높은순높은 순', '이름 가나다순' 처럼 말이다. 이럴 때 사용하는 것이 ORDER BY 절이다 결과를 순서를 지정하는 ORDER BYSELECT 열이름FROM 테이블이름WHERE 조건ORDER BY 정렬기준열 [정렬..

Ch04. 조회와 정렬 - where

Where 절과 비교 연산자WHERE 절은 FROM 절 바로 뒤에 위치하며, 우리가 원하는 행(Row)만 걸러내는 필터 역할을 한다.SELECT 열이름FROM 테이블이름WHERE 조건; WHERE 절에는 '조건문'이 들어가는데, 이 조건문은 보통 '비교 연산자'를 사용하여 만들어진다. 가장 기본이 되는 비교 연산자들은 다음과 같다연산자의미예시=같다WHERE name = '이순신'!= 또는 같지 않다WHERE name != '세종대왕'>크다WHERE price > 10000작다WHERE stock_quantity >=크거나 같다WHERE price >= 10000작거나 같다WHERE stock_quantity 실습 1) customers 테이블에서 이메일이 "yisunsin@example.com"인 고..