얼렁뚱땅 스며드는 Data Science

전체 글 120

[Kafka] Apache Kafka 초보 4 : 컨슈머 그룹 & 컨슈머 오프셋

이 글은 Udemy의 '초보자를 위한 아파치 카프카 강의 v3'를 듣고 정리한 내용이다. 컨슈머 그룹컨슈머는 그룹형태로 데이터를 읽어옴그룹 안의 컨슈머들은 각각 상호배타적으로 파티션을 읽어옴만약 파티션의 개수보다 컨슈머가 많은면, 여유분은 stand by 컨슈머 오프셋커밋된 offset은 '__consumer_offset'이라는 카프카 토픽으로 저장데이터가 충돌나거나 실패한 곳 (offset)부터 읽어올 수 있음java consumer는 자동으로 offset commit수동 커밋at least once (주로 사용됨)메시지가 처리된 후 오프셋이 커밋됨문제가 생겼을때 다시 읽을 수 있음(멱등성 보장)메시지 중복이 발생될 수 있음at most once메세지가 도착하자 마자 바로 오프셋 커밋문제가 생겼을때 일..

카테고리 없음 2024.07.03

[Kafka] Apache Kafka 초보 3 : 컨슈머 & 역직렬화

이 글은 Udemy의 '초보자를 위한 아파치 카프카 강의 v3'를 듣고 정리한 내용이다. 컨슈머topic에서 부터 데이터를 읽어옴 (이름으로 구별됨) : pull modelkafka 브로커에 데이터 요청, 응답받음컨슈머는 여러개의 파티션을 읽어올 수 있음컨슈머는 어떤 브로커(kafka server)에서 읽어올지 알게됨브로커가 failure면, 컨슈머는 어떻게 recover할지 알 수 있음데이터는 각 파티션의 offset의 순서대로 읽어옴 Consumer Deserializerbytes -> object / datavalue, key에만 쓰임consumer는 메세지 형식이 어떻게 되어있는지 사전에 알아야 함common deserializersstring (+ json)int, floatavroprotob..

[Kafka] Apache Kafka 초보 2 : 프로듀서 & 메시지 키

이 글은 Udemy의 '초보자를 위한 아파치 카프카 강의 v3'를 듣고 정리한 내용이다. 프로듀서프로듀서는 topic에 데이터를 쓴다프로듀서는 어떤 파티션에 데이터를 쓸지 알고 있다카프카 브로커가 해당 정보를 가지고 있음카프카 서버에서 특정 파티션이 failure되면, 프로듀서는 recover할 수 있음로드밸런싱을 함 메세지 키프로듀서는 메세지에 키를 추가하여 보낼 수 있음 (선택사항, 키는 string, number, binary, ...의 형식을 가짐)key=null이면 round-robin 형식으로 전송key!=null이면 특정한 키에만 데이터가 써짐 (hashing strategy)특정 field의 메세지 순서가 중요하다면 key를 제공해줘야함Kafka message key hashingkafka..

[Kafka] Apache Kafka 초보 1 : 토픽, 파티션, 오프셋

이 글은 Udemy의 '초보자를 위한 아파치 카프카 강의 v3'를 듣고 정리한 내용이다. 토픽db로 치면 테이블과 비슷한 개념으로, 파티션을 구성할 수 있다.모든 종류의 message format 가능 (avro, json, txt ..)message의 순서는 'data stream'으로 부름topic을 query할 수 없지만, consumer로 데이터를 보내 읽을 수 있게 할 수 있음데이터가 한번 쓰이면 수정 불가 (immutable)데이터는 한정된 시간만큼 보관된다 (디폴트는 일주일) 파티션토픽 내에 여러개의 파티션을 만들 수 있다파티션 내 메세지 순서는 파티션 내부에서만 한정적으로 보장된다 (파티션 간에는 순서 보장 x)topic은 immutable : partition에 데이터가 쓰이면 수정 불가..

[Git] 원격저장소 변경사항 반영 후 commit push : rebase

회사 깃랩에 신입사원 수습 레포지토리에 업무하면서 소소한 기록을 했었는데새로운 레포지토리로 옮기기 위해 작업을 하다 막힌 부분이 있어 정리를 하게 됐다.  원래 기존 레포지토리를 복사해서 새로운 리포지토리에 넣는 방법은 --mirror 옵션을 넣어주는 방식이다.새로운 저장소가 될 디렉토리에서 git clone --mirror를 넣어준다git clone --mirror {old_repo_url}해당 디렉토리 하위로 생긴 old_proj_name.git 로 이동한 뒤, remote push url 변경cd {old_proj_name}.git git remote set-url --push origin {new_repo_url}--mirror 옵션 추가 후 pushgit push --mirror하지만 아래와 같..

소소한 오류들 2024.04.30

[프로그래머스] level1. 최소 직사각형

문제 설명 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다. 아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다. 명함 번호가로 길이세로 길이 1 60 50 2 30 70 3 60 30 4 80 40 가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 ..

[프로그래머스] level1. 같은 숫자는 싫어

작년에 풀고 다시 풀어봅니다! 문제 설명 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면, arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다. arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다. 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 제한사항 배열 arr의 크기 : 1,000,000 이하의 자연수 배열 arr의 ..

[프로그래머스] level1. 성격 유형 검사하기

문제 설명 나만의 카카오 성격 유형 검사지를 만들려고 합니다. 성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다. 지표 번호성격 유형 1번 지표 라이언형(R), 튜브형(T) 2번 지표 콘형(C), 프로도형(F) 3번 지표 제이지형(J), 무지형(M) 4번 지표 어피치형(A), 네오형(N) 4개의 지표가 있으므로 성격 유형은 총 16(=2 x 2 x 2 x 2)가지가 나올 수 있습니다. 예를 들어, "RFMN"이나 "TCMA"와 같은 성격 유형이 있습니다. 검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다. 매우 비동의 비동의 약간 비동의 모르겠음 약간 동의 동의 매우 동의 각 질문은 1가지 지표로 성격..

[프로그래머스] level1. 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다. 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다. 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다. k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다. 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다. 다음은 전체 유저 목록이 ["muzi", "frodo", "apeach", "neo"]이고, k = 2..