스칼라 Akka Stream과 Akka Actor를 활용하여 비동기 방식으로 대량의 데이터를 병렬로 처리한 후 동시에 상태를 관리하여 중복으로 액션이 실행되는 현상을 방지했고, 그 결과를 응답할 수 있도록 구현했습니다.

대량의 데이터를 비동기 방식으로 처리하고 중복 실행을 방지하기 위해 Akka Streams와 Akka Actor를 결합한 아키텍처를 구현하였습니다. 전체적인 구조는 아래와 같습니다.

MongoDB 데이터 조회

ExecutionManagerActor를 통한 상태 관리 및 중복 처리

SendKafkaActor를 통한 Kafka 전송 및 장애 복구

추후 확장 계획

[scala mongodb 드라비어에서 제공해주는 batchSize 설정과 동작 원리]

드라이버에서 제공하는 batchSize 설정은 MongoDB 서버에 한 번에 가져올 문서의 개수를 지정합니다.

예를 들어, batchSize를 10으로 설정하면, 내부 커서를 통해 MongoDB 서버는 한 번에 최대 10건의 데이터를 전송합니다.

단, 이 데이터는 즉시 애플리케이션으로 모두 push 되는 것이 아니라, Reactive Streams의 pull 메커니즘에 따라 downstream(구독자)이 실제 요청한 양만큼 전달됩니다.