Apache Kafka 개요


지난 글에서 kafka설치 및 설정, 그리고 서버 기동과 간단한 테스트를
진행해 보았다.


오늘은 kafka의 소개 내용을 간단하게 요약해보겠다.
이미 많은 블로그에 원문에 대한 번역에서부터 심층 분석까지 다양한
자료들이 포스팅 되어있으니 나는 그냥 개요만 짚어보련다~


kafka 공식 홈페이지의 indroduction을 보면 다음과 같은 내용으로 시작한다.

Kafka is a distributed, partitioned, replicated commit log service. It provides the functionality of a messaging system, but with a unique design.


뭐 거의 동어 반복이다. 로그 저장에 대한 분산과 분할과 복제. 그리고 메시징 시스템인데
독특하게 디자인 되었단다. 일단 분산, 분할, 복제에 돼지꼬리 땡땡 하고...


조금 더 구체적으로 가보자

  • 메시지는 topic이라고 불리는 일종의 카테고리를 통해 관리된다.
  • producer를 통해 Kafka의 topic으로 메시지를 발행한다.
  • consumer를 통해 topic으로부터 생성된 메시지들을 구독한다.
  • Kafka는 broker라고 불리는 하나 이상의 서버 클러스터로 실행된다.

Kafka 구성1

지난 번 포스팅의 테스트 과정과 비교하면서 살펴보자
  • “kafka-topics.sh --create…”를 통해서 test라는 이름의 topic을 생성.
  • “kafka-console-producer.sh --broker-list…”를 통해 메시지를 생성.
  • “kafka-console-consumer.sh --zookeeper…”를 통해 메시지를 확인.

broker에 대해서는 2번째 kafka-console-producer.sh 진행 시 --broker-list라는
옵션을 통해 메시지를 broker로 전달했다는 것을 알 수 있다.


이런 과정들 (클라이언트와 서버간의 통신)는 단순하고, 고성능이며 언어에 구애받지 않는
TCP 프로토콜을 통해 이루어진다.


또한 Kafka에서는 기본적으로 java 클라이언트를 제공하지만 다양한 언어들을 이용하여
클라이언트를 구현할 수 있다. (다음 링크에서 사용 가능한 클라이언트 언어를 확인할 수
있다 : https://cwiki.apache.org/confluence/display/KAFKA/Clients )


각각의 개념에 대해 좀 더 상세하게 알아보자


Topic과 로그

토픽은 Kafka 클러스터에 의해 partition으로 분할되어 관리된다. 
아래 그림과 같음)


토픽 개념도2


각 파티션에는 메시지들이 순차적으로 쌓인다.
이 메시지들은 정렬되어 저장되며 각각을 구분할 수 있는 offset이라는 ID가 
부여된다.


이렇게 쌓인 메시지들은 사용되었는지 여부와 상관 없이 일정 시간동안 유지된다.
이런 기능들은 데이터 크기를 효율적으로 사용할 수 있게 해준다.

유지 시간은 Kafka설정에이 있으며 기본값은 168(7일)시간이다
설정 항목은 log.retention.hours이다.


각각의 consumer에도 offset이라고 하는 메타데이터가 있어 메시지의
offset과 관련하여 작동한다.


partition 분할을 통해 데이터 용량의 확장과 병렬 처리의 잇점을 얻을 수 있다.

  1. 이미지 출처 : http://kafka.apache.org/documentation.html#introduction ↩︎
  2. 이미지 출처 : http://kafka.apache.org/documentation.html#introduction ↩︎


블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요