일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- upper_bound
- softeer
- Docker
- 이분탐색
- 경력
- 파라메트릭
- Kafka
- 퇴사통보
- 매개변수탐색
- 백트래킹
- incr
- boj #19237 #어른 상어
- 13908
- 기술면접
- 처우협의
- 소프티어
- compose
- 백준
- 성적평가
- 6987
- 연결요소
- @P0
- BOJ
- dfs
- msSQL
- 처우산정
- BFS
- 물채우기
- Today
- Total
목록분류 전체보기 (633)
기술 블로그

◎ 레코드 레코드는 타임스탬프, 헤더, 메시지 키지, 메시지 값, 오프셋으로 구성되어 있음. 프로듀서가 생성한 레코드가 브로커로 전송되면, 오프셋과 타임스탬프가 지정되어 저장됨. 브로커에 한 번 적재된 레코드는 수정이 불가능하며, 로그 리텐션 기간 또는 용량에 의해서만 삭제 레코드 : 프로듀서가 파티션에 보낸 데이터 ◎ 레코드 - 타임스탬프 레코드의 타임스탬프는 스트림 프로세싱에서 활용하기 위한 시간을 저장하는 용도로 사용 카프카 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 <..
https://softeer.ai/practice/info.do?idx=1&eid=1204&sw_prbl_sbms_sn=181695 파라메트릭 서치(매개변수 탐색) + 이분 탐색 1. 처음 제출했을 때, 시간 초과 발생했는데, ps() 함수 안에서 continue가 아니라 break를 했어야 했다. continue는 의미 없다. 2. 다시 시간 초과가 발생하길래 확인했더니, ++left, --right가 아니라 left = mid + 1, right = mid - 1을 했어야 했다. 실수 금지 시간 초과 코드 ↓ // 시간 초과 코드 #include using namespace std; vector v; int N; long B; // m : 각 경우 마다, 최초 v에서 가장 낮은 성능이 올릴 수 있는 ..

https://softeer.ai/practice/info.do?idx=1&eid=1309 1. 정렬(sort) 및 이진탐색(upper_bound) 활용 2. 이진탐색한 인덱스를 문제에 제시된 순위(등수)에 맞게 다시 계산 3. 힌트 : 각 사람마다 “나보다 점수가 큰 사람”의 수를 세어 1을 더한 것이 자신의 등수가 된다. 4. 정렬한 벡터(또는 배열)과 입력한 순서를 기억할 벡터(또는 배열) 모두 활용 #include using namespace std; int N; vector v, p; int t[100001], tt[100001]; int main(int argc, char** argv) { scanf("%d", &N); for (int i = 0; i < 3; i++) { v.clear(); ..
https://www.acmicpc.net/problem/2887 지난 풀이 : https://hsdevelopment.tistory.com/417 일반적인 MST로는 메모리 초과가 발생한다. 처음에는 모든 행성들 간에 각각 행성의 x, y, z 및 이중 for문을 활용해, vector에 담는 방법을 생각할 수 있지만. 최대 10만개라서, 메모리 초과가 발생한다. 생각해볼 수 있는건 행성 A : xa, ya, za 행성 B : xb, yb, zb 일 때의 거리로 인정 받는 최솟값은 min(|xa-xb|, |ya-yb|, |za-zb|)라는 점이다. 즉, 행성 A와 행성 B를 이중 for문을 통해 담는 것이 아니라, x 좌표, y 좌표, z 좌표끼리 각각 vector에 담아서 구현할 수 있다. 1. x좌표..
https://www.acmicpc.net/problem/18430 지난 번 풀이 : https://hsdevelopment.tistory.com/788 현재 좌표(r, c)를 부메랑으로 사용할지 말지 2가지의 경우를 모두 고려해야한다. go bool 변수를 활용해서 현재 좌표(r, c)에서의 4가지 부메랑 중 하나를 수행했다고 해서, 현재 좌표(r, c)에서는 부메랑을 사용하지 않는 경우를 잊어버리며 안 된다. 오답인 소스코드는 현재 좌표(r, c)를 부메랑으로 사용한 후에는 go bool 변수에 true로 표시하는 바람에 그 밑의 경우(현재 좌표를 부메랑으로 사용하지 않을 때)가 수행되지 않는다. 그래서, 단순 go bool 변수를 사용하지 않고, 삼중 for문 밑에 바로 simulation(r, c..