분류 전체보기 15

[Database] Cardinality / Selectivity

Cardinality SQL에서 카디널리티 : 데이터 집합에서 유니크(unique)한 원소 개수(테이블의 '성별' 칼럼에 값이 남,여 두가지밖에 없다면 카디널리티는 2) 데이터 모델링에서 카디널리티 : 한 테이블이 다른 테이블과 가질 수 있는 관계(일대일, 다대다, 일대다, 다대일) 보통 카디널리티라고 하면 주어진 테이블에 있는 열의 카디널리티를 뜻하는 경우가 많음. (이는 해당 열에 대한 테이블에 나타나는 고유한 값의 수를 나타낸다.) 카디널리티는 상대적인 개념이며, 모든 열의 데이터가 고유하다면 high-cardinality 하다고 표현한다. 즉, 카디널리티는 해당 컬럼의 중복된 수치를 뜻하기 때문에 해당 테이블의 해당 컬럼의 값이 얼마나 중복되었는지 조회함으로 카디널리티를 알 수 있다. SELECT..

Database 2023.12.05

[OS] Zero Copy

https://colevelup.tistory.com/23 [Kafka] Kafka와 zero-copy 이전 카프카 도입 사례에서 Twitter가 내부에서 활용하는 In-House-Event-Bus에서 kafka로 전환하계 되는 이유들 중 하나가 kafka가 zero-copy를 제공한다라는 말이 있었습니다. zero-copy에 대해서 자세하게 알 colevelup.tistory.com 해당 블로그에 zero copy에 대해 잘 정리가 되어 있어 오늘은 해당 부분을 내 블로그에 옮겨 적어보며 공부해보고자 한다. 해당 글이 잘 이해되지 않는다면 위에 블로그가 정리가 깔끔하게 되어 있으니 들어 가서 다시 읽어 볼 것을 추천한다. Kafka와 Zero-Copy 오늘날 스트리밍 데이터 플랫폼에서 Kafka를 쉽게..

CS 기초 2023.07.14

[Kafka] 성능 측정 지표

성능 지표 성능을 측정할 때 어디에 중점을 두고 테스트를 하느냐에 따라 적합과 부적합이 나뉠 수 있다고 생각한다. 아래는 카프카 클러스터의 성능을 체크할 때 알아볼 수 있는 지표를 추려본 내용이다. 각각의 목표는 trade-off가 발생한다. Throughput vs Latency Durability vs Availability Throughput : 처리량 얼마나 많은 데이터를 처리할 수 있는 지에 대한 지표. 시간 당 얼마 만큼의 메세지를 처리할 수 있는지를 말한다. 고려할 만한 옵션들 - Producer 더보기 batch.size 같은 파티션으로 보내는 다수의 레코드를 배치로 묶어 보내기 위해 bytes를 단위로 묶어 전송할 것인지 설정 linger.ms 배치 형태의 메시지를 보내기 전에 추가적인 ..

Hadoop eco 2023.05.23

[Kafka] Message Delivery Semantics

메세지 전송 전략 메시징 시스템의 메시지 보증 전략 at-most-once (최대 한번만) 실패나 타임 아웃 등이 발생하면 메시지를 버릴 수 있다. 데이터가 일부 누락되더라도 영향이 없는 경우엔 대량 처리 혹은 실시간성이 중요한 서비스에 유용할 수 있다. at-least-once (적어도 한 번) 메시지가 최소 1번 이상 전달되는 것을 보장한다. 실패나 타임아웃 등이 발생하면 메시지를 다시 전송하며, 이 경우엔 동일한 메시지가 중복으로 처리될 수 있다. exactly-once (정확히 한 번) 메시지가 정확하게 한 번만 전달되는 것을 보장한다. 손실이나 중복 없이, 순서대로 메시지를 전송하는 것은 구현 난이도가 높고 비용이 많이 든다. exactly-once가 가장 이상적인 메시지 처리 방식이지만 난이도..

Hadoop eco 2023.05.23

Java 개념 정리

JDK, JRE 차이 JDK는 JRE를 포함할 뿐만 아니라 컴파일러(javac), javadoc, jar 등 개발에 유용한 도구들을 포함하고 있다. 따라서 자바 프로그램을 개발하기 위해서는 JDK를 다운로드하여야 한다. 결론은 JRE는 자바 실행 환경이고, JDK는 자바 개발 도구라는 것이다 Main method 참고 https://velog.io/@skyepodium/JAVA-메인-메소드-public-static-void-mainString-args-알아보기 https://javacpro.tistory.com/11 Java에서는 application이 실행된다면 제일 먼저 main method 실행 public 접근 제어자, private → protected → public 순 어느 곳이던 해당 객체..

CS 기초 2023.05.23

