1. event streaming
이벤트 스트리밍은 DB, 센서, 모바일 장치, 클라우드 서비스 및 소프트웨어 애플리케이션과 같은 이벤트 소스로부터 실시간 데이터를 이벤트 스트림 형식으로 획득하는 방식을 말한다. 이 방식은 이후에 이벤트를 검색할 수 있도록 이벤트 스트림을 저장하고, 실시간으로 이벤트 스트림을 조작, 처리하고 이에 대한 응답을 수행 할 수 있다. 또한 필요한 경우 이벤트 스트림을 다른 목적지로 전달하기도 한다. 이벤트 스트리밍은 데이터의 지속적인 흐름과 해석을 통해 정확한 데이터가 정확한 위치와 시점에 존재하도록 한다.
이러한 이벤트 스트리밍은 실시간 금융거래, 자동차 산업의 차량 실시간 모니터링과 같이 다양한 산업에서 사용할 수 있다. 또한 회사의 여러 부서에서 생성된 데이터를 연결, 저장하는 등의 조작을 위해 조직에서 사용될 수 있다. 또한 데이터 플랫폼, 이벤트 중심 아키텍쳐, 마이크로서비스 등에서 기반 역할을 할 수 있다.
2. Event streaming platform
카프카는 이벤트 스트리밍 플랫폼이다. 다음의 3가지 주요 기능을 결합하여 필요에 맞는 이벤트 스트리밍 end-to-end 서비스를 구현할 수 있다.
- publish, subscribe: 외부로의 데이터 내보내기/가져오기 등을 포함한 이벤트 스트림의 읽고 쓰기.
- store: 이벤트 스트림의 원하는 만큼 내구성있고 안정적으로 저장한다.
- process: 이벤트를 발생시에 바로, 또는 모아서 한번에 처리한다.
이러한 기능들을 모두 분산되고 확장성이 뛰어나며 탄력적이고 안정적으로 제공된다. 카프카는 베어메탈 하드웨어, 가상 머신, 컨테이너, 온프레미스 그리고 클라우드 등 다양한 플랫폼에 배포될 수 있다.
3. kafka 동작 원리
카프카는 서버와 클라이언트로 구성된 분산 시스템이다. 서버와 클라이언트는 고성능 TCP 네트워크 프로토콜을 사용하여 통신한다.
- Servers
카프카는 여러 데이터센터나 클라우드 영역에 있는 하나이상의 서버들의 클러스터로 동작한다. 이중 몇몇 서버는 브로커라고 불리는 저장소 계층을 형성한다. 다른 서버는 Kafka Connect 를 실행하여 RDB 나 다른 카프카 클러스터들과 같이 다른 시스템과 통합하기 위해 이벤트 스트림으로 데이터를 지속적으로 가져오거나 내보낸다. 카프카 클러스터는 확장성이 뛰어나고 가용성이 좋기 때문에 서버 중 하나가 문제가 있어도 다른 서버가 작업을 이어서 수행하기 때문에 데이터 손실없이 안정적인 운영을 보장한다.
- Clients
네트워크 문제나 시스템 오류가 발생한 경우에도 고가용성을 보장하면서 대용량 이벤트 스트림을 병렬적으로 다룰 수 있는 분산 애플리케이션이나 마이크로서비스를 작성할 수 있다. 카프카는 카프카 커뮤니티에서 제공하는 많은 클라이언트들을 제공하는데, 자바와 스칼라 외에도 Go, 파이썬, C/C++ 등의 언어와 REST API 를 제공한다.
4. 메인 컨셉과 용어 정리
- Event
이벤트는 무언가 일어났다는 것을 기록한 것이다. 이는 레코드 또는 메세지 등으로 불리는데, 카프카에서 데이터를 읽거나 쓸 때, 이벤트의 형식으로 이를 수행한다. 개념적으로 이벤트는 key, value, timestamp 그리고 부수적인 메타데이터 헤더들을 가지고 있다.
- Producer, Consumer
producer 는 카프카로 이벤트를 작성하는 클라이언트 애플리케이션을 뜻하고, consumer 는 그러한 이벤트를 구독하는 클라이언트 애플리케이션을 의미한다. 카프카에서 프로듀서와 컨슈머는 완벽하게 분리되어 있으며, 서로에 대해서 알지못한다. 이 부분이 카프카의 확장성을 위한 핵심 설계 요소이다.
- Topic
이벤트는 토픽에따라 구성되고 저장된다. 단순하게 토픽은 파일 시스템의 폴더이고, 이벤트는 해당 폴더의 파일로 생각할 수 있다. 카프카의 토픽은 항상 다중 프로듀서, 다중 컨슈머이다. 각 토픽에는 이벤트를 작성하는 프로듀서가 없거나 하나 이상이 될 수 있고, 이벤트를 구독하는 컨슈머 또한 없거나 하나 이상이 될 수 있다.
토픽의 이벤트는 메시지 브로커와 달리 한번 소비되어도 삭제되지 않으며 필요한 만큼 자주 읽을 수 있다. 대신 토픽의 구성 설정을 통해 카프카가 이벤트를 유지하는 시간을 정의하여 해당 시간이 지난 이벤트는 삭제하도록 할 수 있다. 카프카의 성능은 데이터 크기와 관련하여 사실상 일정하기 때문에 데이터를 장기간 저장하는 데 문제가 없다.
- Partition
토픽은 분할되어 있으며, 이는 토픽이 다른 카프카 브로커에 있는 여러 버킷에 분산되어 있음을 의미한다. 데이터의 분산 배치는 클라이언트 애플리케이션이 동시에 많은 브로커에 데이터를 읽고 쓸 수 있도록 하기 때문에 확장성이 매우 중요하다. 새로운 이벤트가 토픽에 작성되면 실제로 해당 토픽의 파티션 중 하나에 저장된다. 동일한 이벤트 키가 있는 이벤트는 동일한 파티션에 기록되고 카프카는 지정된 토픽 파티션의 모든 컨슈머가 항상 기록된 것과 정확히 동일한 순서로 해당 파티션의 이벤트를 읽도록 보장한다.
- Replicate
데이터의 무결함성과 고가용성을 위해 모든 토픽은 다른 위치나 데이터 센터에 복제할 수 있다. 이를 통해서 문제가 발생할 경우 데이터 복사본이 있는 여러 브로커 들을 통해 데이터 유지 관리를 할 수 있다. 기본적인 데이터 유지 팩터는 3으로 3개의 데이터 복사복은 가진다. 데이터 복제는 토픽 파티션 수준에서 수행된다.
[reference]
- https://kafka.apache.org/documentation/#gettingStarted
'기타' 카테고리의 다른 글
[Kafka] Kafka Consumer 예제 (0) | 2022.03.22 |
---|---|
[Kafka] Kafka Producer 예제 (0) | 2022.03.21 |
[Web] html form 태그에서 PUT, DELETE 사용 (0) | 2022.02.20 |
[Web] Rest URI 네이밍 (0) | 2022.02.18 |
[vscode] vscode 파이썬 디버깅 (0) | 2022.01.08 |