솔루션은 다음 세 부분으로 구성됩니다.
1. 샤딩된 채널은 복수의 샤드로 구성되며, 각 샤드는 채널처럼 작동합니다.
2. 송신자는 메시지 헤더에 샤드 키(보통 무작위 문자열 또는 바이트)를 지정합니다. 메시지 브로커는 메시지를 샤드 키별로 샤드/파티션에 배정합니다. 예를 들어 샤드 키 해시 값을 샤드 개수로 나눈 나머지를 계산해서 샤드를 선택하는 식입니다.
3. 메시징 브로커는 여러 수신자 인스턴스를 묶어 마치 동일한 논리 수신자처럼 취급합니다(아파치 카프카 용어로 컨슈머 그룹(consumer group)이라고 합니다). 메시지 브로커는 각 샤드를 하나의 수신자에 배정하고, 수신자가 시동/종료하면 샤드를 재배정합니다.
▲ 그림 3-11 샤딩된(파티셔닝된) 메시지 채널을 사용해서 메시지 순서가 유지된 상태로 컨슈머를 확장한다. 송신자는 메시지에 샤드 키를 넣고, 메시지 브로커는 이 키에 해당하는 샤드에 메시지를 쓴다. 메시지 브로커는 각 파티션을 복제된 수신자 인스턴스에 배정한다
그림 3-11에서 orderId가 각 주문 이벤트 메시지의 샤드 키입니다. 주문별 이벤트는 각각 동일한 샤드에 발행되고, 어느 한 컨슈머 인스턴스만 메시지를 읽기 때문에 메시지 처리 순서가 보장됩니다.