Big Data

Apache Kafka

Apache Kafka(이하 카프카)는 오픈소스 분산 메시징 시스템입니다. 실시간으로 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산 데이터 스트리밍 플랫폼입니다.이는 여러 소스에서 데이터 스트림을 처리하고 여러 사용자에게 전달하도록 설계되었습니다.
Apache Kafka(이하 카프카)는 오픈소스 분산 메시징 시스템입니다. 실시간으로 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산 데이터 스트리밍 플랫폼입니다.이는 여러 소스에서 데이터 스트림을 처리하고 여러 사용자에게 전달하도록 설계되었습니다. 더보기 접기
01
다중 프로듀서, 다중 컨슈머

카프카의 토픽(Topic)에 여러 프로듀서가 동시에 메시지 전송가능

카프카 토픽의 메시지를 여러 컨슈머가 동시에 읽기 가능

하나의 프로듀서가 여러 토픽에 메시지 전송

하나의 컨슈머가 여러 토픽에서 메시지 읽기 가능

02
다양한 동적 변경 기능 제공

전통적인 메시징 시스템은 프로듀서가 전송한 메시지를 브로커의 메모리 상에존재하는 큐(Queue)에 유지

카프카는 프로듀서가 생성한 메시지를 브로커가 위치한 서버의 파일 시스템에저장

컨슈머는 프로듀서가 생성한 메시지를 카프카가 보존하고 있는 기간내에는 언제든지 읽기 가능

03
확장성(Scalability)

카프카 클러스터는 운영중에 확장이 용이하게 설계

브로커, 프로듀서, 컨슈머(컨슈머 그룹), 토픽을 운영 중에 추가 가능

04
고성능

기존 범용 메시징 시스템이 지원하는 몇 가지 불필요한 기능(트랜잭션, 컨슈머의 메시지 소비여부 확인) 기능을 제외하고 배치처리, 분산처리와 같은 기법을 사용해 성능을 향상

05
컨슈머의 풀(Pull) 방식

기존의 메시징 시스템의 경우 브로커가 컨슈머에게 데이터를 전달해주는푸시(Push) 방식을 채택

카프카는 컨슈머가 브로커에게서 메시지를 가져우는 풀(Pull) 방식을 채택

배치 처리 구현 용이

핵심 개념

토픽(Topic),파티션(Partition) 그리고 세그먼트파일(SegmentFile)

카프카에 전달되는 메시지 스트림(Stream)의 추상화된 개념을 토픽(Topic)이라고 한다. 프로듀서는 메시지를 특정 토픽에 발행하고 컨슈머는 특정 토픽에서 발행되는 메시지를 구독할 수 있다. 토픽은 프로듀서와 컨슈머가 만나는 접점이라고 생각하면 된다. 카프카 브로커는 파티션에 저장된 메시지를 파일 시스템에 저장한다. 이때 만들어지는 파일이 세그먼트 파일이다.

파티션의 복제(Replication)

카프카는 고가용성(High Availability)을 제공하기 위해 파티션 데이터의 복사본(Replication)을 유지할 수 있다. 몇 개의 복사본을 저장할 것인지는 리플리케이션 팩터(Replication Factor)로 저장할 수 있으며 토픽 별로 다르게 설정 할 수 있다.

프로듀서, 컨슈머 그리고 컨슈머 그룹(Consumer Group)

카프카의 클라이언트는 기본적으로 프로듀서(Producer)와 컨슈머(Consumer)라는 두 가지 분류가 존재한다.
프로듀서는 메시지를 생성하여 카프카에 전달하는 클라이언트를 의미한다.프로듀서가 특정 토픽에 메시지를 전송하면 기본적으로 여러 파티션에 번갈아가며 전송되어 파티션을 골고루 사용하게 된다.
유의점은 서로 다른 파티션으로 전송된 메시지의 소비 순서는 보장되지 않으므로 메시지 처리의 순서가 중요한 경우는 메시지 키와 파티셔너를 이용해 두 개의 메시지가 같은 파티션으로 전송되도록 추가적인 작업이 필요하다.

컨슈머(Consumer)는 메시지를 카프카로부터 읽어가는 클라이언트다. 카프의 컨슈머는 컨슈머 그룹(Consumer Group)을 형성한다. 카프카의 토픽은 컨슈머 그룹 단위로 구독되어진다.
토픽의 파티션은 컨슈머 그룹 당 오로지 하나의 컨슈머의 소비만 소비될 수 있다. 파티션과 컨슈머의 이런 연결을 소유권(Ownership)이라고 부른다. 다시말해서 같은 컨슈머 그룹에 속한 컨슈머들이 동시에 동일한 파티션에서 메시지를 읽어갈 수 없다.

카프카와 파일시스템

카프카로 전송된 메시지는 카프카 내부에서 세그먼트 파일 형태로 저장된다. 파일을 파일시스템에 기록하여 메시지의 영속성(Persistence)을 얻는다. 즉 나중에 다시 특정 메시지를 소비하고 싶을 때 파일 시스템에 저장된 메시지를 읽어서 컨슈머에게 전송할 수 있는 것이다.