Kafka

정선용·2022년 3월 2일
0

참고 블로그 ) https://velog.io/@busybean3

Kafka

what is kafka

실시간 분산 데이터처리 플랫폼.
과거에는 Redis나 RabbitMQ등 다양한 어플리케이션을 사용했으나,
각자 다른 어플리케이션의 특성상 데이터 파편화 현상이 있어 유지보수에 어려움이 존재했음.
: Kafka는 Source application(producer..)과 Target application(consumer..)간 커플링을 약하게 할 수 있도록 해주는 데이터 처리 플랫폼
: kafka는 데이터 스트림을 각 application에서 처리하는 것이 아닌 한 곳에서 중앙집중화하여 처리하게 해주는 데이터 처리 플랫폼.
: kafka는 scale out이 용이한 확장성이 좋은 데이터 처리 플랫폼.
: kafka는 중간에서 노드들에 신뢰성있게 데이터를 전송할 수 있게 해주는 일종의 메세징 시스템.
: kafka는 대용량,대규모 메시지 데이터를 빠르게 처리하도록 개발된 메시징 플랫폼.

why kafka

나오게 된 배경에는, 시스템들이 커지며 복잡도가 증가하고 데이터 파이프라인 관리가 어려워졌었다.
각 목적에따라 만들었던 데이터 파이프라인들을 통합하고자 했지만, 파이프라인마다 포멧, 처리방법 등 특성이 달라 파이프라인 확장하기가 어려웠음.
=> Kafka를 통해 서비스가 확장됨에 따라 복잡도와 데이터 파이프라인의 관리를 쉽게 할 수 있도록 하고자 하는 목적으로 나오게 되었다.

  • 기존의 데이터 파이프라인
  • kafka의 데이터 파이프라인

Kafka 동작방식과 원리

Pun/Sub 모델

기존 메시징 시스템들은 데이터 전송 노드와 사용 노드를 직접 연결하는 방식을 이용하지만, kafka는 pub-sub구조를 이용한다.

  • pub-sub

    pub-sub 모델은 발신자가 수신자에게 직접 메시지를 전달하는 구조가 아니라 발신자가 특정 Topic에 메시지를 발행(pub)하면 수신자가 직접 해당 토픽을 구독(sub)하는 방식을 이용한다. 때문에 기존 메시지 큐 시스템보다 성능적으로 더 우수하다.

