카프카 스트림즈에 대해서 질문이 있습니다.
804
작성한 질문수 12
KTable이 로컬 기반의 rocksDB에 기록된 데이터를 가져다 쓴다는 설명을 듣고 궁금증이 생깁니다.
카프카 스트림을 docker기반 컨테이너로 배포한다 치면 그때마다 rocksDB는 초기화 될 것으로 생각되는데요..
그렇다면 조인시에 데이터가 없어서 의도한 동작이 이루어지지 않을 수 있겠다는 생각이 드는데 맞는지요?
마찬가지로 windowing 프로세스도 집계중에 컨테이너가 갈아쳐지면 집계중이던 데이터는 소실될 수 있어보이는데 맞는지 모르겠습니다.
실무에서는 보통 카프카 스트림즈를 어떻게 쓰는지가 궁금합니다. rocksDB를 따로 두어서 모든 스트림이 공유하도록 설정하거나 컨테이너 배포는 사용하지 않는지.. 아니면 EC2같은곳에 배포해서 로컬 DB데이터를 훼손시키지 않도록 하는지 같은것이요.
감사합니다.
답변 2
2
카프카 스트림즈의 KTable의 경우 토픽의 모든 데이터를 Materiazlied View로 만들어서 사용됩니다. 그렇기 때문에 카프카 스트림즈를 기동할 때 local에 저장된 rocksDB가 존재하지 않을 경우 해당 토픽의 전체 레코드를 가져와서 새로 View를 만들게 됩니다. 그렇기 때문에 스트림즈를 사용할 때 항상 rocksDB의 상태가 stateful하게 있어야만 하는 것은 아닙니다.
반면, 말씀하신바와 같이 window 프로세싱에서 중간집계 결과가 유실되면 데이터 처리에 이슈가 발생할 가능성이 있는데 이런 경우에는 보통 k8s에서 statefulSet + pvc storage 같이 상태를 보존하고 애플리케이션을 운영할 수 있는 도구를 함께 사용하기도 합니다.
1
안녕하세요, 인프런 AI 인턴입니다.
김대호님, 카프카 스트림즈의 KTable과 관련한 질문에 답변 드리겠습니다.
Kafka Streams의 KTable은 실제로 로컬 상태 저장소, 예를 들어 RocksDB와 같은 내장 데이터베이스를 사용하여 상태를 유지합니다. 컨테이너 환경에서 Kafka Streams를 운영할 경우에는 볼륨(Volume)을 사용하여 로컬 저장소의 내용을 영속화할 수 있습니다. 이는 컨테이너가 재시작되거나 재배포될 때 RocksDB에서의 데이터를 유지하기 위한 일반적인 방법 중 하나입니다.
Kafka Streams 애플리케이션의 상태는 일반적으로 ‘state.dir’ 구성 옵션을 통해 관리되며, 컨테이너가 재시작될 경우 이를 마운트하여 이전 상태를 복원할 수 있습니다. 따라서, 올바른 볼륨 구성을 통해 조인이나 윈도잉 등의 작업 시 필요한 상태 데이터를 유실 없이 관리할 수 있습니다.
실무에서 Kafka Streams를 사용할 때는 데이터 유실 방지를 위해 주의 깊은 볼륨 및 데이터 관리 전략이 필요합니다. 또한, 스트림즈 애플리케이션을 여러 인스턴스로 구성하여 병렬 처리를 하면서도 각 인스턴스의 상태를 동기화할 수 있도록 설계하는 것이 중요합니다.
RocksDB 외에도 상태 저장에 다른 옵션을 사용할 수 있으며, 이는 경우에 따라 조정될 수 있습니다. EC2와 같은 VM을 사용할 때도 상태 저장소의 무결성을 보장하기 위한 방법을 적용할 수 있습니다.
자세한 내용은 카프카 스트림즈 문서의 Kafka Streams 섹션을 참고하시는 것을 추천드립니다.
도움이 되셨기를 바랍니다.
consume 이후 lag가 줄어들지 않음
0
75
2
안녕하세요. 강의의 카프카 버전과 현재 시점의 카프카의 차이점 문의 드립니다.
0
117
2
멱등성 프로듀서 retries 관련 질문입니다.
0
99
2
채팅 서비스 개발 시 주의점이 있을까요?
0
100
2
충분히 큰 파티션 생성시 궁금증이 존재합니다.
0
87
2
KTable 키가 없는 레코드 처리
0
73
2
컨슈머 테스트 코드 작성
0
94
2
리밸런스 onPartitionRevoked이 필요한 상황
0
74
2
카프카 클러스터에서 감당 가능한 파티션(레플리카) 수 문의
0
120
2
reset offset 질문
0
77
2
KStreamJoinKTable 실행시 오류
0
78
2
auto.commit.interval.ms 옵션 관련 질문 드립니다.
0
142
2
파티션, 컨슈머 그룹, 컨슈머 관련 질문
0
117
1
java, kotlin
0
130
2
shutdownThread 에 대한 문의 입니다.
0
155
2
zookeeper실행시 오류가 발생합니다.
0
270
2
커스텀 소스 커넥터에서 Thread.sleep (1000) 은 왜 하는거에요?
0
153
2
처리량을 늘리기 위해서 파티션을 늘리고 컨슈머를 늘려야한다고 설명하셨는데요
0
180
3
파티션 개수와 컨슈머 개수의 처리량 관련 질문
0
164
2
동영상 및 이미지 처리 관련 문의 드립니다.
0
226
2
주키퍼 없이 사용 문의 드립니다.
0
303
1
kafka 를 띄우니 오류가 발생하고 종료합니다.
0
281
3
zookeeper 실행시 오류 .. 무엇을 해야 할까요?
0
220
2
파티션 추가로 해결할 수 있지만 늘어난 파티션은 줄일 수 없지 않나요?
0
192
2





