Post

Apache Kafka란

1. Kafka란

Apache Kafka는 빠르고 확장 가능한 작업을 위한 데이터 피드의 분산 스트리밍, 파이프라이닝 및 재생을 위한 실시간 스트리밍 데이터를 처리하도록 특별히 제작된 오픈 소스 분산 게시-구독 메시징 플랫폼이다.

Kafka는 서버 클러스터 내에서 데이터 스트림을 레코드로 유지 관리하여 작동하는 브로커 기반 솔루션이다. Kafka 서버는 주제의 여러 서버 인스턴스에 걸쳐 레코드(메시지) 스트림을 저장하여 여러 데이터 센터에 걸쳐 있고 데이터 지속성을 제공할 수 있다. 토픽은 키, 값 및 타임스탬프로 구성된 일련의 불변 Python 객체인 일련의 튜플로 레코드 또는 메시지를 저장한다.

apache-kafka-diagram

2. Kafka 이점

1) 오픈소스로 제공

오픈소스란 소스 코드가 누구에게나 무료로 제공되며 사용자가 어떤 목적으로든 이를 수정하여 고유한 버전으로 배포할 수 있다는 것을 의미한다. 라이선스 요금이나 다른 제한사항은 없다.

또한 Kafka는 함께 협력하고 참여하는 글로벌 개발자 커뮤니티를 두고 커뮤니티로부터 도움을 받는다. 그 결과, Kafka는 광범위한 커넥터, 플러그인, 모니터링 도구, 구성 도구를 제공하여 생태계의 지속적인 성장에 기여한다.

2) 확장성 및 속도

Kafka는 지속적으로 증가하는 데이터 양에 따라 확장될 뿐만 아니라 비즈니스 전반에서 해당 데이터를 실시간으로 제공한다. 분산 플랫폼이라는 것도 Kafka의 주요 이점이다.

이는 처리가 여러 개의 물리적 또는 가상 머신으로 분할된다는 것을 의미한다.

여기에는 두 가지 장점이 있다. 하나는 일부 작업에서 더 많은 처리 능력이나 스토리지가 필요할 때 수평 확장을 통해 머신을 추가할 수 있다는 것이고, 다른 하나는 개별 머신에서 장애가 발생하더라도 플랫폼이 계속 실행되기 때문에 안정적이라는 것이다.

하지만 Kafka의 이 기능은 대규모로 관리하기가 매우 어려울 수 있다.

3. Kafka 단점

Kafka는 그 모든 장점에도 불구하고 배포하기가 까다로운 기술이다.

온프레미스 Kafka 클러스터는 프로덕션 환경에서 설정, 확장, 관리하기가 어렵다.

Kafka를 실행할 온프레미스 인프라를 설정할 때는 머신을 프로비저닝하고 Kafka를 구성해야 한다. 또한 분산형 머신의 클러스터를 설계하여 가용성을 보장하고, 데이터가 저장 및 보호되는지 확인하고, 모니터링을 설정하고, 부하 변화에 맞춰 데이터를 신중하게 확장해야 한다.

그런 다음 인프라를 유지보수하여 장애가 있는 머신을 교체하고 일상적인 패치 및 업그레이드를 수행해야 한다.

4. Kafka 개념

1) 주제

주제는 게시/구독 메시징에서 상당히 보편적인 개념이다. Apache Kafka 및 기타 메시징 솔루션에서 주제는 지정된 데이터 스트림(일련의 레코드/메시지)에 대한 관심을 표시하는 데 사용되는 주소 지정 가능한 추상화이다.

주제는 게시 및 구독할 수 있으며 애플리케이션에서 주어진 데이터 스트림에 대한 관심을 표시하는 데 사용되는 추상화 계층이다.

2) 파티션

Apache Kafka에서 주제는 파티션이라는 일련의 주문 대기열로 세분화될 수 있다.

이러한 파티션은 연속적으로 추가되어 순차 커밋 로그를 형성한다. Kafka 시스템에서 각 레코드/메시지에는 주어진 파티션에서 메시지 또는 레코드를 식별하는 데 사용되는 오프셋이라는 순차적 ID가 할당된다.

3) 지속성

Apache Kafka는 게시된 레코드/메시지를 지속적으로 유지하는 서버 클러스터를 유지 관리하여 작동한다.

Kafka 클러스터는 구성 가능한 보존 제한 시간을 사용하여 소비와 관계없이 지정된 레코드가 지속되는 기간을 결정한다. 레코드/메시지가 보존 제한 시간 내에 있는 동안 레코드/메시지를 사용할 수 있다. 레코드/메시지가 이 보존 시간 제한을 초과하면 레코드/메시지가 삭제되고 공간이 확보된다.

