Skip to content

Varpulis - Overview

Vision

Varpulis is a next-generation streaming analytics engine combining:

  • Apama's intuitive syntax (EPL)
  • Hypertree efficiency for pattern detection
  • A unified approach that radically simplifies development compared to Apama

Project Name

Varpulis - In Slavic mythology, Varpulis is the spirit/companion of the thunder god, associated with violent winds and storms. This name evokes:

  • Speed: Fast winds carrying events
  • Power: Storm force to process millions of events
  • Flow: Continuous movement of data streams

Target Language

Rust - chosen for:

  • Native performance (required for high-frequency CEP)
  • Memory safety without garbage collector
  • Excellent async ecosystem (tokio, async-std)
  • SIMD support and low-level optimizations
  • Easy deployment (static binary)

Comparison with CEP/Streaming Solutions

FeatureFlinkVarpulis
LanguageJava/Scala APINative DSL (VPL)
DeploymentJVM cluster, complexSingle binary, simple
Latency~10-100ms typical< 1ms possible
Learning curveSteep (DataStream API)Gentle (Python-like syntax)
Pattern detectionFlinkCEP libraryNative SASE+
Memory modelJVM GC pausesNo GC (Rust)

vs Kafka Streams

FeatureKafka StreamsVarpulis
Transport couplingKafka-onlyAny source (Kafka, HTTP, files)
LanguageJava/KotlinVPL DSL
TopologyBuilder pattern verboseDeclarative chaining
State storesRocksDB onlyIn-memory or RocksDB
CEP patternsNot built-inNative support

vs Apache Spark Structured Streaming

FeatureSparkVarpulis
ModelMicro-batchTrue streaming
Latency100ms+ typical< 1ms possible
FootprintHeavy (JVM cluster)Lightweight (single binary)
Use caseBatch-firstStream-first

vs Apama (Cumulocity)

FeatureApamaVarpulis
Multi-stream aggregation❌ Not directly possible✅ Native
ParallelizationComplex and risky spawnDeclarative and supervised
Listeners vs StreamsSeparate and complexUnified in a single concept
DebuggingDifficultBuilt-in observability
Pattern detectionHypertrees onlySASE+ NFA
LicenseCommercialOpen Source

vs Esper

FeatureEsperVarpulis
LanguageEPL (SQL-like)VPL (Python-like)
RuntimeJVMNative (Rust)
HamletNot built-inMulti-query trend aggregation
ObservabilityManualAutomatic metrics/traces

Summary: When to use Varpulis

Use CaseBest Choice
Ultra-low latency CEP (< 1ms)Varpulis
Large-scale batch + streamFlink or Spark
Kafka-centric architectureKafka Streams
Python-like DSL for CEPVarpulis
Native SASE+ pattern detectionVarpulis
Minimal operational overheadVarpulis

Main Components

  1. Compiler - VPL → Optimized IR compilation
  2. Runtime Engine - Processing graph execution
  3. Pattern Matcher - Pattern detection via hypertrees
  4. Hamlet Engine - Multi-query trend aggregation
  5. State Manager - State management (in-memory / RocksDB)
  6. Observability Layer - Metrics, traces, logs

Feature Status

FeatureStatusNotes
Basic stream processing✅ ImplementedFilter, aggregate, emit
Count-based windows✅ ImplementedTumbling and sliding
Time-based windows✅ ImplementedTumbling and sliding
Partitioned windows✅ Implementedpartition_by() with any window type
Join operations✅ ImplementedMulti-stream correlation with .on()
Sequence patterns✅ Implementedfollowed-by, within timeout
Hamlet trend aggregation✅ ImplementedMulti-query trend aggregation
User-defined functions✅ Implementedfn keyword (parsed, basic eval)
MQTT connector✅ ImplementedInput and output
HTTP connector🚧 PartialOutput only (webhooks)
WebSocket✅ ImplementedServer mode for dashboard
Kafka connector🚧 PartialAvailable with kafka feature flag
RocksDB state🚧 PartialAvailable with persistence feature flag, tenant state persists, engine checkpoint integration pending
Clustering📋 PlannedSingle-node only
Parallelization ops🚧 PartialParsed but not evaluated (.concurrent, .process)

See Also

Varpulis - Next-generation streaming analytics engine