• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    미해결

kafka streams 데이터 보관 주기 질문

23.04.04 21:40 작성 23.04.04 21:41 수정 조회수 340

0

안녕하세요

카프카 스트림즈 학습중에 궁금한 점이 있어 질문드립니다.

예를 들어 말씀드리겠습니다

kstream 으로 변경되는 상품의 가격 정보를 받아온다고 가정하고, ktable 로 해당 상품의 마스터성 정보를 받는다고 해보겠습니다.

카프카 스트림즈를 써도 결국엔 카프카 브로커에 로그로 쌓이는 것이고, 로그 압축이나 삭제 정책에 따라 A라는 상품의 정보가 있다가 사라질 수 있을 것 같은데요

4월 1일에는 A상품의 정보(상품이름, 판매처 등)가 로그에 있어서 데이터를 읽어올수 있었지만 4월4일에는 기간이 지나 삭제되었다거나 하는 경우가 있을 것 같아서요

카프카 스트림즈를 띄우는 서버의 메모리나 로컬 디스크에 모든 내용을 가지고 있는 건지가 궁금하구요

만약 해당 서버에 데이터가 있다면 서버가 다운되거나 했을때 리밸런싱 혹은 서버가 재시작 되었을때 사라진 로컬데이터의 복구 기능이 구현되어있는 건지 궁금합니다

또한 로컬에 저장된다면 그동안 스트림을 거쳐간 모든 데이터를 가지고 있는건지.. 데이터가 대용량이 된다면 로컬 머신의 저장공간을 고려해야하는지 궁금합니다

 

그리고.. 만약 카프카 스트림엔 데이터가 없고 rdb등의 저장소에 데이터가 있다면 이걸 가져와서 쓸수 있는지도 궁금합니다

 

답변 1

답변을 작성해보세요.

1

안녕하세요! 문의주신 내용에 대해 답변드립니다.

1) KTable로 상품 정보를 가지고 있을 때 스트림즈를 띄우는 서버의 메모리나 로컬 디스크에 모든 내용을 가지고 있는지?

맞습니다. 특정 토픽에 상품 정보를 담았고, 카프카 스트림즈를 통해 KTable로 해당 토픽을 가져올 경우 rocksdb를 통해 로컬 디스크(기본 설정)에 데이터를 가지고 있습니다.

2) 서버가 다운되었거나 리밸런싱 되었을 때 로컬 데이터의 복구 기능이 있는지?

KTable로 토픽을 선언할 경우 서버 재시작시, 리밸런싱 시 재할당된 해당 파티션에 대해 구체화된 뷰(materialized view) 형태로 데이터를 다시 구축합니다. 그러므로 리밸런싱 이후에 다시 데이터를 활용하실 수 있습니다.

3) 스트림을 거쳐간 모든 데이터를 가지고 있는지?

기본적으로 KTable은 offset을 항상 earliest로 가져와서 구체화된 뷰를 만들기 때문에 토픽에 존재하는 모든 데이터에 대해 존재한다고 볼 수 있습니다. 토픽 만료정책(compact or delete)에 의해 삭제된 데이터는 복구할 수 없습니다.

4) 대용량 데이터를 다룰 경우 로컬 머신의 저장 공간 고려해야하는지?

대용량 데이터를 다룰 경우 로컬 머신의 저장 공간 고려해야만 합니다.

5) 스트림즈를 통해 데이터가 없을 경우 RDB에서 가져와서 사용할 수 있는지?

말씀하신 로직을 개발하신다면 문제없이 사용하실 수 있습니다!

SC님의 프로필

SC

질문자

2023.04.11

답변 감사드립니다

혹시 5번에서 말씀하신 것과 같이 사용하는 사례도 많을까요? 외부저장소를 같이 사용하는 예를 찾아보기가 힘든 것 같아서요 ~

5번과 같은 로직은 비즈니스 로직에 가깝기 때문에 특별히 해당 내용에 대해 작성된 글이 없을것 같습니다. 만약에 찾게 되면 공유드리겠습니다.

SC님의 프로필

SC

질문자

2023.04.12

친절한 답변 감사드립니다 ^^