시리즈/Stream Processing
이벤트 스트림 parallel processing (kafka, kinesis, axon)
빅또리
2023. 11. 19. 17:40
요즘에 이벤트소싱이라는 개발 방법을 채택한 프로젝트를 진행하고 있는데,
다음과 같은 공통의 문제 패턴을 툴마다 비슷하게, 그리고 조금씩 다르게 해결하고 있는 모습이 눈에 띄는 것이 아닌가!!
(그리고 또, 작년에 만들었던 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 | 메타데이터 저장소 |