[Kafka] 기업 도입 사례들

라인 LINE에서 Kafka를 사용하는 방법 - 1~3편 https://engineering.linecorp.com/ko/blog/how-to-use-kafka-in-line-1 https://engineering.linecorp.com/ko/blog/how-to-use-kafka-in-line-2 https://engineering.linecorp.com/ko/blog/how-to-use-kafka-in-line-3 LINE 오픈챗 서버가 100배 급증하는 트래픽을 다루는 방법 https://engineering.linecorp.com/ko/blog/how-line-openchat-server-handles-extreme-traffic-spikes 여기 어때 Apache Kafka를 사용하여 EDA 적..

Hadoop eco 2023.05.23

[Kafka] Kafka 브로커의 동작

Kafka는 토픽 안에 파티션에 데이터를 저장한다. 브로커가 뭔지 프로듀서가 먼지 모르겠다면 해당 용어부터 빠르게 알고 넘어가자. 토픽 : 데이터를 구분하기 위해 사용하는 단위, 1개 이상의 파티션을 소유하고 있음. 파티션 : 프로듀서가 보낸 데이터들이 들어가 있는 데이터 덩어리. 한개의 데이터마다 레코드 단위로 이뤄짐. FIFO 구조. 레코드 : 한개의 데이터 단위 Partition 파티션은 Kafka의 병렬처리 핵심으로 컨슈머들이 레코드를 병렬로 처리할 수 있도록 매칭된다. 컨슈머 개술를 늘려 파티션의 개수도 늘리면 병렬 처리량이 증가 된다. Topic 토픽 이름 제약조건 빈 문자열 토픽이름은 지원하지 않음 토픽이름은 . 혹은 .. 으로 생성될 수 없음, _ 와 . 가 동시에 들어갈 수도 없음 __c..

Hadoop eco 2023.02.11

[Ciaolabella] 디스크가 점점 쌓인다...!

발견하면서.. 최근에 디스크에 용량이 가득 차 worker1rasp 노드가 죽는 현상이 발생했다. 최초 발견은 Django-Mongo 연결 실패를 확인 후 해당 mongos가 올라가 있는 노드에 접속을 해봤다. 원래 해당 노드는 32GB의 디스크를 가지고 있는 라즈베리파이 컴퓨터였는데, 디스크 사용량이 100%로 올라가면서 가지고 있던 프로세스가 전부 종료가 된 것이다. 일단 디스크 크기를 키우는 것이 우선 되어야 할 것이라 판단했고, 해당 노드의 디스크를 256GB로 교체해 주면서 1차적으로 해결 해 놓은 상태다. 일단 이를 심각하게 생각해야 하는 점은 우리가 서비스 도중에 일어난 상황이 아니라(물론 이랬다면 더 심각했을지도 모르지만..), 개발 도중 테스트를 발생했던 행동들에 의해 일어난 상황이라는 ..

Projects 2023.01.29

[Ciaolabella] worker5desk 노드를 살리기 위한 노력

몽고 클러스터를 구축하기 위해 docker-compose로 컨테이너를 실행하고자 했으나 worker5desk 노드에서 치명적인 결함들이 속속히 발견됐다. 네트워크는 불안정 했고, journalctl이 원인으로 추청 되는 디스크 보호 모드 작동 등 많은 일들이 어제 새벽 동안 발생했다. 사실 그동안 프로젝트가 끝나고 해당 노드는 계속 재시동 한번 없이 계속 꺼뒀던 상태 인지라, 갑작스럽게 여러 문제가 겹쳐 발생하니 당황스러웠다. 시작은 간만에 킨 가상머신 안에서 docker-compose를 실행시키기 전에 발생 했는데 Read only File System으로 변한 것은 docker network create 명령어를 실행시키면서 알게 됐다. 언제부터 해당 디스크가 보호모드로 작동됐는지 확인하기 위해선 마..

Projects 2023.01.29

[Ciaolabella] 회고 - 2022년 마지막 프로젝트를 끝내며..

올해는 진짜 열심히 공부하며 달렸다. 그 과정에서 내 나름의 작은 성공들도 성취해볼 수 있었다. 특히 올 10월부터 진행한 Ciao label la 서비스를 만드는 프로젝트에서 정말 많은 공부를 할 수 있었다. 기존 챠오 라벨라 프로젝트를 확장 및 보완하는 프로젝트로 시작했으나, 많은 부분을 개선하고 확장성을 고려한 설계는 너무나 재미가 있었다. https://github.com/Kyung-Deok/ciaolabella GitHub - Kyung-Deok/ciaolabella: ciao-labella extention project ciao-labella extention project. Contribute to Kyung-Deok/ciaolabella development by creating an a..

Projects 2023.01.03