Kafka 이용 이유, 특징

  1. Producer, Consumer 분리
    기존 메시징 시스템들은 데이터 전송 노드와 사용 노드를 직접 연결하는 방식을 이용. kafka는 pub-sub구조 이용.
  • pub-sub

    pub-sub 모델은 발신자가 수신자에게 직접 메시지를 전달하는 구조가 아니라 발신자가 특정 Topic에 메시지를 발행(publish)하면 수신자가 직접 해당 토픽을 구독(subcribe)하는 방식을 이용한다. 때문에 기존 메시지 큐 시스템보다 성능적으로 더 우수하다.
    발신자가 상대를 직접지정하지 않고, 수신자는 발신자 정보가 없어도 원하는 메세지만 수신 가능하기에 높은 확장성이 있다고 할 수 있다.
  • ? 직접 연결 통신방법(일반적 통신방법)

    장점으로는 빠른 전송속도와 결과를 빨리 알 수 있다는 점이 있지만 문제발생시(특정 개체에 장애가 발생했을 때), 발신자측에서 대기 처리를 개별적으로 해주지 않으면 시스템에 문제가 발생한다. (시스템이 커질수록 확장성에 있어 문제들이 발생)
  • 특정 개체에 장애 발생 경우 pub-sub

    producer가 메시지를 kafka 메시징 시스템에 전달(메시지와 ID를 포함) 하고, 메시징 시스템의 교환기가 수신처의 ID값을 확인하고 consumer들 queue에 전달하고 consumer는 queue를 모니터링하고있다가 큐에 메세지가 전달되면 값을 가져간다.
    -> 컨슈머에 장애가 발생한경우, 메세지는 queue에 남아있으며 복귀 후 큐에 있는 메세지를 정상적으로 가져갈 수 있다. : 메시징 시스템인 중앙 메시징 시스템인 kafka에 데이터를 보존해 메시지 유실이 없다. 또한 교환기 룰에 의해 데이터가 정확하게 전달되므로 메시지데이터 유실 염려가 없다.
  • pub-sub의 단점

    좋은점으로는 이렇게 확장성과 안정성이 있다는점이지만 직접통신을 하지 않기에 메시지가 정확하게 전달되었는지 확인하려면 복잡하다. 또한 중간자가 껴있어 속도가 떨어진다. 기존의 pub-sub는 그렇기 때문에 간단한 데이터를 전송하는데 주로 사용되었었다.
  • Kafka는 한단계 더 발전된 pub-sub

    kafka는 (1)메시지 정확한 전달을 확인하기 복잡하다 / (2)속도저하
    라는 문제점을 해결하기 위해
    메시지 교환 전달의 신뢰성 관리를 producer, consumer쪽으로 넘겼다.
    부하가 많이 걸리는 교환기 기능또한 consumer가 만들 수 있도록 하였다.
    => 메시징 시스템 내에서의 작업량을 줄이고 이렇게 절약한 작업량을 메시징 전달 성능에 집중시킨 발전된 pub-sub구조의 시스템(고성능 메시징 시스템)
  1. 멀티 프로듀서, 멀티 컨슈머
    하나의 토픽에 여러 프로듀서가 메세지를 보내고, 컨슈머들은 토픽을 구독하는 방식으로 여러 Producer, Consumer를 연결해 가져올 수 있도록 한다.

  2. 디스크에 메세지 저장(Undelete log)
    기존 메세지 시스템들은 consumer가 메세지를 읽어가면 큐에서 바로 메세지를 삭제하지만, kafka는 보관주기를 정해서 해당 기간동안 디스크에 메세지를 저장한다. 그렇기 때문에 컨슈머 처리가 늦어지더라도 kafka를 통해 복구, 손실없이 메시지를 가져갈 수 있다.

  3. High throughput message capacity (대용량처리)
    짧은 시간에 대용량 데이터를 쉽게 전달가능. 파티션을 통해 분산처리가 가능하여 데이터가 아무리 많아도 컨슈머를 늘려서 병렬처리를 통해 빠르게 분산 처리가 가능하다.pub-sub 모델의 단점은 직접연결이 아니라 중간자인 kafka가 껴있는 구조로 속도가 느리고 데이터를 받았는지 확인이 어렵다는 점이 있는데, kafka에서 내부적으로 분산처리, 배치처리 등 다양한 기법을 이용해 대규모 고성능 유지 메세징 시스템이 가능하도록 함.

  4. Scalability & Fault tolerant (분산운영)
    사용중인 브로커 서버 이외에도 신규 서버를 스케일 아웃(서버 대수를 늘려 처리능력 향상) 가능 = 확장성. 여러대의 브로커 서버는 서로 레플리카, 즉 복제되어 있어 한대가 죽는다해도 운용이 가능하다. 하나의 카프카 클러스터는 3대의 브로커로 시작해 수십대의 브로커로 확장 가능하다. (and 온라인 상태에서 확장 작업이 가능)

  5. Undeleted log
    카프카 토픽에 들어간 데이터는 컨슈머가 데이터를 소비해도 바로 사라지지 않는다. (다양한 어플리케이션에서 다양한 용도로 데이터를 처리할 때 굉장히 효율적)

용어

  • Topic : 발행된 메세지들에 대한(분류되는) 하나의 카테고리나 피드명 (Producer와 Consumer들이 kafka로 보낸 자신들의 메세지를 구분하기 위한 이름)
  • Partition : Topic이 저장되는 공간,단위. 병렬처리가 가능하도록 토픽을 나눌 수 있고 많은 양의 메세지 처리를 위해 파티션의 수를 늘려줄 수 있다.
  • Offset : Partition 내에서 메세지를 식별하는 고유 ID값. 0부터 1씩 순차 증가하는 값.
  • Producer : 메세지를 발급, 생산하는 주체(서버 또는 어플리케이션), 메세지를 브로커의 토픽 name으로 보낸다.
  • Consumer : (브로커의 토픽 name으로 저장된)메세지를 구독,소비하는 주체, 서버 또는 어플리케이션. (일반적으로 Consumer 개수와 Partition 개수는 같게 한다. 이유는 하나의 Partition에는 한 Consumer만 데이터를 읽을 수 있기 때문에 Consumer가 더 많다면 그 Consumer는 놀게 된다.)
  • Consumer Group : 하나의 Topic을 읽는 Consumer들을 묶는 집합 : 특정 컨슈머에 문제가 생기는 경우 동일 그룹 내의 다른 컨슈머 인스턴스가 계속해서 동일 토픽의 데이터를 읽을 수 있다.(re-balancing) - kafka는 컨슈머 그룹 단위로 offset을 관리하기 때문. (동일 그룹별 offset을 관리해서 동일한 토픽을 여러 컨슈머 그룹이 컨슘하더라도 서로 각기 다른 offset을 가지고 데이터의 손실 없이 가져가기를 할 수 있게 됨)
profile
정선용

0개의 댓글