Kafka

Apache Kafka is a distributed event streaming platform capable of handling trillions of events per day, serving as a high-throughput, fault-tolerant, and scalab...

Apache Kafka는 실시간 데이터 파이프라인 및 스트리밍 애플리케이션 구축을 위해 설계된 분산 이벤트 스트리밍 플랫폼입니다. 이는 매우 확장 가능하고, 내결함성이 있으며, 내구성이 뛰어난 publish-subscribe 메시징 시스템으로 작동합니다. 핵심 아키텍처는 레코드의 카테고리 또는 피드인 'topics'를 중심으로 이루어집니다. Producers는 topics에 레코드를 게시하고, Consumers는 이러한 레코드를 읽기 위해 topics를 구독합니다. 클러스터를 형성하는 Kafka brokers는 이러한 레코드를 내구적으로 저장하고 Consumers에게 제공합니다. 레코드는 topics 내의 partitions으로 구성되어 병렬 처리 및 높은 처리량을 가능하게 합니다. 각 partition은 순서가 지정된 불변의 레코드 시퀀스입니다. brokers 간의 복제는 내결함성을 보장합니다. broker가 실패하면 다른 복제본이 인계할 수 있습니다. Kafka의 내구성은 디스크에 레코드를 기록함으로써 얻어집니다. 주요 구성 요소에는 Producers, Consumers, Brokers 및 ZooKeeper(클러스터 조정을 위한 것이지만, 최신 버전에서는 KRaft로 전환 중)가 포함됩니다. Trade-offs에는 분산 클러스터 관리의 운영 복잡성, 특히 Zookeeper 종속성과 관련된 부분, 그리고 신중한 용량 계획의 필요성이 포함됩니다. 그러나 이는 비교할 수 없는 처리량, 낮은 지연 시간 및 강력한 내구성 보장을 제공하여 대량 데이터 스트림에 이상적입니다.

        graph LR
  Center["Kafka"]:::main
  Rel_ipfs["ipfs"]:::related -.-> Center
  click Rel_ipfs "/terms/ipfs"
  Rel_file_systems["file-systems"]:::related -.-> Center
  click Rel_file_systems "/terms/file-systems"
  Rel_distributed_ledger_technology_dlt["distributed-ledger-technology-dlt"]:::related -.-> Center
  click Rel_distributed_ledger_technology_dlt "/terms/distributed-ledger-technology-dlt"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧠 지식 테스트

1 / 1

🧒 5살도 이해할 수 있게 설명

디지털 정보에 대한 매우 체계적이고 매우 빠른 우편 서비스와 같습니다. 메시지(이벤트)는 특정 사서함(topics)으로 보내지며, 발신자가 수신자를 알 필요 없이 해당 사서함을 구독하는 누구나 메시지를 수신할 수 있습니다.

🤓 Expert Deep Dive

카프카의 아키텍처는 분산 커밋 로그(distributed commit log)라는 개념을 중심으로 구축됩니다. 토픽은 파티션으로 나뉘며, 각 파티션은 순서대로 정렬된 메시지 시퀀스입니다. 브로커는 이러한 파티션을 저장하며, 복제(replication)를 통해 내결함성(fault tolerance)을 보장합니다. 파티션 관리는 리더-팔로워(leader-follower) 방식으로 이루어집니다. 프로듀서는 파티션의 리더에게 메시지를 쓰고, 팔로워는 비동기적으로 데이터를 복제합니다. 컨슈머는 각 파티션 내에서 자체 오프셋(offset)을 유지하여 진행 상황을 독립적으로 추적할 수 있습니다. 이러한 디커플링(decoupled)된 특성은 높은 처리량과 확장성을 가능하게 합니다. 단점으로는 컨슈머가 주의 깊게 처리하지 않으면 파티션 내 메시지 순서가 뒤바뀔 가능성이 있으며, 장애 발생 또는 확장 이벤트 시 컨슈머 그룹의 리밸런싱(rebalancing) 관리 복잡성이 있습니다. 과거에는 메타데이터 관리, 리더 선출, 브로커 등록에 주키퍼(ZooKeeper)가 중요했지만, KRaft 프로토콜은 이러한 의존성을 제거하는 것을 목표로 합니다. 취약점으로는 안전하지 않은 브로커 간 통신, 데이터 유출로 이어질 수 있는 불충분한 접근 제어, 브로커 또는 주키퍼를 대상으로 하는 잠재적인 서비스 거부(Denial-of-Service) 공격 등이 있을 수 있습니다.

📚 출처