ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 카프카 개요(1)
    Kafka 2023. 5. 21. 21:21

    사내에서 기존 시스템 개선을 하기 위해 카프카를 도입하기로 했다.

     

    먼저 카프카란 무엇인지 알아보자.

     

    Apache Kafka

     

    카프카는 링크드인(LinkedIn) 에서 링크드인 서비스 내에서 발생하고 있는 이슈들을 해결하기 위해서 만들었다고 한다.

     

    데이터 파이프라인 확장의 어려움, 이기종 간의 호환성, 고성능 기반의 실시간 데이터 처리의 어려움 등의 문제를 해결 하기 위해 2010년 개발된 카프카는 일년 뒤인 2011년 아파치(Apache) 오픈소스로 세상에 처음 공개가 되었다고 한다.

     

    카프카는 메시지큐의 일종인데,

     

    카프카를 쉽게 잘 설명하는 그림이 최범균님의 'kafka 조금 아는 척하기 1' 영상에서 나온 다음 그림이라고 생각한다.

     

     

     

    출처: https://www.youtube.com/watch?v=0Ssx7jJJADI

     

    이 그림이 카프카 전체적인 구조를 잘 나타내는 그림이라고 생각한다.

     

    주요 용어 정리

    프로듀서 - 데이터를 브로커에 보내는 주체


    브로커 - 프로듀서, 컨슈머 사이에서 데이터를 전달하는 서비스


    컨슈머 - 브로커로 부터 데이터를 취득하는 주체


    큐 - 브로커는 큐 모델을 사용하여 메시지를 관리한다. 


    토픽 - 메시지를 관심사(토픽)에 따라 분리할 수 있다. 프로듀서와 컨슈머는 특정 토픽의 메시지를 송수신할 수 있다. 


    파티션 - 토픽의 분산 처리 지원


    주키퍼 - 분산 처리를 위한 관리도구로서 브로커에서 관리되는 토픽, 파티션등의 메타정보를 관리한다. 


    카프카 클라이언트 - 카프카 운영에 필요한 도구를 제공한다.


    카프카 클러스터 - 브로커, 주키퍼에 의해 구성된 클러스터 시스템

     

    카프카의 주요 특징

    높은 처리량과 낮은 지연시간

    카프카를 선택하는 가장 큰 이유 일 것 입니다. 앞에 사례에서도 그렇고 카프카는 매우 높은 처리량과 낮은 지연시간(latency) 을 자랑한다.

    컨플루언트의 블로그에서 메세지 시스템 간의 성능을 비교한 자료

    [confluent.io/kafka-fastest-messaging-system]

     

    위의 이미지에서 아파치 카프카, 북키퍼(BookKeeper) 기반의 스토리지를 이용한 펄사(Pulsar), 전통적인 메세지 큐 시스템인 래빗MQ(RabbitMQ), 총 세가지 메세징 시스템의 비교한 내용을 확인 할 수 있다.

    위의 벤치마크의 결과에서 확인 할 수 있듯이 처리량과 응답속도를 같이 비교하면 카프카가 다연 독보적으로 좋다고 할 수 있다.
            

    높은 확장성

    카프카는 손쉬운 확장이 가능하고 잘 설계된 애플리케이션이다.

    링크드인이 비즈니스 적으로 급성장 하면서 애플리케이션 확장의 필요성을 느끼게 되었는데

    확장하기 어려운 애플리케이션에서 어려움을 겪으면서 이러한 문제점을 개선하고자 카프카 초기부터 확장이 가능하도록 설계를 하게 되었다고 한다.
           

    고가용성

    카프카 초기버전에서는 무엇보다 메세지를 빠르게 처리하는 것이 목표였지만, 점차 시간이 지나면서 고가용성 측면도 중요하게 생각하게 되었다. 카프카는 2013년 에 클러스터 내 레플리케이션 기능을 추가하였다.

    고가용성(High Availability) 라는 개념은 간단해 보이지만, 내부 레플리케이션에 대한 로직은 매우 어렵고 복잡하다고 한다. 이러한 복잡하지만 좋은 기능은 고가용성 기능을 카프카는 지원하고 있다.
         

    내구성

    프로듀서는 카프카로 메세지를 전송할 때, 프로듀서의 acks 라는옵션을 조정하여 메세지의 내구성을 강화할 수 있다.

    강력한 메세지의 내구성을 원한다면 옵션에서 acks=all 로 사용할 수 도 있다.

    이렇게 프로듀서에 의해 카프카로 전송되는 모든 메세지는 안전한 저장소인 카프카 로컬 디스크에 저장되게 된다.

    카프카의 경우에는 컨슈머가 메세지를 가져가더라도 메세지는 삭제되지 않고 지정한 설정 시간 또는 로그의 크기 만큼 로컬 디스크에 보관되므로 코드의 버그나 장애가 발생하더라도 과거의 메세지들을 불러와 재처리 할 수 있다.

     

    장애 발생에 따른 재처리는 운영에서 매우 중요한 요소이므로 향후 코드로 다시 설명할 예정이다.
                 

    개발 편의성

    카프카는 메세지를 전송하는 역할을 하는 프로듀서 와 메세지를 가져오는 역할을 하는 컨슈머가 완벽하게 분리 되어 동작하고 서로 영향을 주지도 받지도 않는다.

    따라서 프로듀싱을 원하는 개발자는 프로듀싱만 보면 되고, 컨슈밍을 원하는 개발자는 컨슈머만 보면 된다.

    또한 개발 편의성을 제공하기 위해 카프카에서는 카프카 커넥트(Kafka Connect) 와 스키마 레지스트리 를 제공 하고 있다.
              

    운영 및 관리 편의성

    카프카는 앞서 언급한 여러 장점으로 인해 중앙 메인 데이터 파이프라인 역할을 하게 되는데, 운영이나 관리의 편의성이 떨어진다면 그와 같은 주요 역할을 맡기가 부담스러울수도 있다.

    중요한 역할을 하는 애플리케이션이라면 성능 확장을 위한 증설 작업이 쉽고 간단해야 하며, 최신 버전이 릴리즈되는 경우 무중단으로 버전 업그레이도 가능해야 하고 , 버전 업그레이드 작업 역시 단순 해야 한다.

    이런 측면에서는 카프카는 다양한 기능과 3rd Party 를 통해 관리 편의성을 높일수 있는 부분이 있다.

     

     

     

    다음 시간에는 실제 프로젝트 코드를 통해 카프카 동작하는 걸 알아보기로 한다.

     

     

    출처: https://youngwonhan-family.tistory.com/entry/Kafka-%EA%B0%9C%EC%9A%94-%EC%A3%BC%EC%9A%94-%EC%9A%A9%EC%96%B4-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC

    출처: https://hoing.io/archives/4907

     

     

    'Kafka' 카테고리의 다른 글

    카프카 프로듀서(producer), 컨슈머(consumer) (2)  (0) 2023.07.02
Designed by Tistory.