2017-11-05 29 views
0

새 프로젝트의 경우 Microservices를 RabbitMQ 또는 Kafka와 함께 사용하려고합니다. 두 기술 모두에게 동일한 질문이 있지만 대답은 다를 수 있습니다.마이크로 서비스에서 병렬 소비자를 확대하는 방법

  1. 제품 1
  2. 만들기 프로필 1
  3. 삭제 제품 우리는 서비스간에 데이터를 "복제"이러한 이벤트를 사용하려면 1

만들기 :

는 세 가지 이벤트를 생각해 보자. 한 소비자를 사용할 때, 모든 메시지는 올바른 순서로 실행되며 데이터베이스는 일관성을 유지합니다.

그러나이 한 소비자가 메시지 처리 속도를 늦추면 다른 소비자를 병렬로 추가 할 수 있습니다. 이 시점에서 이벤트 1이 이벤트 3 이전에 실행되면 데이터베이스가 일치하지 않을 수 있습니다 (첫 번째 삭제, 후 작성).

주제에 대한 정보가 here이지만 두 솔루션 모두 구현하기가 어려워 보입니다. 이러한 소비자를 어떻게 확장 할 수 있습니까? RabbitMQ 또는 Kafka를 사용하여이 문제를 처리하는 방법에 차이가 있습니까?

답변

2

카프카 기반 구현의 경우 동일한 "논리 그룹"(ID?)에 속한 모든 이벤트가 동일한 파티션에 착륙하는지 확인해야합니다.이 경우에는 더 많은 소비자를 추가 할 수 있습니다 파티션)을 사용하여 이벤트를 병렬로 처리하지만 모든 소비자는 논리 그룹의 이벤트 만 처리합니다.

ID를 키로 사용하거나보다 복잡한 파티셔닝 구현을 사용하여 올바른 키/파티셔닝 방식을 선택하여이 동작을 수행 할 수 있습니다.

+1

이것을 확장하려면 자신 만의 partioner 클래스 (https://kafka.apache.org/0110/javadoc/org/apache/kafka/clients/producer/Partitioner.html)를 구현해야하며, Kafka에서 나만의 파티션 키를 다루는 문제. 어떤 "논리 그룹"이 다른 파티션보다 훨씬 더 큰 볼륨이라면 파티션이 다른 파티션보다 크기가 커질 수 있으며 동일한 항목의 일부를 유지하기 위해 특별한 유지 관리가 필요합니다. –

+0

그래서 RabbitMQ에서 동시에 처리 할 수있는 메시지 대기열을 만들 수 있습니다. – JDel