본문 바로가기
Dev/Kafka

Kafka 용어 정리

by 돈코츠라멘 2019. 12. 25.

Kafka

  • Pub-Sub 모델의 MQ(메시지 큐)이며, 분산 환경에 특화되어 있다.
  • LinkedIn에서 개발된 분산 메시징 시스템으로 2011년에 오픈소스로 공개되었다.

Pub-Sub 모델

  • Publish-Subscribe
  • Message를 전송자가 바로 수신자에게 보내지 않고, 전송자(=발행자/Publish)가 어떤 형태로든 Message를 구분하여 Publish-Subscribe 시스템에 전송하면 수신자(=구독자/Subscribe)가 특정 부류의 Message를 구독할 수 있게 해 준다. 이때 발행된 Message를 저장하고 중계하는 역할을 브로커(broker)가 수행한다.

Message

  • Kafka에서는 데이터의 기본 단위를 Message라고 한다.
  • DB에서의 row 또는 record에 비유될 수 있다.

Topic & Partition

  • Message는 topic으로 분류되고, topic은 여러 개의 partition으로 나눠진다. partition 내의 한 칸은 로그라고 불린다.
  • 데이터는 한 칸의 로그에 순차적으로 append 된다.
  • Message의 상대적인 위치를 나타내는 값은 offset이다.
  • 각 partition은 서로 다른 서버에 분산될 수 있다. 따라서 하나의 topic이 여러 서버에 걸쳐 수평적으로 확장될 수 있으므로 단일 서버로 처리할 때 보다 성능이 우수하다.
  • //주의// 한 번 늘린 partition은 절대로 줄일 수 없으므로 partition 크기는 신중히 고려해야 한다.

Producer

  • 새로운 message를 생성한다.

Consumer

  • 하나 이상의 topic을 구독하여 message가 생성된 순서대로 읽어온다.
  • Message의 offset을 유지하여 읽는 message의 위치를 알 수 있다.
  • 참고로 offset은 지속적으로 증가하는 정숫값이며, message가 생성될 때 kafka가 추가해준다. partition에 추가된 message는 고유한 offset을 가진다. 그리고 zookeeper나 kafka에서는 각 partition에서 마지막에 읽은 message의 offset을 저장하고 있으므로 consumer가 message 읽기를 중단했다가 다시 시작하더라도 언제든 그다음 message부터 읽을 수 있다.

Consumer group

  • Consumer group은 하나 이상의 consumer로 구성되며, 한 topic을 읽고 처리하기 위해 같은 group의 여러 consumer가 동작한다.
  • 한 topic의 각 partition은 하나의 consumer만 소비할 수 있다. => 반드시 해당 topic의 partition은 그 consumer gorup과 1:N 매칭을 해야 한다.  
    • case 1) partition 3개, consumer 2개 조합 = consumer 중 하나는 2개의 partition을 소비
    • case 2) partition 3개, consumer 3개 조합 = 1:1 매칭
    • case 3) partition 3개, consumer 4개 조합 = consumer 하나는 놀고 있음!
  • Message가 쌓이는 속도보다 처리하는 속도가 훨씬 빠르다면 1:1 매칭보다는 partition 개수 >= consumer 개수로 설정하는 것이 일반적이다.
  • Consumer group은 하나의 topic을 책임진다. 따라서 어떤 consumer가 죽으면 consumer group내에서 다시 consumer들의 partition 소유권을 조정한다. 그래서 다른 consumer가 그 partition을 맡아서 다시 처리하기 시작한다. => 이를 Rebalance라고 한다.

Broker

  • 하나의 kafka 서버를 broker라고 한다.
  • Broker는 producer로부터 message를 수신하고 offset을 지정한 후 해당 message를 디스크에 저장한다.
  • 또한 consumer의 partition 읽기 요청에 응답하고 디스크에 수록된 message를 전송한다.
  • 동일한 노드에서 여러 개의 broker를 띄울 수 있다. => Zookeeper는 이러한 분산 MQ의 정보를 관리해주는 역할을 한다. 따라서 kafka 실행에는 zookeeper의 실행이 필수적이다.
  • Clustering!! - kafka의 broker는 cluster의 일부로 동작하도록 설계되었다. 따라서 여러 개의 broker가 하나의 cluster에 포함될 수 있으며, 그중 하나는 자동으로 선정되는 cluster controller의 기능을 수행한다. Controller는 같은 cluster의 각 broker에게 담당 partition을 할당하고 broker들이 정상적으로 동작하는지 모니터링한다.

 


Reference

댓글