issues
search
hyoseok0
/
tech-interview
기술 면접 질문 예시
0
stars
0
forks
source link
[kafka] consumer 내에서 최신 event 체크를 해야 하는 경우가 있습니다. 이유에 대해 설명해보세요.
#8
Open
hyoseok0
opened
2 years ago
hyoseok0
commented
2 years ago
kafka 관련 문서
를 보면, kafka consumer application 에서 최신 event 체크가 불필요한 것처럼 얘기합니다.
event 가 발생한 순서대로 consumer 가 event 를 수신하기 때문
이를 보장하므로, producer 서버 (broker 서버)를 늘려도 괜찮다고 합니다. (scalability 보장)
상세
kafka 는
event
streaming 시스템
event
는
key
,
value
,
timestamp
로 구성
발생한 event 는
topic
이라는 곳에 저장
file system 에 비유하면, event 는 file 이고, topic 은 directory
topic
내 event 들은 복수개의 broker(storage layer) 의 partition 에 배분 ("Topics are partitioned")
같은 key 를 가진 event 들은 동일한 partition 에 배분
특정 partition 은 1개의 consumer 와만 연결
같은 key 의 event 들은 partition 에 event 가 배분된 순서대로 consumer 가 메시지 수신
ChannelProduct message 에 적용해보자면
ChannelProduct 변경 event key 는 상품번호입니다. (스스 전시 확인)
특정 상품의 변경 event 는 모두 key 가 같으므로, 같은 partition 에 배분
특정 상품의 변경 event들은 partition 에 배분된 순서대로 consumer 가 메시지 수신
event 발생 순서대로 partition 에 배분 시, version 체크 로직은 불필요
합니다.
그런데 왜 최신 event 체크를 할까?
DB timeout 등 일시적인 환경 문제로 메시지가 DLQ (Dead Letter Queue) 에 저장되었다가 재처리된 경우, event 발생 순서와 다르게 처리될 수 있기 때문에 최신 event 여부 체크가 필요합니다.
consumer group 내 instance 가 늘어나서, rebalance 발생 (instance 가 줄어든 것은 해당 안됨)
hyoseok0
commented
2 years ago
참고
https://kafka.apache.org/documentation/#intro_concepts_and_terms
event
streaming 시스템event
는key
,value
,timestamp
로 구성topic
이라는 곳에 저장topic
내 event 들은 복수개의 broker(storage layer) 의 partition 에 배분 ("Topics are partitioned")