Post

kafka 순서 보장

  • kafka는 한 파티션 내에서의 순서는 보장해준다. (단, max.in.flight.requests.per.connection=1 인 경우)
  • 그러나 파티션이 여러 개 있을 때, 여러 파티션에 걸쳐 흩어진 item들 간의 순서는 보장 할 수 없다.
    • 보내는 쪽에서 순차적으로 1, 2, 3 파티션에 프로듀스 한다고 해도, 받는 쪽에서 어떤 순서대로 파티션에 접근해서 데이터를 가져갈지 알 수 없기 때문이다.

순서 보장하는 법 A - 파티션 1개만 사용한다.

⇒ 완전한 의미의 순서 보장. 보낸 순서대로 받는다. ⇒ 분산처리 X ⇒ 처리량 ⬇

순서 보장하는 법 B - 파티션키 + 파티션 내 순서보장 이용한다

이렇게 전체 파티션들을 아우르는 순서보장은 kafka의 병렬 처리 컨셉 상 불가능하지만

[파티션키로 원하는 파티션에 데이터를 전달 하는 기능 + 파티션 내의 순서가 보장된다는 점]을 이용해서, 어느 정도는 순서를 보장 할 수 있다.

원거래와 취소거래를 kafka로 전달 할 때, 원거래가 항상 먼저 produce 및 consume 되어야 한다고 가정하자.

  1. 대상 items를 거래key로 sorting해서 불러온다. (거래key값이 더 작은 원거래건이 항상 먼저 불러와진다.)
  2. 원거래key를 파티션키로 사용해서 produce하면, 원거래와 취소거래가 같은 파티션으로 produce되고, 파티션 내 순서가 보장되기 때문에 항상 원거래가 취소거래 보다 먼저 전달되도록 만들 수 있다. 즉, 특정 그룹에 속하는 item들을 하나의 파티션으로 프로듀스해서그룹 내 순서만을 보장 하는 방법.
This post is licensed under CC BY 4.0 by the author.