• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    미해결

RocksDB에서 StateStore로 읽어온 값은 메모리 상태에 저장될까요?

23.05.10 23:09 작성 조회수 336

0

안녕하세요, 철민님. 항상 좋은 강의 감사드립니다!

한 가지 질문 드리고 싶은 것이 있어 글을 작성합니다.

 

혹시 RocksDB에서 StateStore로 읽어온 데이터는 어디에 저장이 되어 있을까요? RocksDB는 로컬에 Key / Value 형식으로 데이터를 가지는 것으로 이해를 했는데, StateStore로 읽어오면 그 값은 메모리에 있을까요?

 

StateStore의 구현체가 RocksDB도 있고, In-Memory 같은 형태도 존재하고 있는데, 이렇게 구현체가 따로 있는 것으로 추정컨데 RocksDB를 이용한 StateStore는 값을 읽어와서 메모리에 따로 저장하지 않고, 필요할 때 마다 로컬 디스크에 있는 값을 바로바로 불러오는게 아닐까 싶은데...

 

어떤 형식으로 동작하는 것일까요...?

답변 2

·

답변을 작성해보세요.

0

아하, 철민님 항상 양질의 답변 감사드립니다! Kafka Streams에서 캐시 형태의 StateStore를 구현할 때, In Memory를 쓰기도 하는 것 같았는데.. 저도 정확하진 않네요!

"RocksDB에서 state 를 관리하되, 읽어들인 state는 메모리에 올라가고 변경된 state는 storage에 저장이 됩니다."

혹시 위 부분에 대해서 조금만 더 알려주실 수 있으실까요?
예를 들어 ctas로 만들어진 쿼리가 메세지를 토픽으로 전송할 때, RocksDB에서 state를 읽어와서 전송하는데 이 때의 state는 메모리에 저장된다는 말씀이실까요?

그리고 ctas의 처리 결과로 changeLog나 Repartition 토픽같이 내부에 저장되는 토픽들에 저장할 때는 메모리에 남겨둘 필요가 없으니, 바로 로컬 스토리지에 푸시해버리는 것이고...

 

맞을까요??

RocksDB는 일단 데이터를 메모리와 Storage에 같이 저장합니다. 해당 state 데이터가 변경되지 않았을 경우에는 메모리에 계속 있으며, 변경이 된 경우 메모리에도 저장되고 Storage에도 저장됩니다.

그러니까 Kafka 메시지가 계속 입력되고 특정 Primary key값으로 MView등이 계속 갱신되면 RocksDB는 메모리와 Storage에 계속 같이 저장되며, 해당 Primary key값으로 MView등의 갱신되지 않으면 메모리에서만 읽어 오면 됩니다.

0

안녕하십니까,

ksqlDB의 State store의 구현체가 in-memory 또는 persistent 가 있다고 하는데, persistent는 당연히 rocksdb이고, 이 in-memory 구현체의 실체가 애매모호 합니다.

이 in-memory state store는 Mastering Kafka Streams and ksqlDB 책에서 언급이 되었는데, 아마 제 생각엔 RocksDB를 도입하기 이전에(또는 ksqlDB 초창기에) JVM Heap 메모리 상에서 state store를 구현하려는 시도가 있었던걸로 아는데, 이걸 의미하는것 같기도 합니다(제가 잘못 알고 있는 걸 수도 있습니다 ^^)

하지만 지금은 ksqlDB의 state store는 RocksDB로만 생각하시면 될 것 같습니다.

그리고 ksqldb의 메모리의 상당 부분은 RocksDB가 사용합니다. RocksDB에서 state 를 관리하되, 읽어들인 state는 메모리에 올라가고 변경된 state는 storage에 저장이 됩니다.

감사합니다.