Add kafka-streams module: fraud detection topology tested with TopologyTestDriver
Similarity scoring, a 5-minute windowed count that alerts once, and a KTable blocklist join, with the Spring wiring on Spring Boot 4.1.1 and Kafka Streams 4.2.1. Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01RjfyTgmERTWLqzafu34Cth
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
c1,4700.0,3,crypto score=1.0000
|
||||
c1,3000.0,2,electronics score=1.0000
|
||||
c1,45.0,18,grocery score=-0.1185
|
||||
c1,120.0,13,electronics score=0.1387
|
||||
c1,2500.0,14,crypto score=0.2136
|
||||
threshold: 0.98
|
||||
@@ -0,0 +1,2 @@
|
||||
alerts <- c1 SIMILAR:1.0000:c1,4700.0,3,crypto
|
||||
alerts emitted: 1
|
||||
@@ -0,0 +1,5 @@
|
||||
alerts <- c9 VELOCITY:4 in 5m
|
||||
alerts emitted for 6 transactions in 2 minutes: 1
|
||||
alerts after one more transaction 10 minutes later: 0
|
||||
state store window 2026-10-14T10:00:00Z count=6
|
||||
state store window 2026-10-14T10:10:00Z count=1
|
||||
@@ -0,0 +1,3 @@
|
||||
before blocking, alerts: 0
|
||||
alerts <- c5 BLOCKED:reported stolen
|
||||
after the tombstone, alerts: 0
|
||||
@@ -0,0 +1,39 @@
|
||||
Topologies:
|
||||
Sub-topology: 0
|
||||
Source: KSTREAM-SOURCE-0000000000 (topics: [transactions])
|
||||
--> KSTREAM-AGGREGATE-0000000005, KSTREAM-JOIN-0000000013, KSTREAM-MAPVALUES-0000000001
|
||||
Processor: KSTREAM-AGGREGATE-0000000005 (stores: [txn-count-5m])
|
||||
--> KTABLE-TOSTREAM-0000000006
|
||||
<-- KSTREAM-SOURCE-0000000000
|
||||
Processor: KSTREAM-MAPVALUES-0000000001 (stores: [])
|
||||
--> score
|
||||
<-- KSTREAM-SOURCE-0000000000
|
||||
Processor: KTABLE-TOSTREAM-0000000006 (stores: [])
|
||||
--> KSTREAM-FILTER-0000000007
|
||||
<-- KSTREAM-AGGREGATE-0000000005
|
||||
Processor: KSTREAM-FILTER-0000000007 (stores: [])
|
||||
--> KSTREAM-MAP-0000000008
|
||||
<-- KTABLE-TOSTREAM-0000000006
|
||||
Processor: score (stores: [])
|
||||
--> KSTREAM-FILTER-0000000003
|
||||
<-- KSTREAM-MAPVALUES-0000000001
|
||||
Processor: KSTREAM-FILTER-0000000003 (stores: [])
|
||||
--> KSTREAM-SINK-0000000004
|
||||
<-- score
|
||||
Processor: KSTREAM-JOIN-0000000013 (stores: [blocked-cards-STATE-STORE-0000000010])
|
||||
--> KSTREAM-SINK-0000000014
|
||||
<-- KSTREAM-SOURCE-0000000000
|
||||
Processor: KSTREAM-MAP-0000000008 (stores: [])
|
||||
--> KSTREAM-SINK-0000000009
|
||||
<-- KSTREAM-FILTER-0000000007
|
||||
Source: KSTREAM-SOURCE-0000000011 (topics: [blocked-cards])
|
||||
--> KTABLE-SOURCE-0000000012
|
||||
Sink: KSTREAM-SINK-0000000004 (topic: alerts)
|
||||
<-- KSTREAM-FILTER-0000000003
|
||||
Sink: KSTREAM-SINK-0000000009 (topic: alerts)
|
||||
<-- KSTREAM-MAP-0000000008
|
||||
Sink: KSTREAM-SINK-0000000014 (topic: alerts)
|
||||
<-- KSTREAM-JOIN-0000000013
|
||||
Processor: KTABLE-SOURCE-0000000012 (stores: [blocked-cards-STATE-STORE-0000000010])
|
||||
--> none
|
||||
<-- KSTREAM-SOURCE-0000000011
|
||||
@@ -0,0 +1,3 @@
|
||||
StreamsBuilderFactoryBean present: true
|
||||
auto-startup: false
|
||||
running: false
|
||||
Reference in New Issue
Block a user