들어가기 전 이 글은 카프카 스트림즈와 ksqlDB 정복 Chapter6을 보고 공부하며 정리한 글입니다. 6. 고급 상태 관리 State Store를 처음에 쓸 때는 아주 편리하다 생각한다. 그렇지만 어플리케이션의 규모가 커져서 유지보수를 반복 수행할수록 Stateful 스트림 어플리케이션을 안정적인 운영에는 State Store 내부 동작에 대한 깊은 이해가 필요하다. 이 글을 통해서 State Store에 대해 보다 깊게 이해할 수 있게 될 것이다. 이 장에서는 아래 내용을 공부한다. 영구적인 저장소는 디스크에 어떻게 표현되는가? Stateful한 어플리케이션의 Fault Tolerance는 어떻게 구현되는가? StateStore는 어떻게 설정하는가? Stateful 어플리케이션에 가장 큰 영향을 ..
들어가기 전 이 글은 Kafka Streams와 KsqlDB 정복 5장을 공부하며 작성한 글입니다. 5.0 카프카 스트림즈에서 시간의 의미 카프카 스트림즈에는 세 종류의 시간이 존재한다. Window Join, Window 집계처럼 시간 기반의 연산을 할 때 각각의 시간이 어떤 의미를 가지는지를 이해하고 사용하는 것이 매우 중요하다. 어떤 시간 종류가 있고 각 시간은 어떤 의미를 가질까? Event Time Event Time은 Producer에서 이벤트가 생성된 시간을 의미한다. Event Time은 ProducerRecord의 timestamp에 포함될 수 있다. Event Time은 ProducerRecord의 Payload의 특정 필드에 포함될 수 있다. Ingestion Time (Log App..
들어가기 전 이 글은 KafkaStreams와 KsqlDB 완전 정복의 4장을 공부하며 작성한 글입니다. 4.0 상태가 있는 처리 3장에서는 Stateless한 스트림을 처리하는 방법에 대해서 공부를 했다. 이 때는 이벤트가 발생했다는 '사실'만이 흘러가는 것을 단편적으로 처리하는 형태였다. 하지만 Kafka Streams는 소비되는 이벤트 정보를 기억해서 새로운 문맥을 파악하는 기능을 제공한다. 이벤트 정보를 기억하기 때문에 이런 종류의 Kafka Streams를 'Stateful'하다고 한다. 4.1 상태가 있는 처리의 이점 이벤트가 무한히 흐르는 Stateless Stream에서 특정 시점의 정보를 기억해서 특정 시점(point-in-time)의 정보를 표현할 수 있다. 특정 시점의 정보를 기억하기..
들어가기 전 이 글은 카프카 스트림즈와 ksqlDB 정복의 3장을 공부하며 작성한 글입니다. 3.0 상태가 없는 처리(Stateless Process) 스트림 처리의 가장 단순한 형태는 이전에 처리했던 메세지가 어떤 녀석이었는지를 기억도 하지 않는 것이다. 이 형태의 스트림 처리를 Stateless Process라고 한다. 이번 포스팅에서는 Stateless Process들을 이용해서 Stateless한 Kafka Streams Instance를 생성해보려고 한다. Kafka Streams는 아래 Stateless Processor를 제공한다. 레코드 필터링(filter) 필드 추가 및 삭제 레코드의 키 변경(rekeying) 스트림 가지치기(branching) 스트림 병합(merging) 레코드의 보강..
들어가기 전 이 글은 Kafka Streams와 ksqlDB 정복 책을 공부하며 작성한 글입니다. 카프카 스트림즈를 이용한 데이터 처리 카프카는 많은 데이터를 보관하고 있는 녀석이다. 카프카에 저장되어있는 데이터를 이용해서 뭔가를 하려고 했다면 그동안은 카프카 Consumer를 이용해서 데이터를 불러와서 일련의 데이터 핸들링을 진행했다. 그렇지만 이런 부분은 매번 반복되는 부분도 존재했었고 구현의 복잡함도 존재했다. 이런 부분을 해결하기 위해서 카프카 스트림즈가 개발되었다. 카프카 스트림즈는 다음 위치에서 역할을 가지고 처리한다. 카프카 스트림즈는 복잡한 데이터 핸들링의 처리와 반복되는 부분을 DSL과 Processor API로 추상화를 해주었다. 이 기능들은 일반 Java 개발자들이 이해하기 편리하므로..