ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kafka 사용이유 ( vs RabbitMQ )
    Devops/Kafka 2019. 5. 10. 11:29
    반응형

     카프카를 사용하기전에 과연 어떤 곳에 카프카를 사용해야 하는가에 대한 기본적인 분석이 간단하게라도 필요하다고 생각이 들었다. RabbitMQ 보단 카프카가 빠르니 카프카를 쓰자 !! 혹은 더 단순하게 카프카가 최고다!! 라고 말하는 사람들이 종종 있거나 카프카면 다되! 라는 식의 맹목적인 사람도 있었다. 

     난 개인적으로 신기술이나 트랜디한 기술을 사용할때는 아주 조심스럽게 신중하게 써야 한다고 생각한다. 내가 학생이라면 말리지 않는다. 고민도 하지 않는데 그냥 써보면 된다. 죽이 되든 밥이 되든 내가 아마추어인데 뭘하든 누가 관심이 있을 거라고 생각하지 않는다. 

     하지만 돈을 받고 이 일을 하고 있다면 적어도 프로라고 불리며 , 이해관계와 회사의 입장등 많은 것들을 고려하여 기술을 적용해야 한다고 생각한다.  자 그럼 카프카는 왜쓸까? 부터 시작 한다. 

     

    카프카는 메세지큐이다. 메세지큐의 목적은 단순하다. 메세지를 한곳에 던지고 그걸 필요한 주체가 가져다 처리한다. 이건 RabbitMQ, 카프카, 멤캐시 등 다수의 제품들의 기본기능이다.  일단 메세지큐를 가장 많이쓰는 서비스는 로그 관리이다. 어느 회사들 로그관리의 필요성을 가지게 되고 그에 맞는 로그 시스템을 구축한다. 

     현재 내가 재직중인 회사에선 로그를 모아서 AI 및 각종 통계를 내는거에 목적을 가지고있다. 그렇다면 메세지큐를 쓰는게 맞다고 생각한다. 그럼 더 자세하게 판단을 해보았다. 메세지큐를 사용하는 이유는 ? 검색해보니 쉽게 찾을수 있었다. 

     

    메시지 큐의 장점

     - 비동기(Asynchronous): Queue에 넣기 때문에 나중에 처리할 수 있습니다.

     - 비동조(Decoupling): 애츨리케이션과 분리할 수 있습니다.

     - 탄력성(Resilience): 일부가 실패 시 전체에 영향을 받지 않습니다.

     - 과잉(Redundancy): 실패할 경우 재실행 가능합니다.

     - 보증(Guarantees): 작업이 처리된걸 확인할 수 있습니다.

     - 확장성(Scalable): 다수의 프로세스들이 큐에 메시지를 보낼 수 있습니다.

     

    메시지 큐 사용처

     - 다른 곳의 API로 부터 데이터 송수신이 가능합니다.

     - 다양한 애플리케이션에서 비동기 통신을 할 수 있습니다.

     - 이메일 발송 및 문서 업로드가 가능합니다.

     - 많은 양의 프로세스들을 처리할 수 있습니다.



    출처: https://12bme.tistory.com/176 [길은 가면, 뒤에 있다.]

     

    결론은 저런 목적으로 사용 해야 하는 상황이다. 목적은 부합하니 이젠 카프카를 쓸지 아니면 다른 제품들이 더 내 상황에 걸맞는지 생각해 보아야 한다. 

     

    기본적인 메세지 큐의 구조는 아래모양으로 이루어져있다. 

     

     어떻게 보면 메세지를 바로 던지는게 더 빠르지 않은가? 라는 생각을 하게 된다.  일단 기존 동기화 방식을 쓴다면 많은 데이터가 전송될경우 병목이 생기고 뒤에 들어오는 모든 요청들은 딜레이가 되게 된다. 그렇기 때문에 중간의 미들웨어에게 전송만은 위임해서 순차적으로 처리하는것이다.  하지만 이럴경우 서버 성능저하에 대해서 이점을 가질수 있겠지만 보편적으로 즉각적인 서비스는 힘들게 된다.  어느 한쪽이라도 제대로 받쳐 주지 못하면 결국은 다시 병목이다. 

     그렇기 때문에 용도에 맞는 메세지큐를 써야하고 환경에 맞는 설정이 필요하다. 

     메세지큐는 다양하다. Spring Intergration , JMS , ActiveMQ, RabbitMQ, Kafka 등등 각자 태어난 목적과 장점 단점이 뚜렷하다. 그중 RabbitMQ와만 비교 하려고한다. 선정이유는 단순하다. 주변에서 많이 사용하고 있기 때문에 카프카와 비교 해보려 한다. 

     

    RabbitMQ

     

     - 구성이 쉽다. 

     - 유연한 라우팅이 가능하면 관리 UI 가 편리하다. 

     - 제품 성숙도가 높다. 

     - 개방형 프로토콜을 위한 AMQP 를 구현 위해 개발 

     - 필요에 따라 동기/비동기식이 가능함 

     - 소비자중심의 설계

     - 20k/sec 처리를 보장

     

    Apache Kafka 

     

     - 구독방식의 비동기식 구성

     - 고성능 고가용성 

     - 분산처리에 효과적으로 설계 됨. 

     - 생산자 중심의 설계 

     - 범용 메세징 시스템에서 제공되는 다양한 기능은 제공되지 않음.

     - 100k/sec 처리를 보장

     

     

    많은 메세지 큐가 있지만 대표적인 RabbitMQ와 비교 하기위해 간단하게 특징을 정리해 봤다. 유심히 보면 태생 자체가 다르다. 분산과 고성능을 추구한다면 당연 카프카가 맞고 굳이 분산까지 해가며 트래픽을 감당할 규모가 아니라면 오히려 RabbitMQ가 나을거 같다. 제품의 성숙도나 구성의 자유성에서는 절대 카프카가를 맹목적으로 밀어 붙일 이유는 없는거 같다. 엄연히 큐기능만으로보면 아직 태어난지 얼마 안된 카프카가 RabbitMQ 보다 지원이 부족한것이 사실이다. 분산/대용량/고성능/노드장애대응   이 4가지 목적이 필요하면 카프카 그게 아니라 큐의 다양한 기능이 필요하다면 RabbitMQ ! 라고 개인적으로 생각이 든다.  그리고 일반적인 시스템에서는 카프카는 어쩌면 아직 오버스펙일수도 있겠단 생각도 든다. 

     

     사람마다 두가지 미들웨어중 뭐가 낫다라고 판단하는 많은 글들이 있다. 보통 그런 글들은 자신이 선택한 미들웨어 중심으로 이야기한다. 그렇기 때문에 읽다보면 카프가가 좋구나 ! RabbitMQ가 좋구나 ! 하고 왔다 갔다 하게 되는거 같다. 앞서 말했지만 난 목적을 기준으로 쓰면 된다고 생각한다. 정말 어마어마한 데이터를 처리해야 한다면 기능이 좀 부족한걸 감수하고 나서라도 카프카를 쓰는것이고 데이터 처리보단 관리적 측면이다 다양한 기능 구현을 위한 서비스를 구축하기 위해선 당연 RabbitMQ 가 낫다라고 할거 같다. 

     

     속도가 전부는 아니라고 생각한다. 속도가 빠른게 최고라고만 한다면 미들웨어 대부분은 새로운것들이 나올때마다 계속 사라져 갔을것이다. 지금 RabbitMQ는 역사와 전통을 자랑할정도로 성숙도가 높다.  성숙도에서 가져오는 이점도 무시할수 없다고 본다. 그렇기 때문에 목적이란것에 집착하고 그게 중요하다고 생각한다. 

     

     앞으로도 미들웨어 뿐만아니라 다른 부분에서도 목적을 명확하게 서포트 할수있는 것을 최우선으로 서비스를 만들어 나갈 생각이다. 물론 항상 내마음처럼 된다는 전제 하에서 말이다. ^^

     

    - 추가 - 

    최근에 Rabbit MQ 를 싫어 (?) 하시는 분의 말의 의하면 Rabbit MQ 는 메세지의 유실의 위험성이 존재해서 카프카를 더 선호 한다는 이야기를 들었다. 좀 찾아보니 그런이슈가 있고 RabbitMQ 도 저런 유실부분을 해결하기위해 다방면으로 방법을 찾아서사용하는 케이스들을 찾을수 있었다. 

    이글을 최초로 썼을때에는 카프카와 다른 여러가지 메세지큐에 대한 비교 분석을 많이하고 찾아 보고 용도에 맞게 써야 한다는 판단을 했고 지금도 크게 그생각은 벗어 나지 않았지만 현재 실무적으로는 카프카를 대다수 기업에서 선호 하고 있는것 같다. 

     

     

     

    관련 다음글 

    카프카 기본 : https://ellune.tistory.com/22?category=769027 

     

    Kafka 기본

    Kafka  데이터를 분산 처리 가능한 데이터 플랫폼 !  카프카는 메세지큐 서비스로 분산 환경에 특화 되있다고 한다. 보통 많이 알려진 RabbitMQ 와 동일한 역할 포지션이지만 성능에서 많은 차이를

    ellune.tistory.com

    카프카 매니저 설치 : https://ellune.tistory.com/65?category=769027 

     

    Kafka manager(CMAK) 설치

    간단하게 cmak 를 설치하는 방법을 적어 놓는다... 최근에 자주 사용할일이 있었는데 자꾸 까먹는다 ㅠㅠ 크게 특이하거나 어려운것이 없기 때문에 쉽게 할수있다. 추가적으로 AWS EC2 기반에서 설

    ellune.tistory.com

    카프카 도커 사용해보기 : https://ellune.tistory.com/48?category=769027 

     

    Kafka 사용법

    카프카에 메세지를 생성하고 소비하는 방식은 간단한편에 속한다. 아래는 타 사이트에 있는 소스들을 참고하여 정리한 내용들이다. 기본적인 단순 메세지 생성후 소비하여 화면에 출력하는 소

    ellune.tistory.com

     

    반응형

    'Devops > Kafka' 카테고리의 다른 글

    Kafka manager(CMAK) 설치  (0) 2021.06.25
    Kafka Docker-compose ( feat. single node ) 만들기  (0) 2021.03.19
    Kafka 사용법  (0) 2019.11.20
    Kafka 기본  (0) 2019.03.11
Designed by Tistory.