전체 글

2장. 데이터 모델과 질의 언어
개요데이터 저장과 질의를 위한 다양한 범용 데이터 모델을 알아보자.관계형 모델, 문서 모델, 그래프 기반 모델을 비교해보자.관계형 모델과 문서 모델관계형 모델: 데이터가 관계(테이블)로 구성되고 각 관계는 순서 없는 튜플(Row)의 모음관계형 모델은 관계형 데이터베이스(RDBMS)로 발전했으며 정규화된 구조를 데이터를 저장하고 질의할 때 사용되었다.관계형 모델의 목표는 정리된 인터페이스 뒤로 구현 세부사항을 숨기는 것이다.NoSQL의 탄생NoSQL의 등장 배경은 다음과 같다.대규모 데이터셋이나 쓰기 연산에 대한 처리량을 관계형 데이터베이스보다 쉽게 도달할 수 있게하는 확장성의 필요도관계형 모델에서 지원하지 않는 특수 질의 동작제한적인 관계형 스키마에 비해 동적이고 표현력이 풍부한 데이터 모델에 대한 바람..

Kafka: Exactly-Once Semantic (w/ Transaction_)
개요Kafka에서 Exactly Once Semantic을 보장하는 방법에 대해서 알아본다. 조건Kafka에서 Exactly-Once Semantic (이하 EoS)를 보장하기 위해선 2가지 조건이 필수적이다Idempotence ProducerTransaction API Idempotence ProducerIdempotence Producer는 이름에서 알 수 있듯, 메세지를 멱등하게 보낼 수 있는 프로듀서를 의미한다.멱등하게 보냄은 메세지가 중복없이 전송되는 것을 의미한다. 하지만 멱등함이 메세지를 정확히 한 번 전송함을 의미하는 것은 아니다. Idempotence Producer가 활성화되면 프로듀서는 숫자로 구성된 PID를 할당받는다. Idempotence Producer가 전송하는 메세지에는 파티..

EKS 클러스터에서 nGrinder 사용하기
개요쿠버네티스(EKS Cluster) 환경에 nGrinder를 설치하고 API 서버에 부하를 넣어보는 방법에 대해서 알아본다. nGrindernGrinder는 오픈 소스 기반의 분산 성능 테스트 도구이다.nGrinder는 Controller와 Agent로 구성된다.Controller: 테스트 계획 설정, Agent 관리, 모니터링, 테스트 결과 및 분석과 같이 관리자의 역할을 담당하는 컴포넌트Agent: 테스트 스크립트 실행, 분산 처리, 실시간 데이터 전송을 담당하는 실제 명령을 수행하는 컴포넌트따라서, nGrinder를 이용해 API 서버에 부하를 넣기 위해선 Controller, Agent를 모두 설치해야한다. nGrinder ControllernGrinder Controller를 배포하기 위한 D..

Kafka Connect: Incremental Cooperative Rebalancing
서론Kafka Connect Worker는 컨테이너 기반(e.g Kubernetes Pod)이나 물리적/가상 머신(e.g EC2)에서 일반적으로 사용된다.이러한 환경에서는 Rolling Restart, Scale-Up/Down, Scale-In/Out 등과 같이 Worker Group의 상태 변경으로 인해 리밸런싱이 자주 발생할 수 있다. Kafka 2.3.0 이전에는 리밸런싱 시 모든 Task와 Connector가 모두 Revoke된 후 다시 Assign되는 방식(Eager Rebalance)이 적용됐다.이는 리밸런싱 과정에서 전체 작업이 중단되는 “Stop-The-World” 현상을 야기했다. 이를 해결하기 위해 **KIP-415: Incremental Cooperative Rebalancing이 제..

Kafka: Static Membership
서론Kafka Consumer는 여러 가지 이벤트를 통해 리밸런싱이 발생한다.Consumer ↔ GroupCoordinator 간 session.timeout.ms 내에 Heartbeat가 수신되지 않은 경우Consumer가 Consumer Group을 나가거나 들어오는 경우Consumer Group이 구독하는 토픽의 파티션이 추가되는 경우 등Consumer는 리밸런싱이 시작되면 완료되기 전까지 데이터를 처리하지 못한다. 이로 인해 데이터 처리가 일시 중단되며 지연이 발생한다.또한, 리밸런싱 과정에서 파티션을 Revoke/Assign 하는 과정에서 네트워크 부하 등으로 인한 클러스터 성능 저하가 발생한다. Kafka 2.3.0부터는 이러한 리밸런싱의 단점을 보완하기 위해 Static Membership이..

Docker: Container Exit Code
개요Docker Container의 Exit Code를 정리하고 각 코드의 의미에 대해서 정리한다.Docker Container Exit CodeDocker Container Exit Code란 컨테이너가 종료될 때 “컨테이너가 종료된 원인”을 전달하는데 사용된다.Exit Code를 통해서 컨테이너 종료의 근본적인 원인을 파악할 수 있다.Exit Code는 0 ~ 255까지의 범위를 가지며, 125 미만의 코드는 애플리케이션 사이드에서 종료 코드를 설정하고, 125 이상의 코드는 컨테이너나 시스템 레벨에서 발생한 문제이며 코드는 예약되어 있다.ListExit CodeNameDescriptionExit Code 0Purposely stopped컨테이너가 자동으로 종료됨 (정상 종료)Exit Code 1Ap..

Strimzi, Kafka Connect를 이용한 데이터 통합 파이프라인 환경 구성하기
서론현재 회사에서 진행중인 메인 프로젝트는 실시간으로 게임으로부터 들어오는 데이터를 통합하고 이를 가공해 제 3자 서비스에게 가공된 데이터를 제공해주는 파이프라인을 구축하는 것입니다. 팀에서는 대용량 데이터를 실시간으로 스트리밍 처리하기 위해 Kafka를 사용 중입니다.따라서, 실시간으로 외부 저장소에 적재되는 게임 데이터를 Kafka로 통합하고, 가공된 데이터를 외부 저장소로 적재하는 기술 도입이 필요했습니다. Kafka Connect는 Kafka의 구성 요소로서 분산 데이터 처리 플랫폼에서 스트리밍 데이터 통합 프레임워크입니다.다양한 외부 저장소(Source/SInk)로부터 Kafka Connector를 통해 데이터를 가져오고, 적재할 수 있는 장점이 있습니다. 일반적으로 Kafka Connect는 ..

Kafka Connect: Custom TimestmapExtractor
개요Confluent S3 Sink Connector는 Custom Partitioner, Custom TimestampExtractor 구현을 통해 요구사항에 맞게 S3 버킷 경로 구성이 가능하다.TimeBasedPartitioner 사용 시 Custom TimestampExtractor를 이용해 Record에서 Tiemstamp를 추출해서 버킷 경로를 구성해보자.TimestampExtractor사용 용도Kafka Record 내에서 특정 기준으로 Timestamp를 추출하는 기능을 제공하는 인터페이스Confluent에서 공식적으로 제공하는 TimestampExtractor 구현체는 다음과 같다.RecordFieldTimestampExtractor: Record내 타임스탬프를 사용하는 필드에서 추출Re..