APACHE KAFKA
Apache Kafka란 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위한
오픈 소스 분산 이벤트 스트리밍 플랫폼입니다.
CORE CAPABILITIES
- HIGH THROUGHPUT
- SCALABLE
- PERMANENT STORAGE
- HIGH AVAILABILITY
ECOSYSTEM
- BUILT-IN STREAM PROCESSING
- CONNECT TO ALMOST ANYTHING
- CLIENT LIBRARIES
- LARGE ECOSYSTEM OPEN SOURCE TOOLS
TRUST & EASE OF USE
- MISSION CRITICAL
- TRUSTED BY THOUSANDS OF ORGS
- VAST USER COMMUNITY
- RICH ONLINE RESOURCES
WHY KAFKA?
이벤트 스트리밍이란?
이벤트 스트리밍은 인체의 디지털 중추 신경계라고 할 수 있으며 '상시 가동' 세상을 위한 기반 기술입니다.
기술적으로 말하면 이벤트 스트리밍은 데이터베이스, 센서, 모바일 장치, 클라우드 서비스 및 소프트웨어 애플리케이션과 같은 이벤트 소스에서 이벤트 스트림의 형태로 실시간으로 데이터를 캡처하는 방식입니다.
나중에 검색할 수 있도록 이러한 이벤트 스트림을 영구적으로 저장합니다. 소급적으로나 실시간으로 이벤트 스트림을 조작, 처리 및 반응합니다. 필요에 따라 이벤트 스트림을 다른 목적지 기술로 라우팅하는 단계를 포함합니다. 이벤트 스트리밍은 올바른 정보가 적시에 적절한 위치에 있도록 데이터의 지속적인 흐름과 해석을 보장합니다.
이벤트 스트리밍은 무엇에 사용할 수 있습니까?
이벤트 스트리밍은 수많은 산업 및 조직의 다양한 사용 사례에 적용됩니다.
- 증권 거래소, 은행 및 보험과 같은 실시간으로 지불 및 금융 거래를 처리합니다.
- 물류 및 자동차 산업과 같이 자동차, 트럭, 차량 및 선적을 실시간으로 추적하고 모니터링합니다.
- 공장 및 풍력 발전 단지와 같은 IoT 장치 또는 기타 장비의 센서 데이터를 지속적으로 캡처하고 분석합니다.
- 소매, 호텔 및 여행 산업, 모바일 애플리케이션과 같은 고객 상호 작용 및 주문을 수집하고 즉시 대응합니다.
- 병원에서 치료 중인 환자를 모니터링하고 상태 변화를 예측하여 응급 상황에서 시기 적절한 치료를 보장합니다.
- 회사의 여러 부서에서 생성된 데이터를 연결, 저장 및 사용 가능하게 만드는 것.
- 데이터 플랫폼, 이벤트 중심 아키텍처 및 마이크로서비스의 기반 역할을 합니다.
Apache Kafka 는 이벤트 스트리밍 플랫폼
Kafka는 다음 세 가지 주요 기능의 단일 솔루션으로 엔드투엔드 이벤트 스트리밍 사용 사례를 구현할 수 있습니다.
- 다른 시스템에서 데이터를 import/export를 포함하여 이벤트 스트림을 게시(쓰기) 및 구독(읽기)
- 이벤트 스트림을 원하는 만큼 내구성 있고 안정적으로 저장
- 이벤트 스트림을 발생 시 또는 소급하여 처리
이 모든 기능은 분산, 확장성, 탄력성, 내결함성이 있으며 안전한 방식으로 제공됩니다.
Kafka는 베어메탈 하드웨어, 가상 머신, 컨테이너, 온프레미스 및 클라우드에 배포할 수 있습니다.
Kafka 환경을 자가 관리하거나 다양한 공급업체에서 제공하는 완전 관리형 서비스를 사용할 수 있습니다.
Kafka는 어떻게 작동하나?
Kafka는 고성능 TCP 네트워크 프로토콜을 통해 통신하는 서버와 클라이언트로 구성된 분산 시스템입니다.
베어메탈 하드웨어, 가상 머신, 온프레미스 및 클라우드 환경의 컨테이너에 배포할 수 있습니다.
서버:
Kafka는 여러 데이터 센터 또는 클라우드 region들에 있는 다수의 서버 클러스터로 실행됩니다.
이러한 서버 중 일부는 브로커라고 하는 스토리지 계층을 구성합니다.
다른 서버는 Kafka Connect를 실행하여 Kafka를 관계형 데이터베이스 및 기타 Kafka 클러스터와 같은 기존 시스템과 통합하기 위해, 데이터를 이벤트 스트림으로 지속적으로 가져오고 내보냅니다.
미션 크리티컬한 사용 사례를 구현할 수 있도록 Kafka 클러스터는 확장성이 뛰어나고 내결함성이 있습니다. 서버 중 하나에 장애가 발생하면 다른 서버가 작업을 인계받아 데이터 손실 없이 지속적인 운영을 보장합니다.
클라이언트:
네트워크 문제나 기계 장애가 발생한 경우에도 이벤트 스트림을 병렬로 대규모로 내결함성 방식으로 읽고, 쓰고, 처리하는 분산 애플리케이션 및 마이크로서비스를 만들 수 있습니다.
클라이언트는 고수준 Kafka Streams 라이브러리를 포함하여 Java 및 Scala에서 사용할 수 있으며 Go, Python, C/C++ 및 기타 여러 프로그래밍 언어 및 REST API 에서 사용할 수 있습니다.
Kafka 주요 개념과 용어
이벤트는 세상 또는 비즈니스에서 "무언가 발생"했다는 사실을 기록합니다.
문서에서는 기록 또는 메시지라고도 합니다. Kafka에서 데이터를 읽거나 쓸 때 이벤트 형식으로 이 작업을 수행합니다.
개념적으로 이벤트에는 키, 값, 타임스탬프 및 선택적 메타데이터 헤더가 있습니다.
다음은 이벤트의 예입니다.
- Event key: "Alice"
- Event value: "Made a payment of $200 to Bob"
- Event timestamp: "Jun. 25, 2020 at 2:06 p.m."
생산자(Producers)는
Kafka에 이벤트를 게시(쓰기)하는 클라이언트 응용 프로그램이고
소비자(consumers)는
이러한 이벤트를 구독(읽기 및 처리)하는 응용 프로그램입니다.
Kafka에서 생산자와 소비자는 완전히 분리되고 서로 알 수 없으며, 이는 Kafka가 높은 확장성을 달성하기 위한 핵심 설계 요소입니다. 예를 들어 생산자는 소비자를 기다릴 필요가 없습니다. Kafka는 이벤트를 정확히 한 번 처리하는 기능과 같은 다양한 보장성을 제공합니다.
이벤트는 주제(topics)로 구성되고 영구적으로 저장됩니다. 간단하게 주제는 파일 시스템의 폴더와 유사하고 이벤트는 해당 폴더의 파일입니다. 예로써 주제 이름은 "지불"일 수 있습니다.
Kafka의 토픽은 항상 다중 생성자 및 다중 구독자입니다. 주제에는 이벤트를 작성하는 0개, 1개 또는 많은 생성자와 이러한 이벤트를 구독하는 0개, 1개 또는 많은 소비자가 있을 수 있습니다. 주제의 이벤트는 필요한 만큼 자주 읽을 수 있습니다. 기존 메시징 시스템과 달리 이벤트는 소비 후 삭제되지 않습니다. 대신 주제별 구성 설정을 통해 Kafka가 이벤트를 유지해야 하는 기간을 정의할 수 있고, 이보다 오래된 이벤트가 삭제됩니다.
Kafka의 성능은 데이터 크기와 관련하여 사실상 일정하므로 데이터를 장기간 저장하는 것이 좋습니다.
주제는 분할(partitioned)되어 있으며, 이는 다른 Kafka 브로커에 있는 여러 "버킷(buckets)"에 분산되어 있음을 의미합니다.
데이터의 분산 배치는 클라이언트 애플리케이션이 동시에 많은 브로커에서 데이터를 읽고 쓸 수 있도록 하기 때문에 확장성에 매우 중요합니다. 새 이벤트가 주제에 게시되면 실제로 해당 주제의 파티션 중 하나에 추가됩니다.
동일한 이벤트 키(예: 고객 또는 차량 ID)가 있는 이벤트는 동일한 파티션에 기록되고 Kafka는 지정된 파티션의 모든 소비자가 항상 기록된 것과 정확히 동일한 순서로 해당 파티션의 이벤트를 읽도록 보장합니다.
Figure:
이 예제 주제에는 4개의 파티션 P1~P4가 있습니다. 두 개의 서로 다른 생산자가 네트워크를 통해 서로 독립적으로 새 이벤트를 주제에 게시하고 있습니다. 동일한 키를 사용하는 이벤트(그림에서 색상으로 표시)는 동일한 파티션에 기록됩니다. 두 생산자 모두 동일한 파티션에 쓸 수도 있습니다.
데이터 내결함성 및 고가용성을 만들기 위해 모든 주제를 여러 지리적 지역이나 데이터 센터에 걸쳐 복제할 수 있습니다. 일이 잘못될 경우에 대비하여 데이터 복사본이 있는 여러 브로커가 있도록 합니다. 일반적인 프로덕션 설정은 복제 3팩터입니다. 즉, 항상 3개의 데이터 복사본이 있습니다. 이 복제는 주제 파티션 수준에서 수행됩니다.
We build for multiple versions of Scala
: 여러 버전의 Scala로 빌드되었다. 즉 Kafka는 Scala로 만들었다.
What is Scala?
스칼라는 함수형 객체지향 프로그래밍 언어 입니다. 스칼라는 자바의 복잡한 단점을 해결하기 위해 만들어 졌습니다. 스칼라는 자바 바이트 코드를 사용하기 때문에 JVM위에서 실행 시킬 수 있습니다. 또한 자바의 클래스들을 바로 사용할 수도 있고, 자바에서도 스칼라 코드들을 호출할 수 있습니다.
'Apache Kafka' 카테고리의 다른 글
카프카 프로듀서 파티셔너 종류 및 정리(2.5.0 기준) (0) | 2022.01.07 |
---|---|
카프카 컨슈머 파티셔너 종류 및 정리(2.5.0 기준) (0) | 2022.01.07 |
카프카-파이썬 연동 (0) | 2022.01.07 |
로컬 PC에 카프카 클러스터 설치 및 실행 (0) | 2021.12.31 |
아파치 카프카 시작하기 (0) | 2021.12.31 |