4) 주제/파티션 크기 조정

Apache Kafka는 서버 클러스터로 작동하기 때문에 주제/파티션은 주어진 주제/파티션에서 각 서버에 로드를 공유하여 크기를 조정할 수 있다.

이 로드 공유를 통해 Kafka 클러스터의 각 서버는 주어진 주제/파티션에서 레코드/메시지의 배포 및 지속성을 처리할 수 있다.

개별 서버가 모든 배포 및 지속성을 처리하는 동안 모든 서버는 서버 오류 발생 시 내결함성과 고가용성을 제공하는 데이터를 복제한다. 파티션은 파티션 리더로 선택된 한 서버와 팔로워 역할을 하는 다른 모든 서버가 있는 서버 간에 분할된다.

파티션 리더인 서버는 데이터의 모든 배포 및 지속성(읽기/쓰기)을 처리하고 팔로워는 내결함성을 위한 복제 서비스를 제공한다.

5) 생산자

Apache Kafka에서 생산자의 개념은 대부분의 메시징 시스템과 다르지 않다.

데이터 생산자(레코드/메시지)는 주어진 레코드/메시지가 게시되어야 하는 주제(데이터 스트림)를 정의한다. 파티션은 추가 확장성을 제공하는 데 사용되므로 생산자는 주어진 레코드/메시지가 게시되는 파티션을 정의할 수도 있다.

생산자는 주어진 파티션을 정의할 필요가 없으며 파티션을 정의하지 않음으로써 토픽 파티션 전체에서 로드 밸런싱의 라운드 로빈 스타일을 달성할 수 있습니다.

6) 소비자

대부분의 메시징 시스템과 마찬가지로 Kafka의 소비자는 레코드/메시지를 처리하는 엔터티이다.

소비자는 개별 워크로드에서 독립적으로 작동하거나 지정된 워크로드에서 다른 소비자와 협력하도록 구성할 수 있다(로드 밸런싱). 소비자는 소비자 그룹 이름을 기반으로 워크로드를 처리하는 방법을 관리한다.

소비자 그룹 이름을 사용하면 소비자가 단일 프로세스, 여러 프로세스 및 여러 시스템에 분산될 수 있다. 소비자 그룹 이름을 사용하여 소비자는 소비자 세트 전체에서 로드 밸런싱(동일한 소비자 그룹 이름을 가진 여러 소비자) 레코드/메시지 소비를 처리하거나 각 레코드/메시지를 고유하게 처리할 수 있다(고유한 소비자 그룹 이름을 가진 여러 소비자). 주제/파티션은 처리할 메시지를 가져온다.

5. Kafka 작동 방식

Kafka는 다음과 같은 5가지 핵심 기능을 통해 스트리밍 이벤트 처리를 지원한다.

1) 게시

데이터 소스에서는 데이터 이벤트 스트림을 하나 이상의 Kafka 주제, 즉 유사한 데이터 이벤트의 그룹에 게시하거나 배치할 수 있다.

예를 들어 네트워크 라우터 같은 IoT 기기에서 스트리밍되는 데이터를 확보한 후 예측 유지보수를 통해 라우터가 고장날 가능성이 있는 시기를 계산하는 애플리케이션에 해당 데이터를 게시할 수 있다.

2) 연결

Kafka 주제를 기존 애플리케이션에 연결하는 재사용 가능한 생산자 또는 소비자 연결을 구축할 수도 있다.

Dataproc, BigQuery 등의 주요 서비스에 대한 커넥터를 포함하여 이미 사용 가능한 수백 개의 기존 커넥터가 있다.

3) 소비

애플리케이션에서는 하나 이상의 Kafka 주제를 구독하거나 하나 이상의 Kafka 주제에서 데이터를 가져와 결과 데이터 스트림을 처리할 수 있다.

예를 들어 애플리케이션이 여러 소셜 미디어 스트림에서 데이터를 가져온 후 이를 분석하여 브랜드에 관한 온라인 대화의 경향을 확인할 수 있다.

4) 저장

Apache Kafka는 내구성 있는 스토리지를 제공한다.

Kafka는 ‘정보 소스’의 역할을 할 수 있으며, 가용성이 높은 배포를 위해 단일 데이터 센터 내 또는 여러 가용성 영역의 여러 노드에 데이터를 분산시킬 수 있다.

5) 처리

Kafka Streams API는 하나 이상의 주제에서 들어오는 데이터 스트림을 소비하고 하나 이상의 주제로 나가는 데이터 스트림을 생성하는 스트림 프로세서의 역할을 할 수 있다.

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.