Data (10) 썸네일형 리스트형 [Kafka] 메시지 신뢰성 보장 — At-most-once, At-least-once, Exactly-once Kafka는 메시지를 "어느 수준까지 보장할 것인가"를 선택할 수 있는 시스템이다.이 선택을 Delivery Semantics라 하고, 세 가지 수준이 있다.어떤 게 정답이 아니라 서비스 특성에 따라 선택하는 것이고, 수준마다 설정과 구현 전략이 달라진다. 1. 세 가지 전달 보장 수준 개요 세 가지는 트레이드오프 관계다. 유실과 중복을 동시에 없애는 Exactly-once가 가장 강력하지만, 복잡도와 성능 비용도 가장 크다. 2. At-most-once — 최대 한 번메시지를 최대 한 번만 전달한다. 재시도 없이 한 번 보내고 끝이므로 유실이 생길 수 있지만, 중복은 없다. 설정# Produceracks=0# Consumerenable.auto.commit=trueauto.commit.interval... [Kafka] 카프카(Kafka)는 어떻게 메시지를 잃지 않는가 Kafka가 메시지를 잃지 않는 핵심은 ISR(In-Sync Replica) 이다.ISR이 무엇인지, 어떻게 동작하는지 이해하면 왜 특정 설정이 필요한지도 자연스럽게 납득된다.이번 편에서는 ISR 원리를 중심으로, 그것을 실제로 작동시키는 설정까지 함께 다룬다. 1. 배경 — Kafka가 데이터를 저장하는 방식본격적인 ISR 이야기 전에 Kafka의 저장 구조를 간단히 짚고 넘어간다.Kafka는 메시지를 Commit Log에 저장한다. 일반적인 메시지 큐가 Consumer가 소비하면 메시지를 삭제하는 것과 달리, Kafka는 소비 여부와 상관없이 디스크에 그대로 보존하고 새 메시지는 항상 뒤에만 추가(Append-Only)한다. 이 구조 덕분에 Consumer가 다운됐다 재시작해도, 마지막으로 읽은 오.. [Kafka] 카프카(Kafka) 기본 구조 이해하기 — 토픽, 파티션, 레플리카 이 글은 카프카 시리즈의 1편입니다.2편: 메시지 유실 방지 / 3편: 메시지 신뢰성 보장 카프카가 왜 필요한가요?서비스 규모가 커지면 서비스들 사이에 데이터를 직접 주고받는 구조는 한계에 부딪힙니다. 한쪽이 느려지면 다른 쪽도 멈추고, 연결이 늘어날수록 복잡도가 폭발적으로 증가합니다. 카프카(Apache Kafka)는 이 문제를 해결하기 위한 이벤트 스트리밍 플랫폼입니다. 데이터를 보내는 쪽(Producer)과 받는 쪽(Consumer) 사이에 위치해, 두 쪽을 느슨하게 연결합니다. Producer는 카프카에 메시지를 쌓아두고, Consumer는 자신의 속도에 맞게 꺼내 처리합니다. 이처럼 Consumer가 처리 속도를 스스로 조절할 수 있는 구조를 백프레셔(Backpressure) 라고 하며, 카프카.. [Data] 보조 색인에서 인메모리 DB까지 — 데이터를 찾는 다양한 전략 📌 데이터베이스 깊이 파기 시리즈 — 5편 들어가며 3편에서 B-Tree와 LSM-Tree라는 두 가지 핵심 스토리지 엔진 구조를 살펴보았습니다. 하지만 실제 데이터베이스에서는 기본 키(primary key) 하나만으로 데이터를 찾는 경우가 드뭅니다. "이메일이 user@example.com인 사용자를 찾아라", "서울에 있는 식당 중 평점 4.5 이상을 찾아라"처럼 기본 키가 아닌 다른 칼럼으로 검색하는 일이 훨씬 많습니다. [Data] B-Tree vs LSM-Tree — RDB와 NoSQL은 왜 다른 스토리지 엔진을 선택했을까📌 데이터베이스 깊이 파기 시리즈 — 3편 들어가며들어가며이전 편들에서는 RDB, 문서 DB, 그래프 DB의 데이터 모델을 비교하고, SQL·MapReduce·그래프 질의 .. [Data] SQL vs MapReduce vs 그래프 질의 언어 — 선언형과 명령형 사이에서 📌 데이터베이스 깊이 파기 시리즈 — 2편들어가며1편에서 RDB, 문서 DB, 그래프 DB의 데이터 모델을 비교했습니다. 데이터를 어떤 구조로 저장하느냐의 문제였습니다. 이번 편에서는 그 반대편 질문을 다룹니다 — 저장된 데이터를 어떻게 꺼내느냐, 즉 질의 언어의 문제입니다. 질의 언어는 크게 선언형(Declarative)과 명령형(Imperative) 접근으로 나뉩니다. SQL은 선언형의 대표주자이고, MapReduce는 그 중간 어딘가에 위치합니다. 그래프 질의 언어들은 각각 선언형(Cypher, SPARQL)과 명령형(Gremlin)으로 갈라집니다. 이 글에서는 각 질의 언어가 어떤 철학 위에 서 있는지, 그리고 데이터 모델에 따라 왜 서로 다른 질의 언어가 필요한지를 살펴보겠습니다. 1. 선언형.. [Data] Elasticsearch와 Lucene — 세그먼트, 역인덱스, 그리고 벡터 검색 📌 데이터베이스 깊이 파기 시리즈 — 4편 들어가며3편에서 B-Tree와 LSM-Tree를 비교하면서, LSM-Tree는 쓰기에 최적화된 구조라고 했습니다. 그런데 Elasticsearch(이하 ES)는 검색 엔진입니다. 읽기가 핵심인 시스템이 왜 쓰기 최적화 구조를 채택했을까요? [Data] B-Tree vs LSM-Tree — RDB와 NoSQL은 왜 다른 스토리지 엔진을 선택했을까📌 데이터베이스 깊이 파기 시리즈 — 3편 들어가며들어가며이전 편들에서는 RDB, 문서 DB, 그래프 DB의 데이터 모델을 비교하고, SQL·MapReduce·그래프 질의 언어의 철학적 차이를 살펴봤습니다. 이dmoritle.tistory.com 이 질문에 답하려면 ES의 코어 엔진인 Lucene의 세그먼트 아키텍처를.. [Data] B-Tree vs LSM-Tree — RDB와 NoSQL은 왜 다른 스토리지 엔진을 선택했을까 📌 데이터베이스 깊이 파기 시리즈 — 3편 들어가며들어가며이전 편들에서는 RDB, 문서 DB, 그래프 DB의 데이터 모델을 비교하고, SQL·MapReduce·그래프 질의 언어의 철학적 차이를 살펴봤습니다. 이번에는 한 단계 더 아래로 내려가서, 스토리지 엔진의 내부 구조를 살펴보겠습니다. 핵심 질문은 이것입니다.같은 데이터를 저장하는데, 왜 RDB는 B-Tree를 쓰고 NoSQL 계열은 LSM-Tree를 많이 쓸까?이 질문에 답하려면 먼저 각 자료구조가 디스크에 데이터를 어떻게 쓰고 읽는지를 이해해야 합니다. 1. B-Tree — 읽기에 최적화된 구조기본 원리B-Tree는 데이터를 고정 크기의 페이지(보통 4KB~16KB) 단위로 나눠서 디스크에 저장합니다. 각 페이지는 정렬된 키와 자식 페이지에 대.. [Data] RDB vs 문서 DB vs 그래프 DB — 스키마 변동성과 데이터 지역성 관점에서 📌 데이터베이스 깊이 파기 시리즈 — 1편 들어가며데이터베이스를 선택할 때 "그냥 RDB 쓰면 되지 않나?"라고 생각하기 쉽습니다. 실제로 대부분의 경우 RDB는 훌륭한 선택입니다. 하지만 요구사항에 따라 문서 DB나 그래프 DB가 확실한 이점을 가지는 영역이 있습니다. 이번 글에서는 그 중에서도 스키마 변동성과 데이터 지역성 두 가지 관점에 집중해서 세 종류의 DB를 비교해보겠습니다. 먼저 각 DB를 간단히 짚고 가겠습니다RDB (관계형 데이터베이스)는 테이블 기반의 정형 데이터 저장소입니다. MySQL, PostgreSQL 등이 대표적이고, 스키마를 사전에 정의하고 데이터 간의 관계를 외래 키로 표현합니다. 문서 DB는 JSON이나 BSON 같은 문서 단위로 데이터를 저장합니다. MongoDB, C.. 이전 1 2 다음