여러 컨슈머가 동일 토픽에서 메시지를 읽을 때 사용하는 주요 패턴은 다음 2가지이다.
<로드 밸런싱(load balancing)>
각 메시지는 여러 컨슈머 중 특정 컨슈머에 전달된다. 따라서 컨슈머들(컨슈머 그룹)은 해당 토픽의 메시지를 처리하는 작업을 공유한다. 브로커는 메시지를 전달할 컨슈머를 임의로 지정한다. 이 패턴은 메시지를 처리하는 비용이 비싸서 처리를 병렬화하기 위해 컨슈머를 추가하고 싶을 때 유용하다. 또한 컨슈머가 죽으면 관련 컨슈머 그룹에서 나머지 실시간 컨슈머에게 나누어진다.
IBM 문서에 친절히 설명되어 있다.
AMQP는 같은 큐를 소비하는 클라이언트를 여러 개 둬서 로드 밸런싱을 구현할 수 있다. JMS에서는 이 방식을 shared subscription이라 한다. 카프카에서는 load share라고 한다.
<팬 아웃(fan out)>
각 메시지가 모든 컨슈머에 전달된다. 컨슈머가 브로드캐스팅된 동일한 메시지를 서로 간섭없이 들을 수 있다.
JMS에서는 토픽 구독, AMQP에서는 바인딩 교환이라는 용어를 사용한다. 카프카에서는 팬 아웃이라고 한다.
카프카의 경우, 컨슘될 때 카프카에서 메시지가 제거되지 않아서 소비자를 여럿 추가 할 수 있고 각 컨슈머는 자체 메시지 오프셋을 유지 관리할 수 있습니다. 물론 컨슈머는 서로 다른 컨슈머 그룹에 있어야 한다.
이 두 패턴은 함께 사용할 수 있다.
'scribbling' 카테고리의 다른 글
구글 논문 - 코드 저장소는 단일화(monolithic)가 좋더라.. (0) | 2019.03.06 |
---|---|
CDC 소개 및 적용하기 위한 관련 자료 링크 모음 (0) | 2019.03.02 |
일반적인 파티션이 DB와 Nosql에서 사용되는 용어 확인하기 (0) | 2019.02.27 |
펌 김창준씨의 함께 자라기(애자일로 가는 길) - Aristotle Project (0) | 2019.02.27 |
ssh agent forwarding + sudo (0) | 2019.02.25 |