들어가기 전 이 글은 Kafka Streams와 ksqlDB 정복 책을 공부하며 작성한 글입니다. 카프카 스트림즈를 이용한 데이터 처리 카프카는 많은 데이터를 보관하고 있는 녀석이다. 카프카에 저장되어있는 데이터를 이용해서 뭔가를 하려고 했다면 그동안은 카프카 Consumer를 이용해서 데이터를 불러와서 일련의 데이터 핸들링을 진행했다. 그렇지만 이런 부분은 매번 반복되는 부분도 존재했었고 구현의 복잡함도 존재했다. 이런 부분을 해결하기 위해서 카프카 스트림즈가 개발되었다. 카프카 스트림즈는 다음 위치에서 역할을 가지고 처리한다. 카프카 스트림즈는 복잡한 데이터 핸들링의 처리와 반복되는 부분을 DSL과 Processor API로 추상화를 해주었다. 이 기능들은 일반 Java 개발자들이 이해하기 편리하므로..
들어가기 전 이 글은 Kafka Streams의 코드를 따라가며 작성한 글입니다. 틀린 내용을 발견하시면 댓글로 알려주시면 감사하겠습니다. 간단 정리 카프카 스트림즈 클러스터에 새로운 카프카 스트림즈 인스턴스가 들어오는 경우, 카프카 스트림즈 클러스터는 전체적으로 리밸런싱을 한다. 그런데 카프카 스트림즈는 일반적인 Kafka Consumer의 리밸런싱과는 조금은 다른 방식으로 동작한다. 왜냐하면 카프카 스트림즈에는 StreamTask라는 개념이 존재하기 때문이다. StreamTask는 각 토픽의 파티션 별로 나누어진 녀석들이고, 각 카프카 스트림즈가 어떤 StreamTask를 가지고 있느냐에 의존적으로 카프카 Consumer가 결정되어야 한다. 따라서 일반적인 카프카 Consumer와는 다른 방식으로 리..
들어가기 전 이 글은 개인적으로 Kafka Streams의 코드를 따라가면서 작성한 글입니다. 틀린 부분이 있을 수 있기 때문에 틀린 부분을 알려주시면 다시 한번 공부해서 수정해두겠습니다. pollPhase()의 전체적인 요약 카프카 스트림즈는 StreamThread가 모든 작업을 처리해주고 있다. StreamThread는 기본적으로 5개의 단계로 ETL을 한다. 아래 단계에서 확인할 수 있다. 파란색으로 표시해둔 부분은 반복해서 처리하는 부분이다. 이 글에서는 5개의 단계 중 pollPhase()에 대해서 알아보고자 한다. pollPhase() → initializedAndRestorePhase() → [ process() → taskManager.process() → taskManager.punctu..
들어가기 전 Kafka Streams에는 repartition() 메서드가 존재한다. 이 메서드가 어떤 역할을 하는지 확인하고자 한다. Kafka Streams의 Repartition의 의미 KStream repartition(); KStream repartition(final Repartitioned repartitioned); 카프카 스트림즈에는 repartition() 메서드가 존재하고, 이 메서드는 2가지 형태로 사용할 수 있다. 하나는 매개변수를 전달하지 않은 것이고, 하나는 매개변수를 전달해서 하는 것이다. 결론부터 정리하면 다음과 같다. repartition() : 이전 스트림과 동일한 형태로 리파티션한다. ChangeLog 토픽을 생성하고 새롭게 리파티셔닝 함. 이 때, 동일한 파티션 갯수..
들어가기 전 이 책은 Kafka Stremas in Action의 부록A~B를 공부하며 작성한 글입니다. 시작 시 리밸런싱 수 제한하기 (group.initial.rebalance.delay.ms) 카프카 스트림즈가 처음 기동될 때 카프카 스트림즈는 Consumer와 동일한 형태로 동작한다. 다음 동작으로 정리할 수 있다. 첫번째로 기동되는 카프카 스트림즈는 브로커의 Group Coordinator에서 모든 TopicPartition을 가져온다. 그리고 본인은 컨슈머 리더가 된다. 두번째로 기동되는 카프카 스트림즈는 브로커의 Group Coordinator에게 자신이 들어온 것을 알린다. 그리고 리밸런싱이 발생한다. 세번째로 기동되는 카프카 스트림즈는 브로커의 Group Coordinator에게 자신이 ..