일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 물채우기
- OFFSET
- 기술면접
- 매개변수탐색
- incr
- 오퍼레터
- compose
- 파라메트릭
- @P0
- 백트래킹
- boj #19237 #어른 상어
- 퇴사통보
- msSQL
- Docker
- dfs
- 6987
- 이분탐색
- 처우협의
- 경력
- upper_bound
- 처우산정
- BOJ
- 백준
- Kafka
- 성적평가
- 소프티어
- 13908
- softeer
- 연결요소
- BFS
- Today
- Total
목록전체 글 (629)
기술 블로그
카프카 클러스트는 브로커들의 묶음. 클러스터는 1대 이상의 브로커로 이루어져 있다. 카프카 브로커를 실행하기 위해서는 주키퍼가 필수(3.0.0부터는 제외 가능) 프로듀서에서 전송된 데이터는 디렉토리에 저장 브로커는 복제, 컨트롤러, 데이터 삭제, 오프셋 저장, 코디네이터 역할 수행 1개의 주키퍼에는 여러 카프카 클러스터를 운영할 수 있음 토픽은 1개 이상의 파티션으로 구성되어 있음 파티션은 FIFO구조 이지만, 컨슈머가 데이터를 가져가더라도 바로 삭제되지 않음 컨슈머의 처리량을 늘리기 위해 파티션의 개수를 늘릴 수 있음
◎ 클라이언트 메타데이터 카프카 클라이언트는 통신하고자 하는 리더 파티션의 위치를 알기 위해 데이터를 주고(프로듀서) 받기(컨슈머) 전에 메타데이터를 브로커로부터 전달받는다. 메타데이터는 다음과 같은 옵션을 통해 리프레쉬된다. 카프카 프로듀서 메타데이터 옵션 1) metadata.max.age.ms : 메타데이터를 강제로 리프레쉬하는 간격. 기본값은 5분. 2) metadata.max.idle.ms : 프로듀서가 유휴 상태일 경우 메타데이터를 캐시에 유지하는 기간. 예를 들어, 프로듀서가 특정 토픽으로 데이터를 보낸 이후 지정한 시간이 지나고 나면 장제로 메타데이터를 리프레쉬. 기본값은 5분. ◎ 클라이언트 메타데이터가 이슈가 발생한 경우 카프카 클라이언트는 반드시 리더 파티션과 통신해야 한다. 만약 메..
◎ 직렬화(Serialization) Java의 객체를 외부로 저장/복원하거나 네트워크 상으로 전송할 수 있도록 바이트 형태로 변환하는 기술을 의미 객체를 저장, 전송할 수 있는 특정 포맷 상태로 바꾸는 과정 객체가 아무리 복잡하여도 직렬화를 통해 객체를 바이트 형태로 변환하여 외부로 전송할 수 있음 java.io.Serializable 인터페이스를 구현함으로써 Java 직렬화를 수행 transient 키워드를 사용하면 해당 변수는 직렬화에서 제외할 수 있다. 데이터를 저장하거나 전송할 때 민감한 정보 등을 제외하고 싶은 경우에 사용할 수 있음 장점 1 : 객체의 상태를 저장하는데 용이 장점 2 : 네트워크로 객체를 전송하는데 용이 ◎ 역직렬화(Deserialization) 직렬화를 통해 변환된 바이트 ..
◎ 레코드 레코드는 타임스탬프, 헤더, 메시지 키지, 메시지 값, 오프셋으로 구성되어 있음. 프로듀서가 생성한 레코드가 브로커로 전송되면, 오프셋과 타임스탬프가 지정되어 저장됨. 브로커에 한 번 적재된 레코드는 수정이 불가능하며, 로그 리텐션 기간 또는 용량에 의해서만 삭제 레코드 : 프로듀서가 파티션에 보낸 데이터 ◎ 레코드 - 타임스탬프 레코드의 타임스탬프는 스트림 프로세싱에서 활용하기 위한 시간을 저장하는 용도로 사용 카프카 0.10.0.0 이후 버전부터 추가된 타임스탬프는 Unix timestamp가 포함되며, 프로듀서에서 따로 설정하지 ㅇ낳아도 기본값으로 ProducerRecord 생성 시간(CreateTime)이 들어감. 브로커 적재 시간(LogAppendTime)으로 설정할 수도 있다. 해당..
1. 카프카 생태계 프로듀서, 컨슈머, 스트림즈 → Java 기반 커넥트(소스) : 프로듀서의 역할 커넥트(싱크) : 컨슈머의 역할 2. 브로커, 클러스터, 주키퍼 브로커 : 카프카 클라이언트와 데이터를 주고받기 위해 사용하는 주체이자, 데이터를 분산 저장하여 장애가 발생하더라도 안전하게 사용할 수 있도록 도와주는 애플리케이션 하나의 서버에는 한 개의 카프카 브로커 프로세스가 실행된다. 3대 이상의 브로커 서버를 1개의 클러스터로 묶어서 운영해야한다. 3. 여러개의 카프카 클러스터가 연결된 주키퍼 카프카 클러스터로 실행하기 위해서는 주키퍼가 필요함 주키퍼의 서로 다른 znode에 클러스터를 지정하면 됨 root znode에 각 클러스터별 znode를 생성하고, 클러스터 실행시 root가 아닌 하위 zno..
1. 카프카의 탄생 시간이 지날수록 아키텍처는 거대해졌고, 소스 애플리케이션과 타겟 애플리케이션의 개수가 점점 많아지면서 문제가 생김. 이를 해결하기 위해, 링크드인 데이터팀에서는 데이터 파이프라인의 파편화를 개선하려고 하였지만, 데이터 파이프라인의 복잡도를 낮춰주는 아키텍처가 되지는 못함. 결국 링크드인의 데이터팀은 신규 시스템을 만들기로 결정했고, 그 결과물이 바로 아파치 카프카다. 링크드인의 내부 데이터 흐름을 개선하기 위해 개발한 것이 카프카다. 2. 메시지 큐 구조를 그대로 살린 카프카 내부 구조 기존에 1:1 매칭으로 개발하고 운영하던 데이터 파이프라인의 커플링으로 인해 한 쪽의 이슈가 다른 한 쪽의 애플리케이션에 영향을 미치곤 했지만, 카프카는 이러한 의존도를 타파하였음. 어느 타깃 애플리케..
https://www.acmicpc.net/problem/1477 1. 휴게소의 위치는 1이 아니라 0부터 시작한다. "길이가 1,000"이라는 말과 "~휴게소가 없는 구간의 최댓값은 200~701구간인 501이다.~" 이라는 말 그리고 최대 길이가 1000이라는 조건이 존재할 때, 시작 위치가 0이라는 뜻이다. 2. 처음에는 chk() 함수의 return을 int로 했었다.(0, 1, 2) 0 : cnt > M 1 : cnt == M 2 : cnt < M [최초 구현 로직] 1과 2 일 때, right = mid - 1; → "1"일 때만, ret = min(ret, mid); 수행 0일 때, left = mid + 1; 하지만, cnt == M일 때만 최솟값을 갱신할 필요가 없었다. 이유는 cnt <..