본문 바로가기
Data Engineering/Kafka

Kafka Partition key를 사용하여 데이터 순서대로 처리하기

by devson 2023. 1. 12.

Kafka에서 하나의 Topic은 여러 Partition으로 파티셔닝 될 수 있다.

하나의 Partition은 동일한 Consumer Group 내에서 하나의 Consumer에 의해 처리되기 때문에,
Partition의 개수를 늘려 Consumer Group에 대해 하나의 Topic에 대한 처리량을 늘릴 수 있다.

(참고: Can multiple Kafka consumers read the same message from a partition?) 

(* 하지만 Partition을 무조건 늘리는건 좋지 않다 - 참고: How to Choose the Number of Topics/Partitions in a Kafka Cluster?)

 

Topic의 어느 Partition에 적재될지는 publish 할 때 partition을 직접 명시하거나 key에 의해서 정해지게 된다.

(참고: [Kafka] 파티션 키를 사용하여 특정 파티션으로 메시지 적재하기)

https://kafka.apache.org/documentation/

 

'하나의 Partition은 동일한 Consumer Group 내에서 하나의 Consumer에 의해 처리된다는 특징'과 'key로 Partition이 정해지는 특징'으로 인해

순차적으로 Event를 처리해야하는 경우 Event의 key를 무슨 기준으로 정할지는 중요한 사항이다.

 

예를들어 순서가 있는 일련의 Event들을 순서대로 처리해야하는 경우가 있을 때,

그 Event들이 여러 Partition에 걸쳐 쌓이게 된다면 컨슈머들이 각자 병렬로 Event들을 처리하기 때문에 처리 순서를 보장할 수 없다.

하지만 key를 사용하여 하나의 Partition에 Event들을 쌓게되면 하나의 Consumer가 이 Event들을 순서대로 처리할 수 있다.

 

실제적인 예로는 아래와 같은 경우가 있을 것이다.

  • 특정 유저와 관련된 이벤트가 발생했을 때, 유저에게 알림을 보내는 시스템
    • 유저 IDkey로 사용하면 유저의 이벤트 발생 순서대로 알림을 보낼 수 있다.
  • 주문 시스템
    • 이런 시스템은 하나의 리소스에 접근하는 액터가 여럿(구매자, 판매자, 시스템 관리자 등)이기 때문에
      주문 IDkey로 사용하면 해당 주문과 관련된 Event가 순서대로 처리될 수 있다

댓글