인프런 커뮤니티 질문&답변

GSP님의 프로필 이미지
GSP

작성한 질문수

[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!

멀티스레드 컨슈머 애플리케이션

'멀티스레드 컨슈머 애플리케이션' 편을 보고 질문드립니다~

작성

·

488

0

안녕하세요 데브원영님. 수준높은 강의 항상 잘보고있습니다.

다름아니라, '멀티스레드 컨슈머 애플리케이션' 강의를 듣고 관련 내용을 찾아보던 와중에 '메세지 역전현상' 이라는 이슈를 찾았습니다.

멀티 스레드 혹은 멀티 프로세스로 동작할경우,

파티션이 하나더라도 스레드의 작업종료 시간이 전부 다르기때문에 순서보장이 필요한 시스템에 치명적이라는 내용이였습니다.

이 문제를 해결하기 위해 메세지에 key와 partioner 인터페이스를 구현하더라도 파티션 수와 스레드 수가 1:1 매칭이 아닐 경우 순서가 틀어지거나, Key 설계를 잘못할 경우 특정파티션으로 데이터가 몰리게되어 scale-out을 한 의미가 퇴색 될 것 같아서요.

'순서보장 + (다중 파티션 + 다중 컨슈머 설계로 성능확보)' 가 필요한 시스템에서 '메세지 역전현상' 문제를 해결 할수 있는 방법이 있을까요?.. 발행된 메세지가 DB에 적재되있을 경우, 최종 일관성(순서보장문제)을 DB에 조회하여 해결할 수 있을 것 같은데요!.. 저장소에 적재되지 않는 메세지일 경우 해당문제를 어떻게 풀어야될지 잘 모르겠네요 ...

관련하여 답변 부탁드리겠습니다!.. 확인 감사합니다.~

답변 1

2

데브원영 DVWY님의 프로필 이미지
데브원영 DVWY
지식공유자

안녕하세요!

파티션이 한개라고 하더라도 프로듀서가 멀티 스레드/멀티 프로세스로 운영되면 실제로 생성된 시간과 무관하게 파티션에 들어가는 레코드는 시간 역전현상이 발생할 수 있습니다.

왜냐면 프로듀서의 기본 동작 특성상 네트워크 통신을 수행하는동안 데이터의 전송이 다른 프로듀서에 비해 지연될 수 있기 때문입니다. 이러한 동작은 레코드에 메시지 키를 지정하든 지정하지 않든 동일하다고 볼 수 있습니다.

그렇기 때문에 순서보장이 엄격하게 되어야 한다면 카프카 스트림즈 등 스트림 프로세싱 라이브러리/프레임워크에서 윈도우(window)기능을 사용하시는 것이 가장 좋아 보입니다. 윈도우 처리라는 것은 일정 시간동안 지연하여 데이터를 종합해서 처리하는 방법을 뜻합니다. 자세한 윈도우 처리에 대한 내용은 아래 링크를 참고하시면 좋을것 같네요~!

GSP님의 프로필 이미지
GSP
질문자

답변 감사합니다 :)

GSP님의 프로필 이미지
GSP

작성한 질문수

질문하기