작성
·
237
답변 1
1
안녕하십니까,
지금 파티션 할당 전략에 대해서 질문을 하신 건지요?
질문 자체로만 보면 파티션 할당 전략이 아닌, 데이터의 입력 시점만 질문하신걸로 보입니다만, 일단 데이터의 입력 시점을 질문하신걸로 판단하고 답변드리면,
카프카는 기본적으로 비동기 데이터 처리입니다. 질문하신 '같은 시점'이라는 의미가 동일한 order_id 키값은 밀리세컨드 단위로 완전히 같아야 된다는 의미 이신지 모르겠지만, 비동기 데이터 처리이므로 보내는 producer에서 그렇게 보내도 topic에 그렇게 저장되지 않을 수 있습니다. 또한 consumer는 topic에 저장된 offset 순으로 읽어 들이지만 네트웍이나 여러 요소들로 인해서 완벽하게 동일한 시점에 토픽에 저장된 메시지라도 동일하지 않은 시점에 읽어 들일 수 있습니다.
카프카가 비동기 데이터 처리를 하고 있지만, order_id가 order 생성 순으로 만들어지면 거의 대부분 순차적으로 product에서 topic으로 보내지고 순차적으로 consumer에서 읽히게 됩니다. 시점이 다른 데이터를 consumer에서 함께 처리하는 경우는 많지 않지만 순차적이지 않은 일부 데이터 역시 consumer에서 메모리로 과거 데이터를 유지 하고 있기 때문에 뒤 늦게 오는 데이터를 함께 aggregation 처리를 적용할 수 있습니다.
들어오는 시점이 다르더라도 동일한 key값을 가지는 파티션들을 하나의 consumer에서 처리하면 좋은 이유는, consumer에서 주로 Spark과 같은 빅데이터 솔루션등에 적재하는 경우가 많은데, 이때 spark 역시 동일한 key값을 가지는 파티션을 기반으로 데이터 처리를 하고 있기 때문에 consumer에서 파일 처리 성능이 좋아집니다. consumer들끼리 키 값이 혼재 되어 있으면 consumer에서 키값 별로 다시 재 작업을 해서 빅데이터 솔루션에 데이터를 적재해야 하므로 시간이 더 소모 됩니다.
때문에 카프카와 같은 분산 시스템은 동일한 key값을 가지는 데이터를 하나의 프로세스(여기서는 consumer)로 처리하는 메커니즘을 중요하게 생각합니다.
감사합니다.