티스토리 뷰
요즘에 이벤트소싱이라는 개발 방법을 채택한 프로젝트를 진행하고 있는데,
다음과 같은 공통의 문제 패턴을 툴마다 비슷하게, 그리고 조금씩 다르게 해결하고 있는 모습이 눈에 띄는 것이 아닌가!!
(그리고 또, 작년에 만들었던 job dispatcher도 결국은 이런거였구나.. 라는게 이제야 좀 눈에 들어왔다)
하나의 스트림을 여러 인스턴스로 (중복되지 않게, 그러나 처리되지 않는 것도 없게) 잘~ 분배하는 법.
(심화 미션: 런타임에 인스턴스 개수가 줄거나 늘어날 수 있답니다.)
kafka | kinesis (KCL library) |
axon TEP (tracking event processor) |
|
topic | stream | event stream (event store) | 처리해야하는 스트림 |
partition | shard | segment | 스트림 subset |
파티션 개수는 늘릴 수 만 있는 걸로 앎.. | resharding | split & merge | 런타임 segment 개수 조정 |
offset | sequenceNumber | timestamp | 어디까지 처리했는지 체크 |
consumer group | appName | processing group | consumer group 일반적으로 중복 처리 x |
consumer | KCL worker | node (axon host) | 컨슈머 어플리케이션 인스턴스 하나 (pod 1) |
consumer 보통은 하나의 consumer 스레드가 하나의 스레드로 운영. parrallel-consumer라는 라이브러리 사용해서 multi-threading |
record processor | thread | 스트림 subset 중 하나 처리하는 worker |
heartbeat / re-join (뒤의 두개와 좀 개념이 다름) |
lease | claiming token | |
rebalancing | 할당 재조정 | ||
__consumer_offsets 라는 내부 토픽 | dynamodb leaseTable | token store | 메타데이터 저장소 |
'시리즈 > Stream Processing' 카테고리의 다른 글
Kinesis Lease (1) | 2023.11.19 |
---|---|
kafka rebalancing (1) | 2023.11.19 |
mysql 쿼리 처리 방식 - 스트리밍 vs 버퍼링 (0) | 2022.12.10 |
iterable, iterator 그리고 generator (0) | 2022.08.08 |
iterator 패턴 (0) | 2022.07.31 |
댓글
공지사항
최근에 올라온 글