본문 바로가기

Bigdata/kafka

Apache Kafka 정리

Apache Kafka


1. 소개


kafka는 링크드인에서 개발한 발행-구독 방식의 고성능 분산 메시징 시스템입니다.

kafka는 크게 topic과 메시지를 관리하는 broker, 메시지를 전송하는 producer, 그리고 메시지를 소비하는 consumer로 이루어져 있습니다.


일반 메시징 시스템의 경우 메시지를 메모리에 저장하는 경우가 많은 반면 kafka의 경우 메시지를 파일에 저장하여 메시지의 영속성이 높으며 그러면서도 OS의 페이지 캐시와 zero copy 기법 그리고 async non blocking io를 이용하여 기존 메시징 시스템보다도 고성능을 구현하였습니다.

또한 아키텍쳐 자체가 분산 시스템을 목표로 개발되었기 때문에 확장 또한 매우 손쉽게 할 수 있습니다.


예) activemq, kafka, rabbitmq 성능 비교



2. Broker


broker는 kafka의 서버라고 생각하면 됩니다. topic을 기준으로 메시지를 관리하며 모든 설정은 broker를 통해 이루어지게 됩니다.

 기본적인 형태는 클러스터형태로 이루어져 있으며 메시지는 파티셔닝되어 브로커에 분산 저장되게 됩니다또한 각각의 파티셔닝된 메시지는 리플리케이션이 될 수 있습니다카프카의 아키텍쳐 자체가 분산시스템을 목표로 개발되었기에 굉장히 손쉽게 클러스터를 확장할 수 있으며 메시지가 클러스터 형태로 이루어져 있고 리플리케이션이 되어 있어 하나의 브로커가 죽는 경우가 발생하여도 장애가 견딜 수 있습니다.




3. Producer


producer는 카프카 클러스터에 메시지를 전송하는 역할을 합니다위에서 broker에 메시지가 파티셔닝되어 저장된다고 하였는데요produer에서 메시지를 전송할 때 파티셔닝하여 전송하게 됩니다.

파티셔닝 방법의 경우 라운드로빈, 타임스템프, 혹은 커스텀 파티셔너를 구현하여 메시지를 파티셔닝할 수 있습니다특별한 파티셔너를 지정하지 않으면 라운드로빈 형태로 분산 저장되게 됩니다.

producer는 메시지 전송시 비동기 논블로킹 IO 형태의 구현 모델을 이용하여 고성능을 낼 수 있도록 구현되었습니다메시지 전송시 카프카 0.8까지는 스칼라로 구현이 되었는데요. 0.9newProducer API는 자바의 future를 이용해서 굉장히 고성능을 이루어냈다고 합니다.




4. Consumer


Consumer는 크게 Consumer와 Consumer-Group으로 이루어져 있습니다.

Consumer 말 그대로 카프카에서 메시지를 소비하는 최소의 단위라고 생각하시면 됩니다그리고 Consumer-Group은 Consumer인스턴스를 대표하는 그룹이라고 생각하시면 됩니다Consumer-Group이 존재하는 이유는 kafka에서 Consumer-Group단위로 offset을 관리하기 때문에 같은 topic에 대해 다른 어플리케이션에서 접근을 하여도 offset을 별개로 처리할 수 있다는 장점이 있습니다.

kafka에서는 파티션의 수만큼 병렬화 수준이 결정이 됩니다. 그렇기 때문에 Consumer-Group을 구성하는 Consumer의 수가 파티션의 수보다 작으면 하나의 consumer가 여러 개의 partition을 소유하게 되고 100퍼센트 효율을 내지 못할 수 도 있습니다.

 반대로 consumer의 수가 partition의 수보다 많으면 여분의 consumer는 메시지를 처리하지 않게되므로 나머지 consumer는 유휴상태가 되는 상황이 발생 할 수 있습니다. 그렇기 때문에 partition 개수와 consumer 수의 적절한 설정이 필요합니다.




5. Topic



topic은 아래의 그림에 나타난 바와 같이 1개 이상의 파티션으로 이루어져 있습니다. 메시지파티셔닝 되어 저장되기 때문에 같은 파티션의 메시지들은 순서가 보장되지만 다른 파트션과의 메시지 순서는 보장하지 않습니다.

그렇기 때문에 메시지를 소비하는쪽에서 후처리로 정렬을 하는 로직이 필요합니다. topic은 partition단위로 쪼개어져 클러스터의 각 서버들에 분산되어 저장되고, 고가용성을 위하여 복제(replication) 설정을 할 경우

이 또한 partition 단위로 각 서버들에 분산되어 복제되므로 장애가 발생하면 partition 단위로 fail over가 수행이 이루어 집니다.


'Bigdata > kafka' 카테고리의 다른 글

[kafka] topic이 delete가 되지 않을 경우 해결법  (0) 2017.03.22