Applying Complex Event Processing with Drools Fusion Edson Tirelli firstname.lastname@example.org Lead CEP Engineer JBoss, a Division of Red Hat
Agenda o Brief introduction on CEP and Terminology o Drools Vision o Drools Fusion: Complex Event Processing extensions o Event Declaration and Semantics o Event Cloud, Streams and the Session Clock o Temporal Reasoning o Sliding Window Support o Streams Support o Memory Management o Questions & Answers
Terminology: Event “An event is an observable occurrence.” “An event in the Unified Modeling Language is a notable occurrence at a particular point in time.” http://www.wikipedia.org “Anything that happens, or is contemplated as happening.” “An object that represents, encodes or records an event, generally for the purpose of computer processing” http://complexevents.com
Terminology: Event For the scope of this presentation: “An event is a significant change of state at a particular point in time”
Terminology: Complex Event “Complex Event, is an abstraction of other events called its members.” o Examples: o The 1929 stock market crash – an abstraction denoting many thousands of member events, including individual stock trades) o The 2004 Indonesian Tsunami – an abstraction of many natural events o A completed stock purchase -an abstraction of the events in a transaction to purchase the stock o A successful on-line shopping cart checkout – an abstraction of shopping cart events on an on-line website
Terminology: CEP “Complex Event Processing, or CEP, is primarily an event processing concept that deals with the task of processing multiple events with the goal of identifying the meaningful events within the event cloud. CEP employs techniques such as detection of complex patterns of many events, event correlation and abstraction, event hierarchies, and relationships between events such as causality, membership, and timing, and event- driven processes.” -- wikipedia
Terminology: CEP o Examples: o Emergency Response Systems o Credit Card Fraud Detection o Logistics Real-Time Awareness solution o Neonatal ICU: infant vital signs monitoring
Terminology: CEP vs ESP Complex Event Processing, or CEP, and Event Stream Processing, or ESP, are two technologies that were born separate, but converged. ● An oversimplification: In their origins... Event Stream Processing focused on the ability to process high volume streams of events. Complex Event Processing focused on defining, detecting and processing the relationships among events.
Terminology: CEP and ESP For the scope of this presentation: “CEP is used as a common term meaning both CEP and ESP.”
Terminology: EDA “Event Driven Architecture (EDA) is a software architecture pattern promoting the production, detection, consumption of, and reaction to events. An event can be defined as "a significant change in state". For example, when a consumer purchases a car, the car's state changes from "for sale" to "sold". A car dealer's system architecture may treat this state change as an event to be produced, published, detected and consumed by various applications within the architecture.” http://en.wikipedia.org/wiki/Event_Driven_Architecture
EDA vs CEP CEP is a component of the EDA Source: http://elemental inks.typepad.com/.shared/image.html?/photos/uncategorized/simple_event_flow.gif
EDA vs SOA o EDA is **not** SOA 2.0 o Complementary architectures o Metaphor o In our body: o SOA is used to build our muscles and organs o EDA is used to build our sensory system
Complex Event Processing o A few characteristics of common CEP scenarios: o Huge volume of events, but only a few of real interest o Usual y events are immutable o Usual y queries/rules have to run in reactive mode o Strong temporal relationships between events o Individual events are usual y not important o The composition and aggregation of events is important
Drools Vision “A common platform to model and govern the business logic of the enterprise.”
Drools Fusion: Enables… • Event Detection: • From an event cloud or set of streams, select al the meaningful events, and only them. • [Temporal] Event Correlation: • Ability to correlate events and facts declaring both temporal and non-temporal constraints between them. • Ability to reason over event aggregation • Event Abstraction: • Ability to compose complex events from atomic events AND reason over them
Drools Fusion o Features: o Event Semantics as First Class Citizens o Al ow Detection, Correlation and Composition o Temporal Constraints o Session Clock o Stream Processing o Sliding Windows o CEP volumes (scalability) o (Re)Active Rules o Data Loaders for Input
Demo o Twitter Stream CEP Demo: o Listen to the Twitter Stream API Twitter4J API Listens to a random sample of tweets o Detects patterns and reacts Drools Fusion o Simple one process (multi-thread) demo Focus on specific features
Event Declaration and Semantics // declaring existing class o Event semantics: import some.package.VoiceCall declare VoiceCall o Point-in-time and Interval @role( event ) @timestamp( calltime ) @duration( duration ) o An event is a fact with a few end special characteristics: // generating an event class o Usual y immutable, but not declare StockTick enforced @role( event ) o Strong temporal relationships symbol : String o price : double Lifecycle may be managed end o Al ow use of sliding windows o “All events are facts, but not al facts are events.”
Temporal Reasoning o Semantics for: o time: discrete o events: point-in-time and interval o Ability to express temporal relationships: o Al en’s 13 temporal operators o James F. Allen defined the 13 possible temporal relations between two events. o Eiko Yoneki and Jean Bacon defined a unified semantics for event correlation over time and space.
Temporal Relationships ru rule “Sh “Shipment not picke cked up in time me” when Shipme ment( $pickupTime me : scheduledPickupTime ) ) not ShipmentPi Picku ckup( this before $picku ckupTime ) then // shipment not picked up... action require red. end
Temporal Relationships ru rule “Sh “Shipment not picke cked up in time me” when Shipme ment( $pickupTime me : scheduledPickupTime ) ) not ShipmentPi Picku ckup( this before $picku ckupTime ) then // shipment not picked up... Act Action re required. end Temporal Relationship
Allen’s 13 Temporal Operators Point-Point Point-Interval Interval-Interval A A before B B A A meets B B A overlaps B AB A A finishes B B A includes B A B A A starts B B A coincides B AB
Allen’s 13 Temporal Operators Point-Point Point-Interval Interval-Interval A A after B B A A metBy B B A overlapedBy B AB A A finishedBy B B A during B A B A A finishes B B
Streams : Simple Example Scenario
Stream Support (entry-points) o A scoping abstraction for stream support o Rule compiler gather al entry-point declarations and expose them through the session API o Engine manages al the scoping and synchronization behind the scenes. rule “Stock Trade Correlation” “Stock Trade Correlation” when $c : Customer( type == “VIP” ) BuyOrderEvent( customer == $c, $id : id ) from entry-point “Home Broker Stream” BuyAckEvent( sourceEvent == $id $id ) ) from entry-point from entry-point “Stock Trader Stream” then // take some action end
Cloud Mode, Stream Mode, Session Clock CLOUD STREAM • No notion of “flow of time”: • Notion of “flow of time”: the engine sees al facts concept of “now” without regard to time • Session Clock has an active • No attached Session Clock role synchronizing the • No requirements on event reasoning ordering • Event Streams must be • No automatic event lifecycle ordered management • Automatic event lifecycle • No sliding window support management • Sliding window support • Automatic rule delaying on absence of facts
Reference Clock o Reference clock defines the flow of time o Named Session Clock o is assigned to each session created o Synchronizes time sensitive operations o duration rules o event streams o process timers o sliding windows
Session Clock o Uses the strategy pattern and multiple implementations: o Real-time operation o Tests o Simulations o etc
Session Clock o Selecting the session clock: o API: KnowledgeSessionConfiguration conf = ... conf.setOption( ClockTypeOption.get( “realtime” ) ); o System Property or Configuration File: drools.clockType = pseudo
Sliding Window Support o Allows reasoning over a moving window of “interest” o Time o Length Sliding window 1 Sliding window 2
Sliding Window Support o Allows reasoning over a moving window of “interest” o Time o Length Sliding window 1 Sliding window 2 Joined window
Sliding Window Support o Allows reasoning over a moving window of “interest” o Time o Length rule “Average Order Value over 12 hours” when $c : Customer() $a : Number() from accumulate ( BuyOrder( customer == $c, $p : price ) over window:time( 12h ), average( $p ) ) then // do something end
Delaying Rules o Negative patterns may require rule firings to be delayed. rule “Order timeout” when $bse : BuyShares ( $id : id ) not BuySharesAck( id == $id, this after[0s,30s] $bse ) then // Buy order was not acknowledged. Cancel operation // by timeout. end
Delaying Rules o Negative patterns may require rule firings to be delayed. rule “Order timeout” when $bse : BuyShares ( $id : id ) not BuySharesAck( id == $id, this after[0s,30s] $bse ) then // Buy order was not acknowledged. Cancel operation // by timeout. end Forces the rule to wait for 30 seconds before firing, because the acknowledgement may arrive at any time!
Temporal Dimension o Requires the support to the temporal dimension o A rule/query might match in a given point in time, and not match in the subsequent point in time o That is the single most difficult requirement to support in a way that the engine: o stays deterministic o stays a high-performance engine o Achieved mostly by compile time optimizations that enable: o constraint tightening o match space narrowing o memory management
Temporal Dimension Support o CEP scenarios are stateful by nature. o Events usual y are only interesting during a short period of time. o Hard for applications to know when events are not necessary anymore o Temporal constraints and sliding windows describe such “window of interest”
Simple Example Rule rule “Bag was lost” when $b : BagScannedEvent() from entry-point “check-in” not BagScannedEvent( id == $b.id, this after[0s,5m] $b ) from entry-point “pre-load” then // Bag was lost, do something end Easy to “see” that the only temporal relationship between the events defines a 5 minutes interest window.
Abstract Example Rule rule “Abstract event relationship example” when $a : A() $b : B( this after[-2, 2] $a ) $c : C( this after[-3, 4] $a ) $d : D( this after[ 1, 2] $b, this after[2,3] $c) not E( this after[ 1,10] $d ) then // Bag was lost, do something end How about now? What is the temporal relationship between A and E?
Temporal Dependency Matrix [-2,2] B [1,2] [1,10] A D E [-3,4] [2,3] C Constraint tightening A B C D E A [ 0, 0 ] [ -2, 2 ] [ -3, 2 ] [ -1, 4 ] [ 0, 14 ] B [ -2, 2 ] [ 0, 0 ] [ -2, 0 ] [ 1, 2 ] [ 2, 12 ] C [ -2, 3 ] [ 0, 2 ] [ 0, 0 ] [ 2, 3 ] [ 3, 13 ] D [ -4, 1 ] [ -2, -1 ] [ -3, -2 ] [ 0, 0 ] [ 1, 10 ] E [ -14, 0 ] [ -12, -2 ] [ -13, -3 ] [-10,-1 ] [ 0, 0 ]