📚FOS Study
홈카테고리
홈카테고리

카테고리

  • AI 페이지로 이동
    • RAG 페이지로 이동
    • agents 페이지로 이동
    • BMAD Method — AI 에이전트로 애자일 개발하는 방법론
    • Claude Code의 Skill 시스템 - 개발자를 위한 AI 자동화의 새로운 차원
    • Claude Code 멀티 에이전트 — Teams
    • 멀티모달 LLM (Multimodal Large Language Model)
  • architecture 페이지로 이동
    • 캐시 설계 전략 총정리
    • 디자인 패턴
    • 분산 트랜잭션
  • css 페이지로 이동
    • FlexBox 페이지로 이동
  • database 페이지로 이동
    • mysql 페이지로 이동
    • opensearch 페이지로 이동
    • redis 페이지로 이동
    • 김영한의-실전-데이터베이스-설계 페이지로 이동
    • 커넥션 풀 크기는 얼마나 조정해야할까?
    • 인덱스 - DB 성능 최적화의 핵심
    • 역정규화 (Denormalization)
    • 데이터 베이스 정규화
  • devops 페이지로 이동
    • docker 페이지로 이동
    • k8s 페이지로 이동
    • k8s-in-action 페이지로 이동
    • monitoring 페이지로 이동
  • go 페이지로 이동
    • Go 언어 기본 학습
  • http 페이지로 이동
    • HTTP Connection Pool
  • interview 페이지로 이동
    • 210812 페이지로 이동
    • 뱅크샐러드 AI Native Server Engineer
    • CJ 올리브영 지원 문항
    • CJ 올리브영 커머스플랫폼유닛 Back-End 개발 지원 자료
    • 마이리얼트립 - Platform Solutions실 회원주문개발 Product Engineer
    • NHN 서비스개발센터 AI서비스개발팀
    • nhn gameenvil console backend 직무 인터뷰 준비
    • 면접을 대비해봅시다
    • Tossplace Node.js Developer
    • 토스플레이스 Node.js 백엔드 컬처핏
  • java 페이지로 이동
    • jdbc 페이지로 이동
    • opentelemetry 페이지로 이동
    • spring 페이지로 이동
    • spring-batch 페이지로 이동
    • 더_자바_코드를_조작하는_다양한_방법 페이지로 이동
    • Java의 로깅 환경
    • MDC (Mapped Diagnostic Context)
    • OpenTelemetry 란 무엇인가?
    • Java StampedLock — 읽기 폭주에도 쓰기가 밀리지 않는 락
    • Virtual Thread와 Project Loom
  • javascript 페이지로 이동
    • Data_Structures_and_Algorithms 페이지로 이동
    • Heap 페이지로 이동
    • typescript 페이지로 이동
    • AbortController
    • Async Iterator와 제너레이터
    • CommonJS와 ECMAScript Modules
    • 제너레이터(Generator)
    • Http Client
    • Node.js
    • npm vs pnpm 선택기준은 무엇인가요?
    • `setImmediate()`
  • kafka 페이지로 이동
    • Kafka 기본
    • Kafka를 사용하여 **데이터 정합성**은 어떻게 유지해야 할까?
    • 메시지 전송 신뢰성
  • linux 페이지로 이동
    • fsync — 리눅스 파일 동기화 시스템 콜
    • tmux — Terminal Multiplexer
  • network 페이지로 이동
    • L2(스위치)와 L3(라우터)의 역할 차이
    • L4와 VIP(Virtual IP Address)
    • IP Subnet
  • react 페이지로 이동
    • JSX 페이지로 이동
    • VirtualDOM 페이지로 이동
    • v16 페이지로 이동
  • task 페이지로 이동
    • ai-service-team 페이지로 이동
    • nsc-slot 페이지로 이동
    • the-future-company 페이지로 이동
📚FOS Study

개발 학습 기록을 정리하는 블로그입니다.

바로가기

  • 홈
  • 카테고리

소셜

  • GitHub
  • Source Repository

© 2025 FOS Study. Built with Next.js & Tailwind CSS

목록으로 돌아가기
📨kafka

Kafka 기본

약 2분
2026년 1월 30일
GitHub에서 보기

Kafka 기본

카프카의 기본 동작 원리

카프카는 기본적으로 **분산 커밋 로그(Distributed Commit Log)**를 기반으로 동작한다.

  • 발행 (Produce) : 프로듀서가 특정 Topic으로 메시지를 보낸다.
    • 이 때 메시지는 토픽 내의 특정 Partition에 순차적으로 쌓인다.
  • 저장 (Store) : 브로커는 메시지에 고유한 번호인 Offset을 부여하여 디스크에 저장한다.
  • 구독 (Consume) : 컨슈머는 자신이 어디까지 읽었는지를 기록하는 Consumer Offset을 관리한다.
    • "나 5번까지 읽었어"라고 알리면, 다음번엔 6번부터 읽어가는 방식이다.

왜 브로커는 보통 '3대'인가?

운영 환경에서 브로커를 최소 3대로 구성하는 이유는 가용성과 데이터 유실 방지 사이의 최적의 밸런스 떄문이다. 이를 Quorum(의결 정족수) 개념과 연결해 볼 수 있다.

  • 1. 고가용성

    • 1대라면 : 브로커 장애 시 전체 시스템이 중단된다. (SPOF - Single Point of Failure)
    • 2대라면 : 한 대가 죽으면 남은 한 대가 모든 짐을 지지만, 만약 남은 한 대마저 장애가 나거나 점검이 필요하면 대안이 없다.
      • 또한 min.isr=2 설정을 사용할 수 없어 데이터 안정성이 떨어진다.
    • 3대라면 : 한 대가 장애로 내려가도 나머지 2대가 복제본을 유지하며 서비스를 지속할 수 있다.
  • 2. 과반수 투표와 리더 산출

    • 카프가는 내부적으로 메타데이터 관리(Zookeeper 사용 시)나 컨트롤러 선출 시 과반수(majority) 원칙을 사용한다.
    • 3대 중 2대가 살아있다면 "과반수가 살아있다"고 판단하여 시스템을 정상으로 간주하고 리더를 새로 선출할 수 있다.
    • 수학적으로 2n+1의 형태로 구성할 때 장애 내성 효율이 가장 좋다.
  • 3. min.insync.replicas와의 관계

    • RF(Replication Factor)= 3, min.isr=2 설정이 가장 대중적이다.
    • 브로커 3대가 있어야 한 대가 고장 나더라도 min.isr=2 (복제보 2개 보장)를 만족하며 계속 메시지를 쓸 수 있다.
kafka 카테고리의 다른 글 보기수정 제안하기

댓글

댓글을 불러오는 중...
목차
  • Kafka 기본
  • 카프카의 기본 동작 원리
  • 왜 브로커는 보통 '3대'인가?