Kafka Streams는 프로듀서가 토픽으로 이벤트를 보내면, 해당 토픽을 구독하여 데이터를 실시간으로 읽고, 처리(가공/집계/강화)한 후, 변환된 데이터를 다른 토픽으로 다시 쓰는 '읽기-처리-쓰기'의 기본 흐름을 따른다. 🔄
실시간 사기 탐지 시스템은 Kafka Streams의 핵심 활용 사례 중 하나로, 특정 임계값(예: 10,000)을 초과하는 거래를 필터링하여 의심스러운 거래로 분류하고 경고를 발생시키는 데 사용될 수 있다. 🚨
Spring Boot와 Kafka Streams를 통합하여 애플리케이션을 구축할 수 있으며, 필요한 의존성으로는 spring-boot-starter-web, lombok, spring-kafka, spring-kafka-streams가 있다. 🛠️
Kafka Streams 애플리케이션은 application.id 설정과 기본 직렬화/역직렬화(예: StringSerializer) 구성을 통해 초기화되며, 향후 사용자 정의 직렬화/역직렬화도 지원한다. ⚙️
사기 탐지 로직은 StreamsBuilder를 사용하여 입력 토픽(transactions)에서 데이터를 읽고, filter 연산을 통해 특정 조건(예: 거래 금액 > 10,000)을 만족하는 이벤트를 걸러낸 후, 이를 출력 토픽(fraud-alerts)으로 다시 쓰는 방식으로 구현된다. 💸
ObjectMapper를 활용하여 Kafka 메시지(JSON 문자열)를 객체로 변환하고, 객체의 속성(예: amount)을 기반으로 필터링 조건을 적용하는 것이 일반적인 처리 방식이다. 📊
Kafka Streams는 단순한 '읽기-쓰기'를 넘어, 상태 저장(stateful), 확장성(scalable), 내결함성(fault-tolerant) 스트리밍 애플리케이션 구축 시 복잡성을 크게 줄여주는 강력한 기능을 제공하며, 이는 일반 Kafka Consumer로는 구현하기 어려운 부분이다. ✨
데모에서는 50개의 거래 이벤트 중 18개가 사기성 거래로 탐지되어 fraud-alerts 토픽으로 성공적으로 전송되었으며, 이는 Kafka Streams가 실시간 데이터 필터링을 효과적으로 수행함을 보여준다. ✅
Kafka Streams는 내부적으로 RocksDB를 사용하여 상태를 유지하며, 애플리케이션 시작 시 "rebalancing to running"과 같은 상태 전환을 통해 내부 동작을 확인할 수 있다. 🗄️
NewTopic 빈을 사용하여 Spring Boot 애플리케이션 내에서 Kafka 토픽을 프로그래밍 방식으로 생성할 수 있어, 수동 토픽 생성의 번거로움을 줄여준다. ➕