이 글은 Kafka Streams In Action을 보고 공부하며 정리한 글입니다. 7. 모니터링과 성능 Kafka Streams의 모니터링 Kafka Stremas의 성능 Kafka Streams의 수집한 메트릭 관찰 Kafka Streams의 토폴로지를 보여주는 기술 이번 글에서는 다음을 알아보려고 한다. 7.1 기본적인 카프카 모니터링 Kafka Streams는 카프카 컨슈머와 프로듀서를 사용한다. 따라서 카프카 컨슈머와 프로듀서 모니터링을 하는 방법에 대해서 알아본다. 7.1.1 컨슈머와 프로듀서 성능 측정 프로듀서는 메세지를 공급하는 주체이다. 따라서 프로듀서의 성능은 '얼마나 빨리 메세지를 공급하는지'로 결정된다. 컨슈머는 메세지를 소비하는 주체인데 'Consumer Lag'으로 컨슈머의 성..
이 글은 Kafka Streams in action 6장을 공부하며 작성한 글입니다. 6.1 더 높은 수준의 추상화와 더 많은 제어 사이의 트레이드 오프 카프카 스트림즈 DSL을 이용하면 손 쉬운 방법으로 레코드를 처리해서 전달할 수 있다. 대부분의 경우에 카프카 스트림즈 DSL을 유용하게 사용할 수 있지만, 카프카 스트림즈 DSL로 구현을 할 수 없는 경우가 있다. 이런 경우에는 카프카 스트림즈의 Processor API를 사용하면 된다. 카프카 스트림즈 Processor API는 Java 코드를 이용해서 개발자가 직접 구현을 해야하기 때문에 구현 난이도는 올라가지만 그만큼 다양한 기능을 개발할 수 있다. 카프카 스트림즈의 Processor API는 다음과 같은 경우에 사용하면 좋다고 한다. 일정한 간..
Punctuator Kafka Streams에서는 Punctuator를 이용해서 레코드의 downstream 전달 시점을 제어할 수 있다. punctuator는 Commit() / Flush()와는 별개로 동작하고, 이 녀석들을 사용하지 않고도 레코드의 downstream 전달 시점을 제어할 수 있다. punctuator는 각 StreamTask가 가지고 있는 ProcessorContext의 schedule() 메서드를 호출해서 예약할 수 있다. 일단 예약되면, Stream Thread의 process() 처리 이후에 punctuator를 호출해서 레코드에 대한 일정 부분의 작업을 할 수 있다. Punctuator의 설정 PunctuationType.WALL_CLOCK_TIME : WALL_CLOCK_T..
StandBy Task Kafka Streams의 Task들은 토폴로지를 시작하기 전에 StateStore를 복구한다. Stream Thread의 모든 Task들의 StateStore가 복구된 이후 Topology가 실행된다. 이런 이유 때문에 StateStore의 복구 시간이 중요할 수 있다. StateStore의 복구 시간을 단축하는데 도움이 되는 것이 Standby Task다. StandbyTask는 Stream Task가 죽었을 때 빠르게 복구할 수 있도록 항상 스탠바이 하도록 노력해주는 Task다. 예를 들어 Task1에 대해서 StandbyTask가 존재한다면, Task1이 죽었을 때 StandbyTask가 어느정도 생성해 둔 StateStore를 사용해서 복구 작업을 보다 빠르게 할 수 있다..
State의 복구와 ChangeLog Kafka Streams는 집계 등이 필요한 경우에는 StateStore를 이용해서 상태를 기억하는 작업을 한다. StateStore는 In-Memory 혹은 Local 스토리지에 기록되는데 공통적인 부분은 서버가 죽었을 때, 모두 휘발된다는 점이다. Kafka Streams는 이 부분을 해결하기 위해 StateStore를 기록하는 ChangeLog 토픽을 Kafka Broker에 생성하는 작업을 한다. 그리고 StateStore의 변경점을 ChangeLog에 저장하고, 서버가 불시에 죽고 재기동될 때 ChangeLog 토픽에서 값을 읽어와서 StateStore를 복구하는 작업을 한다. ChangeLog에서 State는 어떤 경로로 불러와지는가? 각 노드의 State..