Jinhyuk Kim

Software Development Engineer @ Amazon

reniowood at gmail.com
resume

[카프카 핵심 가이드] Chatper 1. 카프카 훑어보기

2019-04-29

메세지 발행과 구독하기

발행자가 어떤 형태로든 메시지를 구분해서 발행/구독 시스템에 전송하면 구독자가 특정 부류의 메시지를 구독할 수 있게 해준다.

브로커(broker)는 발행된 메시지를 저장하고 중계한다.

초기의 발행/구독 시스템

대부분의 발행/구독 시스템은 간단한 메시지 큐나 프로세스 간 통신 채널을 갖는다.

시스템이 복잡해지면 발행자와 구독자를 직접 연결하지 않고, 발행/구독 서버를 따로 갖는 것이 이상적이다.

개별적인 메시지 큐 시스템

하나의 발행/구독 서버를 두지 않고 용도에 따라 여러 발행/구독 서버를 둔다.

카프카 살펴보기

카프카는 분산 커밋 로그(distributed commit log) 또는 분산 스트리밍 플랫폼(distributed streaming platform)이라고도 한다.

메시지와 배치

메시지(message)는 데이터의 기본 단위, 데이터베이스의 행, 레코드에 비유할 수 있다.

메시지는 바이트 배열의 데이터로 특정 형식이나 의미를 가지지 않는다.

각 메시지는 토픽(topic)으로 분류된 파티션(partition)에 수록된다.

수록될 파티션은 키(key)라는 메타데이터로 결정한다.

효율성을 위해 여러 개의 메시지를 모아 배치 형태로 파티션에 메시지를 수록한다.

스키마

내용을 이해하기 쉽도록 메시지의 구조를 나타내는 JSON이나 XML 등의 스키마(schema)를 사용할 수 있다.

강력한 데이터 타입의 지원을 위해 보통 아파치 Avro를 선호한다.

일관된 데이터 형식을 지키기 위해 잘 정리된 스키마를 공유 리포지터리(repository)에 저장하여 사용할 수 있다.

토픽과 파티션

카프카의 메시지는 토픽(topic)으로 분류된다. 데이터베이스 테이블이나 파일 시스템의 폴더와 비슷하다.

하나의 토픽은 여러 개의 파티션(partition)으로 구성된다. 하나의 로그에 해당한다.

메시지는 파티션에 추가되기만 하며, 맨 앞부터 끝까지 순서대로 읽는다.

하나의 토픽은 여러 개의 파티션을 갖지만, 메시지 처리 순서는 파티션별로 유지 관리한다.

스트림(stream)은 프로듀서(producer)로부터 컨슈머(consumer)로 이동하는 연속적인 데이터를 말한다.

프로듀서와 컨슈머

프로듀서는 새로운 메시지를 생성한다. 메시지는 특정 토픽으로 생성하며, 파티션을 지정 가능하다.

컨슈머는 하나 이상의 토픽을 구독하여 생성된 순서로 메시지를 읽으며, 오프셋을 유지한다.

주키퍼나 카프카에서는 파티션에서 마지막에 읽은 메시지의 오프셋을 저장한다.

컨슈머 그룹은 같은 토픽을 읽고 처리하는 하나 이상의 컨슈머로 구성된다.

한 토픽의 각 파티션은 하나의 컨슈머만 소비 가능하다. (파티션:컨슈머가 1:n 관계)

컨슈머의 파티션 소유권을 재정의해 한 컨슈머가 실패해도 다른 컨슈머가 파티션에서 메시지를 대신 읽을 수 있다.

브로커와 클러스터

브로커(broker)

클러스터(cluster)

보존(retention)

다중 클러스터

다중 클러스터의 장점

카프카에는 다중 클러스터를 지원하기 위해 미러메이커(MirrorMaker)가 포함되어 있다.

카프카를 사용하는 이유

다중 프로듀서

여러 클라이언트가 많은 토픽을 사용하거나 같은 토픽을 같이 사용해도 무리 없이 많은 프로듀서의 메시지를 처리할 수 있다.