2017-11-23 7 views
0

(마이크로) - 서비스 간 통신을 REST에서 카프카로 변경하고 싶습니다. 주제에 대해 확신 할 수 없으며 그에 대한 의견을 듣고 싶습니다.마이크로 서비스 간 통신을 위해 나머지 대신 카프카

다음 설정을 고려하십시오. 웹 응용 프로그램의 REST를 통해 CRUD 기능을 제공하는 API 게이트웨이가 있습니다. 따라서 사용자가 호출 할 수있는 4 개의 끝점이 있습니다. API 게이트웨이는 요청을 생성하고 두 번째 서비스의 응답을 사용합니다. 두 번째 서비스는 요청을 사용하고 데이터베이스에 액세스하여 데이터베이스에서 CRUD 작업을 실행하고 결과를 생성합니다.

몇 개의 항목을 만들어야합니까? 8 (엔드 포인트 당 2 개 (요청/응답))을 만들어야합니까, 아니면 더 좋은 방법이 있습니까?

여기에 관한 경험이나 회담/문서에 대한 링크를 듣고 싶습니다.

답변

0

이 질문에 대한 짧은 대답은 다음과 같습니다. 그것은 당신의 디자인에 달려 있습니다.

모든 작업에 대해 하나의 항목 만 사용하거나 다른 작업에 대해 여러 항목을 사용할 수 있습니다. 그러나 당신은 그것을 알아야합니다.

작성한 순서대로 kafka에 메시지를 생성해야하며 일관성을 유지하기 위해 동일한 순서로 메시지를 사용해야합니다. 카프카에게 보내는 메시지는 주제 파티션 내에서 정렬됩니다. 다른 주제 파티션의 메시지는 kafka에서 주문하지 않습니다. 즉, 항목을 작성한 다음 해당 항목을 삭제했다고 가정 해 보겠습니다. 작 동 조작과 관련된 메시지 앞에 삭제 조작과 관련된 메시지를 사용하려고하면 오류가 발생합니다. 이 시나리오에서는이 두 메시지를 동일한 주제 분할로 보내서 메시지 작성 후 삭제 메시지가 사용되도록해야합니다.

일관성과 처리량 간에는 항상 거래가 있습니다. 이 시나리오에서 단일 주제 분할 영역을 사용하고 모든 주제를 동일한 주제 분할로 보내는 경우 일관성을 제공하지만 메시지를 빨리 소비 할 수는 없습니다. 동일한 주제 파티션에서 메시지를 하나씩 가져오고 이전 메시지가 소비되면 다음 메시지를 받게됩니다. 여기서 처리량을 늘리려면 여러 주제를 사용하거나 주제를 파티션으로 나눌 수 있습니다. 이 두 가지 솔루션 모두 일관성을 제공하기 위해 생산자 측에서 일부 로직을 구현해야합니다. 관련 메시지를 동일한 주제 파티션으로 보내야합니다. 예를 들어, 주제를 다른 엔티티 유형의 수로 분할하고 동일한 엔티티 유형 crud 조작의 메시지를 동일한 파티션으로 보낼 수 있습니다. 시나리오에서 일관성을 보장하는지 여부는 알 수 없지만 대안이 될 수 있습니다. 여러 주제 또는 주제 파티션과의 일관성을 제공하는 논리를 찾아야합니다. 그것은 당신의 사건에 달려 있습니다. 논리를 찾을 수 있으면 일관성과 처리량을 둘 다 제공합니다.

귀하의 경우, 여러 파티션이있는 단일 주제를 사용하고 생산자 측에서 동일한 주제 파티션에 관련 메시지를 보냅니다.

--regards