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

이화평님의 프로필 이미지
이화평

작성한 질문수

카프카 완벽 가이드 - 코어편

Consumer에서 여러 개의 Topic 읽기

하나의 컨슈머가 서로 다른 토픽을 subscribe하면

작성

·

525

0

강의 예시로 들어주신 것 처럼

하나의 컨슈머가 서로 다른 토픽을 subscribe해서 서로 다른 메시지를 취합(?)해서 새로운 데이터를 생성하여 DB에 적재하거나 다른 토픽으로 전송하신다고 하셨는데요.

A 토픽에 들어오는 메시지와 B 토픽에 들어오는 메시지의 짝(?)을 어떻게 맞출 수 있나요...?

예시처럼 A 토픽에서 poll한 메시지의 order-id 는 1인데, B토픽에서 poll한 메시지의 order-id는 2인 경우에는 취합할 수 없는 데이터이기 때문에, B토픽에서 poll하는 메시지의 order-id가 1이 나올 때까지 어떠한 조치를 취해야 하지 않을까라는 생각이 들었습니다.

답변 2

0

To concatenate messages of different topics, you need to find a common attribute or identifier that can be used to match the messages. In the example you above, if messages from topics A and B are related to the same order, you can use the order ID as a common attribute.
sonic exe

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

카프카 Consumer가 여러개의 Topic을 읽을 때는 개별 Topic에 순차적으로 들어오는 메시지를 읽기 때문에 말씀하신 방법으로 짝을 맞출 수는 없습니다.

카프카는 대용량 메시지를 처리하기 위해 설계되었고, 이를 위해 기본적으로 비동기로 메시지 처리를 합니다. 그리고 Consumer가 메시지를 처리하는 순서는 Topic에 쌓여있는 메시지의 순서, 즉 offset 순으로 메시지를 처리합니다.

따라서 서로 다른 Topic 이지만 하나의 테이블 또는 여러 다른 테이블이더라도 order id 의 순서가 시간적으로 정확히 동기화가 맞춰져서 DB에 입력되고, DB가 이를 업무적으로 반영해야 한다면 하나의 Topic에서만 순차적으로 해당 메시지들이 시간 순서대로 입력되어야 합니다.

물론 2개의 개별 topic에 order id 순서대로 각각 잘 쪼개져서 들어간다면 기본적으로는 순차적으로 DB의 각 테이블에 입력될 수는 있지만 이를 100% 보장할 수는 없습니다.

감사합니다.

이화평님의 프로필 이미지
이화평

작성한 질문수

질문하기