본문 바로가기
스터디 이야기/Kafka

[Kafka] Kafka - 기본 (Topic)

by lakescript 2024. 8. 9.

 

더보기

https://www.udemy.com/course/apache-kafka-korean/

 

Udemy의 Apache Kafka 시리즈 – 초보자를 위한 아파치 카프카 강의 v3를 보고 공부하는 내용을 정리합니다.

 

 

Kafka Topic

Kafka Topic이란 Kafka cluster안에 있는 데이터 스트림을 가리킵니다. logs, purchases, twitter_tweeis등의 이름으로 많은 Topic이 존재할 수 있습니다.

예를 들어, DB에서 table을 만들려고 한다면 Topic은 DB의 table과 비슷합니다. 하지만 아무런 제약 조건이 없습기 때문에 원하는 건 모두 kafka topic에 전송할 수 있고, 그 과정에서 데이터 검증이 없습니다.

원하는 만큼 만들 수 있습니다.

또한, Kafka Cluster안에 원하는 만큼 Kafka Topic을 만들 수 있고 Kafka Cluster안에서 이름을 이용하여 Kafka Topic을 식별합니다. (위에서 나왔던 logs, purchases가 그 예시 입니다.)

다양한 종류의 형식을 지원합니다.

kafka topic은 모든 종류의 메시지 형식을 지원합니다. (JSON, Avro, Text 등)

메시지들의 순서를 데이터 스트림이라고 합니다.

Topic 안에 있는 메시지들의 순서를 데이터 스트림이라고 합니다. Topic을 통해 데이터 스트림을 만들기 때문에 Kafka를 데이터 스트리밍 플랫폼이라고 부릅니다.

쿼리할 수 없습니다.

Topic은 위에서 언급했듯이 DB의 Table과 비슷하지만 쿼리할 수 없습니다. 그러면 어떻게 데이터를 읽고 쓸 수 있을까요? Kafka Producer를 사용하여 Topic에 Data를 추가할 수 있습니다. 그 후 Kafka Consumer를 통해 Topic에서 Data를 원하는 서비스로 전송합니다.

Partitions and offsets

Topic은 일반적으로 분할할 수 있습니다. (하나의 토픽에 100개의 파티션으로 구성할 수 있습니다)

Kafka topic으로 전송된 메시지들은 이 파티션으로 들어가게 되고, 각 파티션 안의 메시지들은 순서가 정해집니다. (계속 파티션에 추가하게되면 ID가 증가합니다.)

이렇게 작성한 파티션안의 메시지들은 각각의 ID를 갖게되고 이 ID를 Kafka Partitions Offset이라고 부릅니다.

Kafka Topic은 기본적으로 Immutable

Kafka Topic은 Immutable 입니다.(즉, 일단 Partitions에 Data를 기록하면 변경할 수 없습니다. 그로인해 Kafka안의 데이터를 삭제할 수 없고, 데이터를 업데이트할 수도 없습니다. 오직 계속 기록만 가능합니다.)

example : truck_gps

예시를 통해 Kafka Topic의 흐름을 살펴보겠습니다.

트럭 차들가 있고, 각각의 트럭에는 GPS가 설치되어 있습니다. GPS는 트럭의 위치를 메세지로 Kafka에게 20초마다(설정한 값에 따라 다름) 전송합니다. 여기서 메시지는 truck_id 나 truck_locate, 위도, 경도와 같은 정보가 담겨 있고, 이렇게 수집된 데이터들을 truck_gps라는 Kafka Topic으로 전송합니다.

trucks_gps 데이터를 필요로 하는 consumer가 존재합니다. consumer는 해당 Kafka Topic을 받아와 dashboard나 service에 전송합니다. 그러면 모든 트럭의 위치를 실시간으로 추적할 수 있고(Location Dashboard), 배송이 완료된 고객에게 완료 메시지를 전달(Notification Service)할 수 있습니다.

동일한 데이터 스트림에 대해 다수의 서비스가 읽을 수 있기 때문에 Kafka는 아주 유용합니다.


Important notes

  • 한번 partitions에 데이터가 작성되면 절대 바꿀 수 없습니다.(immutability)
  • Kafka의 데이터는 일정 시간 동안만 유지됩니다. (기본값은 일주일)
  • offsets은 특정한 partitions에 대해서만 의미가 있습니다.
    • 파티션 0에 있는 오프셋 3과 파티션1에 있는 오프셋 3은 다릅니다.
    • 앞의 메시지가 삭제되었어도 그 오프셋을 사용할 수 없습니다.
      • kafka 토픽에 메시지를 전송하면 오프셋은 계속 1씩 증가하고 메시지의 순서가 한 파티션에만 보장된다는 것을 의미합니다.
  • 각 파티션에는 메시지가 있고, 오프셋은 증가하게 됩니다. (즉, 순서대로 보장 → 오프셋 순서로 읽음)
  • Kafka Topic에는 원하는 만큼의 Partitions를 가질 수 있습니다.

 

728x90