SlideShare a Scribd company logo
WSO2 Complex Event Processor 
Sriskandarajah Suhothayan (Suho) 
Srinath Perera 
WSO2 Inc.
Outline 
• BigData 
• Complex Event Processing 
• Basic Constructs of Query Language 
• CEP Solution Patterns 
• Scale, HA and Performance 
• Demo
WSO2 Complex Event Processor
WSO2 Complex Event Processor
WSO2 Complex Event Processor
Why Big Data is hard? 
• How store? Assuming 1TB bytes it takes 1000 
computers to store a 1PB 
• How to move? Assuming 10Gb network, it 
takes 2 hours to copy 1TB, or 83 days to copy 
a 1PB 
• How to search? Assuming each record is 1KB 
and one machine can process 1000 records 
per sec, it needs 277CPU days to process a 
1TB and 785 CPU years to process a 1 PB 
• How to process? 
– How to convert algorithms to work in large size 
– How to create new algorithms 
http://www.susanica.com/photo/9
Why it is hard (Contd.)? 
• System build of many computers 
• That handles lots of data 
• Running complex logic 
• This pushes us to frontier of 
Distributed Systems and Databases 
• More data does not mean there is a 
simple model 
• Some models can be complex as 
the system 
http://www.flickr.com/photos/mariachily/5250487136, 
Licensed CC
Big data Processing Technologies 
Landscape
WSO2 Bigdata Offerings
CEP Is & Is NOT! 
• Is NOT! 
• Simple filters 
• Simple Event Processing 
• E.g. Is this a gold or platinum customer? 
• Joining multiple event streams 
• Event Stream Processing 
• Is ! 
• Processing multiple event streams 
• Identify meaningful patterns among streams 
• Using temporal windows 
• E.g. Notify if there is a 10% increase in overall trading activity AND the 
average price of commodities has fallen 2% in the last 4 hours
What is ?
Query Functions of CEP 
• Filter 
• Transformation 
• Window + { Aggregation, group by } 
• Join 
• Event Sequence 
• Event Table
CEP Architecture
Event Streams 
• Event stream is a sequence of events 
• Event streams are defined by Stream Definitions 
• Events streams have in-flows and out-flows 
• Inflows can be from 
• Event builders 
Converts incoming XML, JSON, etc events to event 
stream 
• Execution plans 
• Outflows are to 
• Event formatters 
Converts to event stream to XML, JSON, etc events 
• Execution plans
Stream Definition 
{ 
'name':'phone.retail.shop', 'version':'1.0.0', 
'nickName': 'Phone_Retail_Shop', 'description': 'Phone Sales', 
'metaData':[ 
{'name':'clientType','type':'STRING'} 
], 
'correlaitonData':[ 
{'name':’transactionID’,'type':'STRING'} 
], 
'payloadData':[ 
{'name':'brand','type':'STRING'}, {'name':'quantity','type':'INT'}, 
{'name':'total','type':'INT'}, {'name':'user','type':'STRING'} 
] 
}
Event Format 
• Standard event formats are available for 
• XML 
• JSON 
• Text 
• Map 
• WSO2 Event 
• If events adhere to the standard format 
they do not need data mapping. 
• If events do not adhere 
custom event mapping should be configured in 
Event builder & Event Formatter 
appropriately.
Event Format 
Standard XML event format 
<events> 
<event> 
<metaData> 
<tenant_id>2</tenant_id> 
</metaData> 
<correlationData> 
<activity_id>ID5</activity_id> 
</correlationData> 
<payloadData> 
<clientPhoneNo>0771117673</clientPhoneNo> 
<clientName>Mohanadarshan</clientName> 
<clientResidenceAddress>15, Alexendra road, 
California</clientResidenceAddress> 
<clientAccountNo>ACT5673</clientAccountNo> 
</payloadData> 
</event> 
<events>
CEP Execution Plan 
● Is an isolated logical execution unit 
● Each execution plan imports some of the event streams 
available in CEP and defines the execution logic using queries 
and exports the results as output event streams. 
● Has one-to-one relationship with CEP Backend Runtime. 
● Has many-to-many relationship with Event Streams. 
● Each execution plan spawns a Siddhi Engine Instance.
CEP Solution patterns 
1. Transformation - project, translate, enrich, split 
2. Filter 
3. Composition / Aggregation / Analytics 
● basic stats, group by, moving averages 
4. Join multiple streams 
5. Detect patterns 
● Coordinating events over time 
● Trends - increasing, decreasing, stable, non-increasing, non-decreasing, 
mixed 
6. Blacklisting 
7. Building a profile
Siddhi Query Structure 
define stream <event stream> 
(<attribute> <type>,<attribute> <type>, ...); 
from <event stream> 
select <attribute>,<attribute>, ... 
insert into <event stream> ;
Siddhi Query : Projection 
define stream TempStream 
(deviceID long, roomNo int, temp double); 
from TempStream 
select roomNo, temp 
insert into OutputStream ;
Siddhi Query : Inferred Streams 
from TempStream 
select roomNo, temp 
insert into OutputStream ; 
define stream OutputStream 
(roomNo int, temp double);
Siddhi Query : Enrich 
from TempStream 
select roomNo, temp,‘C’ as scale 
insert into OutputStream 
define stream OutputStream 
(roomNo int, temp double, scale string);
Siddhi Query : Enrich 
from TempStream 
select deviceID, roomNo, avg(temp) as avgTemp 
insert into OutputStream ;
Siddhi Query : Transformation 
from TempStream 
select concat(deviceID, ‘-’, roomNo) as uid, 
toFahrenheit(temp) as tempInF, 
‘F’ as scale 
insert into OutputStream ;
Siddhi Query : Split 
from TempStream 
select roomNo, temp 
insert into RoomTempStream ; 
from TempStream 
select deviceID, temp 
insert into DeviceTempStream ;
Siddhi Query : Filter 
from TempStream [temp > 30.0 and roomNo != 2043] 
select roomNo, temp 
insert into HotRoomsStream ;
Siddhi Query : Window 
from TempStream 
select roomNo, avg(temp) as avgTemp 
insert into HotRoomsStream ;
Siddhi Query : Window 
from TempStream#window.time(1 min) 
select roomNo, avg(temp) as avgTemp 
insert into HotRoomsStream ;
Siddhi Query : Window 
from TempStream#window.time(1 min) 
select roomNo, avg(temp) as avgTemp 
group by roomNo 
insert into HotRoomsStream ;
Siddhi Query : Batch Window 
from TempStream#window.timeBatch(5 min) 
select roomNo, avg(temp) as avgTemp 
group by roomNo 
insert into HotRoomsStream ;
Siddhi Query : Join 
define stream TempStream 
(deviceID long, roomNo int, temp double); 
define stream RegulatorStream 
(deviceID long, roomNo int, isOn bool);
Siddhi Query : Join 
define stream TempStream 
(deviceID long, roomNo int, temp double); 
define stream RegulatorStream 
(deviceID long, roomNo int, isOn bool); 
from TempStream[temp > 30.0]#window.time(1 min) as T 
join RegulatorStream[isOn == false]#window.lenght(1) as R 
on T.roomNo == R.roomNo 
select T.roomNo, R.deviceID, ‘start’ as action 
insert into RegulatorActionStream ;
Siddhi Query : Detect Trend 
from t1=TempStream, 
t2=TempStream [t1.temp < t2.temp and 
t1.deviceID == t2.deviceID]+ 
within 5 min 
select t1.temp as initialTemp, 
t2.temp as finalTemp, 
t1.deviceID, 
t1.roomNo 
insert into IncreaingHotRoomsStream ;
Siddhi Query : Partition 
define partition Device by TempStream.deviceID ; 
define partition Temp by 
range TempStream.temp <= 0 as ‘ICE’, 
range TempStream.temp > 0 and 
TempStream.temp < 100 as ‘WATER’, 
range TempStream.temp > 100 as ‘VAPOUR’ ;
Siddhi Query : Detect Trend per Partition 
define partition Device by TempStream.deviceID ; 
from t1=TempStream, 
t2=TempStream [t1.temp < t2.temp and 
t1.deviceID == t2.deviceID]+ 
within 5 min 
select t1.temp as initialTemp, 
t2.temp as finalTemp, 
t1.deviceID, 
t1.roomNo 
insert into IncreaingHotRoomsStream 
partition by Device ;
Siddhi Query : Detect Pattern 
define stream Purchase (price double, cardNo long,place string); 
from every (a1 = Purchase[price < 10] -> a3= ..) -> 
a2 = Purchase[price >10000 and a1.cardNo == a2.cardNo] 
within 1 day 
select a1.cardNo as cardNo, a2.price as price, a2.place as place 
insert into PotentialFraud ;
Siddhi Query : Define Event Table 
define table CardUserTable (name string, cardNum long) ; 
define table CardUserTable (name string, cardNum long) 
from (‘datasource.name’=‘CardDataSource’, ‘table.name’= 
‘UserTable’, ‘caching.algorithm’=‘LRU’) ; 
Cache types supported 
● Basic: A size-based algorithm based on FIFO. 
● LRU (Least Recently Used): The least recently used event is dropped 
when cache is full. 
● LFU (Least Frequently Used): The least frequently used event is dropped 
when cache is full.
Siddhi Query : Query Event Table 
define stream Purchase (price double, cardNo long, place string); 
define table CardUserTable (name string, cardNum long) ; 
from Purchase#window.length(1) join CardUserTable 
on Purchase.cardNo == CardUserTable.cardNum 
select Purchase.cardNo as cardNo, 
CardUserTable.name as name, 
Purchase.price as price 
insert into PurchaseUserStream ;
Siddhi Query : Insert into Event Table 
define stream FraudStream (price double, cardNo long, userName 
string); 
define table BlacklistedUserTable (name string, cardNum long) ; 
from FraudStream 
select userName as name, cardNo as cardNum 
insert into BlacklistedUserTable ;
Siddhi Query : Update into Event Table 
define stream LoginStream (userID string, 
islogin bool, loginTime long); 
define table LastLoginTable (userID string, time long) ; 
from LoginStream 
select userID, loginTime as time 
update LastLoginTable 
on LoginStream.userID == LastLoginTable.userID ;
Siddhi Extensions 
● Function extension 
● Aggregator extension 
● Window extension 
● Transform extension
Siddhi Query : Function Extension 
from TempStream 
select deviceID, roomNo, 
custom:toKelvin(temp) as tempInKelvin, 
‘K’ as scale 
insert into OutputStream ;
Siddhi Query : Aggregator Extension 
from TempStream 
select deviceID, roomNo, temp 
custom:stdev(temp) as stdevTemp, 
‘C’ as scale 
insert into OutputStream ;
Siddhi Query : Window Extension 
from TempStream 
#window.custom:lastUnique(roomNo,2 min) 
select * 
insert into OutputStream ;
Siddhi Query : Transform Extension 
from XYZSpeedStream 
#transform.custom:getVelocityVector(v,vx,vy,vz) 
select velocity, direction 
insert into SpeedStream ;
CEP Event Adaptors 
● For receiving and publishing events 
● Has the configurations to connect to external endpoints 
● Has many-to-one relationship with Event Streams
CEP Event Adaptors 
Support for several transports (network access) 
● SOAP 
● HTTP 
● JMS 
● SMTP 
● SMS 
● Thrift 
● Kafka 
Supporting data formats 
● XML 
● JSON 
● Map 
● Text 
● WSO2Event - WSO2 data format over Thrift for High Performant Event transfer 
supporting Java/C/C++/C# via Thrift language bindings
CEP Event Adaptors 
Supports database writes using Map messages 
● Cassandra 
● MYSQL 
● H2 
Supports custom event adaptors 
via its pluggable architecture!
Monitoring & Debugging : Event Flow 
● Visualization of the Event Stream flow in CEP 
● Helps to get the big picture 
● Good for debugging
Monitoring & Debugging : Event Tracer 
• Dump message traces in a textual format 
• Before and after processing each stage of event flow
Monitoring & Debugging : Event Statistics 
• Real-time statistics 
• via visual illustrations & JMX 
• Time based request & response counts 
• Stats on all components of CEP server
Real Time Dashboard 
• Provides tools to configure gadgets 
• Currently supports RDBMS only 
• Powered by WSO2 User Engagement Server ( WSO2UES)
Performance Results 
• Same JVM Performance (Siddhi with Esper, M means a Million) 
4 core machine 
• Filters 8M Events/Sec vs Esper 2M 
• Window 2.5M Events/Sec vs. Esper 1M 
• Patterns 1.4M Events/Sec about 10X faster than Esper 
• Over the Network Performance (Using thrift based WSO2 event 
format) - 8 core machine 
• Filter 0.25M (or 250K) Event/Sec
CEP High Availability 
Execution plan in “RedundantNode” based distributed processing mode 
<executionPlan name="RedundantNodeExecutionPlan" statistics="enable" 
trace="enable" xmlns="http://wso2.org/carbon/eventprocessor"> 
... 
<siddhiConfiguration> 
<property name="siddhi.enable.distributed.processing">RedundantNode</property> 
<property name="siddhi.persistence.snapshot.time.interval.minutes">0</property> 
</siddhiConfiguration> 
... 
</executionPlan>
HA / Persistence 
• Option 1: Side by side 
• Recommended 
• Takes 2X hardware 
• Gives zero down time 
• Option 2: Snapshot and restore 
• Uses less HW 
• Will lose events between snapshots 
• Downtime while recovery 
• ** Some scenarios you can use event tables to keep 
intermediate state
Scaling 
• Vertically scaling 
• Can be distributed as a pipeline 
• Horizontally scaling 
• Queries like windows, patterns, and Join have shared states 
• Hard to distribute!
Scaling (Contd.) 
• Currently users have to setup the pipeline manually (WSO2 team 
can help) 
• Work is underway to support above pipeline and distributer 
operators out of the box
Lambda Architecture
WSO2 Complex Event Processor
Demo
Scenario 
MyPizzaShop – On time delivery or free Pizza Offer !!!
Order Event 
{ 
"event": { 
"correlationData": { 
"orderNo": "0023" 
}, 
"payloadData": { 
"orderInfo": "2 L PEPPERONI", 
"amount": "25.70", 
"name": "James Mark", 
"address": "29BX Finchwood Ave, Clovis, CA 93611", 
"tpNo": "(626)446-4601" 
} 
} 
}
Delivered to customer event 
correlation_orderNo:23, 
isDelivered:true
Email Notification 
Hi Alis Miranda 
Your order for 1 L CHICKEN pizza will be delivered in 30 mins to 
779 Burl Ave, Clovis, CA 93611. 
The total cost of the order is $14.5. 
If you didn't get the pizza within 30 min you will be eligible to have those pizzas for 
free..!! 
MyPizzaShop
Final Payment Notification 
<event xmlns="http://wso2.org/carbon/event"> 
<correlationData> 
<orderNo>3</orderNo> 
</correlationData> 
<payloadData> 
<name>James Clark</name> 
<amount>54.0</amount> 
</payloadData> 
</event>
Thank You

More Related Content

PDF
WSO2 Product Release Webinar: WSO2 Complex Event Processor 4.0
PDF
Introducing the WSO2 Complex Event Processor
PDF
Scalable Event Processing with WSO2CEP @ WSO2Con2015eu
PDF
Complex Event Processing in Practice at jDays 2012
PDF
Complex Event Processing with Esper
PDF
Distributed Real-Time Stream Processing: Why and How 2.0
PPT
Scalable Realtime Analytics with declarative SQL like Complex Event Processin...
PPTX
Fabric - Realtime stream processing framework
WSO2 Product Release Webinar: WSO2 Complex Event Processor 4.0
Introducing the WSO2 Complex Event Processor
Scalable Event Processing with WSO2CEP @ WSO2Con2015eu
Complex Event Processing in Practice at jDays 2012
Complex Event Processing with Esper
Distributed Real-Time Stream Processing: Why and How 2.0
Scalable Realtime Analytics with declarative SQL like Complex Event Processin...
Fabric - Realtime stream processing framework

What's hot (20)

PDF
Spark streaming: Best Practices
PPTX
Real-time driving score service using Flink
PDF
Apache Kafka: New Features That You Might Not Know About
PDF
A Practical Approach to Building a Streaming Processing Pipeline for an Onlin...
PDF
Distributed Stream Processing - Spark Summit East 2017
PDF
Remote Log Analytics Using DDS, ELK, and RxJS
PDF
Event Sourcing - what could possibly go wrong?
PDF
Andrzej Ludwikowski - Event Sourcing - what could possibly go wrong? - Codemo...
PDF
Building Stateful Microservices With Akka
PPTX
Predictive Maintenance with Deep Learning and Apache Flink
PDF
Performance Analysis and Optimizations for Kafka Streams Applications
PDF
From Zero to Streaming Healthcare in Production (Alexander Kouznetsov, Invita...
PPTX
Developing a Real-time Engine with Akka, Cassandra, and Spray
PDF
So you think you can stream.pptx
PDF
Lambda at Weather Scale - Cassandra Summit 2015
PDF
Reactive Stream Processing Using DDS and Rx
PDF
spChains: A Declarative Framework for Data Stream Processing in Pervasive App...
PPTX
Hadoop metric을 이용한 알람 개발
PDF
Kogito: cloud native business automation
PDF
Nyc big datagenomics-pizarroa-sept2017
Spark streaming: Best Practices
Real-time driving score service using Flink
Apache Kafka: New Features That You Might Not Know About
A Practical Approach to Building a Streaming Processing Pipeline for an Onlin...
Distributed Stream Processing - Spark Summit East 2017
Remote Log Analytics Using DDS, ELK, and RxJS
Event Sourcing - what could possibly go wrong?
Andrzej Ludwikowski - Event Sourcing - what could possibly go wrong? - Codemo...
Building Stateful Microservices With Akka
Predictive Maintenance with Deep Learning and Apache Flink
Performance Analysis and Optimizations for Kafka Streams Applications
From Zero to Streaming Healthcare in Production (Alexander Kouznetsov, Invita...
Developing a Real-time Engine with Akka, Cassandra, and Spray
So you think you can stream.pptx
Lambda at Weather Scale - Cassandra Summit 2015
Reactive Stream Processing Using DDS and Rx
spChains: A Declarative Framework for Data Stream Processing in Pervasive App...
Hadoop metric을 이용한 알람 개발
Kogito: cloud native business automation
Nyc big datagenomics-pizarroa-sept2017
Ad

Viewers also liked (20)

PPTX
Iterator - a powerful but underappreciated design pattern
KEY
Polymorphism
PDF
Polymorphism and Software Reuse
PPT
C++ Inheritance
PDF
The Physical Layer
PDF
Universal Declarative Services
PDF
Classes And Methods
PPT
12 couplingand cohesion-student
PPTX
Syntax part 6
PDF
XKE - Programming Paradigms & Constructs
PDF
The Data Link Layer
PDF
Hashing and Hash Tables
PPTX
Association agggregation and composition
PPTX
04 design concepts_n_principles
PPT
Inheritance in c++ ppt (Powerpoint) | inheritance in c++ ppt presentation | i...
PDF
Data structure and algorithms in c++
PPT
C++: inheritance, composition, polymorphism
PPTX
Cohesion & Coupling
PPT
Cohesion and coherence
PDF
The Network Layer
Iterator - a powerful but underappreciated design pattern
Polymorphism
Polymorphism and Software Reuse
C++ Inheritance
The Physical Layer
Universal Declarative Services
Classes And Methods
12 couplingand cohesion-student
Syntax part 6
XKE - Programming Paradigms & Constructs
The Data Link Layer
Hashing and Hash Tables
Association agggregation and composition
04 design concepts_n_principles
Inheritance in c++ ppt (Powerpoint) | inheritance in c++ ppt presentation | i...
Data structure and algorithms in c++
C++: inheritance, composition, polymorphism
Cohesion & Coupling
Cohesion and coherence
The Network Layer
Ad

Similar to WSO2 Complex Event Processor (20)

PDF
Complex Event Processor 3.0.0 - An overview of upcoming features
PPTX
Data to Insight in a Flash: Introduction to Real-Time Analytics with WSO2 Com...
PDF
WSO2 Product Release Webinar - WSO2 Complex Event Processor
PDF
WSO2 Product Release Webinar - Introducing the WSO2 Complex Event Processor
PPTX
WSO2Con USA 2015: WSO2 Analytics Platform - The One Stop Shop for All Your Da...
PDF
WSO2 Analytics Platform: The one stop shop for all your data needs
PPTX
Microsoft SQL Server - StreamInsight Overview Presentation
PDF
ACM DEBS 2015: Realtime Streaming Analytics Patterns
PDF
DEBS 2015 Tutorial : Patterns for Realtime Streaming Analytics
PDF
A head start on cloud native event driven applications - bigdatadays
PDF
Discover Data That Matters- Deep dive into WSO2 Analytics
PDF
WSO2Con ASIA 2016: WSO2 Analytics Platform: The One Stop Shop for All Your Da...
PDF
Complex Event Processing with Esper
PDF
WSO2Con USA 2017: Discover Data That Matters: Deep Dive into WSO2 Analytics
PDF
Scaling Pattern and Sequence Queries in Complex Event Processing
PPTX
Siddhi: A Second Look at Complex Event Processing Implementations
PDF
WSO2 Complex Event Processor - Product Overview
PDF
Design and Implementation of A Data Stream Management System
PPT
Introduction to Large Scale Data Analysis with WSO2 Analytics Platform
PPTX
WebAction-Sami Abkay
Complex Event Processor 3.0.0 - An overview of upcoming features
Data to Insight in a Flash: Introduction to Real-Time Analytics with WSO2 Com...
WSO2 Product Release Webinar - WSO2 Complex Event Processor
WSO2 Product Release Webinar - Introducing the WSO2 Complex Event Processor
WSO2Con USA 2015: WSO2 Analytics Platform - The One Stop Shop for All Your Da...
WSO2 Analytics Platform: The one stop shop for all your data needs
Microsoft SQL Server - StreamInsight Overview Presentation
ACM DEBS 2015: Realtime Streaming Analytics Patterns
DEBS 2015 Tutorial : Patterns for Realtime Streaming Analytics
A head start on cloud native event driven applications - bigdatadays
Discover Data That Matters- Deep dive into WSO2 Analytics
WSO2Con ASIA 2016: WSO2 Analytics Platform: The One Stop Shop for All Your Da...
Complex Event Processing with Esper
WSO2Con USA 2017: Discover Data That Matters: Deep Dive into WSO2 Analytics
Scaling Pattern and Sequence Queries in Complex Event Processing
Siddhi: A Second Look at Complex Event Processing Implementations
WSO2 Complex Event Processor - Product Overview
Design and Implementation of A Data Stream Management System
Introduction to Large Scale Data Analysis with WSO2 Analytics Platform
WebAction-Sami Abkay

More from Sriskandarajah Suhothayan (9)

PDF
Patterns for Deploying Analytics in the Real World
PDF
WSO2 Analytics Platform - The one stop shop for all your data needs
PDF
Sensing the world with Data of Things
PDF
Sensing the world with data of things
PDF
An introduction to the WSO2 Analytics Platform
PDF
Make it fast for everyone - performance and middleware design
PDF
Gather those events : Instrumenting everything for analysis
PDF
Intelligent integration with WSO2 ESB & WSO2 CEP
PDF
Patterns for Deploying Analytics in the Real World
WSO2 Analytics Platform - The one stop shop for all your data needs
Sensing the world with Data of Things
Sensing the world with data of things
An introduction to the WSO2 Analytics Platform
Make it fast for everyone - performance and middleware design
Gather those events : Instrumenting everything for analysis
Intelligent integration with WSO2 ESB & WSO2 CEP

Recently uploaded (20)

PPTX
Supervised vs unsupervised machine learning algorithms
PDF
Fluorescence-microscope_Botany_detailed content
PDF
.pdf is not working space design for the following data for the following dat...
PPTX
MODULE 8 - DISASTER risk PREPAREDNESS.pptx
PDF
Galatica Smart Energy Infrastructure Startup Pitch Deck
PPTX
IB Computer Science - Internal Assessment.pptx
PPTX
oil_refinery_comprehensive_20250804084928 (1).pptx
PPTX
climate analysis of Dhaka ,Banglades.pptx
PPTX
Introduction to Knowledge Engineering Part 1
PPTX
Qualitative Qantitative and Mixed Methods.pptx
PPTX
STUDY DESIGN details- Lt Col Maksud (21).pptx
PPTX
advance b rammar.pptxfdgdfgdfsgdfgsdgfdfgdfgsdfgdfgdfg
PDF
TRAFFIC-MANAGEMENT-AND-ACCIDENT-INVESTIGATION-WITH-DRIVING-PDF-FILE.pdf
PPTX
Business Ppt On Nestle.pptx huunnnhhgfvu
PPTX
Introduction to Basics of Ethical Hacking and Penetration Testing -Unit No. 1...
PPTX
Introduction-to-Cloud-ComputingFinal.pptx
PPTX
DISORDERS OF THE LIVER, GALLBLADDER AND PANCREASE (1).pptx
PDF
Mega Projects Data Mega Projects Data
PPTX
Computer network topology notes for revision
Supervised vs unsupervised machine learning algorithms
Fluorescence-microscope_Botany_detailed content
.pdf is not working space design for the following data for the following dat...
MODULE 8 - DISASTER risk PREPAREDNESS.pptx
Galatica Smart Energy Infrastructure Startup Pitch Deck
IB Computer Science - Internal Assessment.pptx
oil_refinery_comprehensive_20250804084928 (1).pptx
climate analysis of Dhaka ,Banglades.pptx
Introduction to Knowledge Engineering Part 1
Qualitative Qantitative and Mixed Methods.pptx
STUDY DESIGN details- Lt Col Maksud (21).pptx
advance b rammar.pptxfdgdfgdfsgdfgsdgfdfgdfgsdfgdfgdfg
TRAFFIC-MANAGEMENT-AND-ACCIDENT-INVESTIGATION-WITH-DRIVING-PDF-FILE.pdf
Business Ppt On Nestle.pptx huunnnhhgfvu
Introduction to Basics of Ethical Hacking and Penetration Testing -Unit No. 1...
Introduction-to-Cloud-ComputingFinal.pptx
DISORDERS OF THE LIVER, GALLBLADDER AND PANCREASE (1).pptx
Mega Projects Data Mega Projects Data
Computer network topology notes for revision

WSO2 Complex Event Processor

  • 1. WSO2 Complex Event Processor Sriskandarajah Suhothayan (Suho) Srinath Perera WSO2 Inc.
  • 2. Outline • BigData • Complex Event Processing • Basic Constructs of Query Language • CEP Solution Patterns • Scale, HA and Performance • Demo
  • 6. Why Big Data is hard? • How store? Assuming 1TB bytes it takes 1000 computers to store a 1PB • How to move? Assuming 10Gb network, it takes 2 hours to copy 1TB, or 83 days to copy a 1PB • How to search? Assuming each record is 1KB and one machine can process 1000 records per sec, it needs 277CPU days to process a 1TB and 785 CPU years to process a 1 PB • How to process? – How to convert algorithms to work in large size – How to create new algorithms http://www.susanica.com/photo/9
  • 7. Why it is hard (Contd.)? • System build of many computers • That handles lots of data • Running complex logic • This pushes us to frontier of Distributed Systems and Databases • More data does not mean there is a simple model • Some models can be complex as the system http://www.flickr.com/photos/mariachily/5250487136, Licensed CC
  • 8. Big data Processing Technologies Landscape
  • 10. CEP Is & Is NOT! • Is NOT! • Simple filters • Simple Event Processing • E.g. Is this a gold or platinum customer? • Joining multiple event streams • Event Stream Processing • Is ! • Processing multiple event streams • Identify meaningful patterns among streams • Using temporal windows • E.g. Notify if there is a 10% increase in overall trading activity AND the average price of commodities has fallen 2% in the last 4 hours
  • 12. Query Functions of CEP • Filter • Transformation • Window + { Aggregation, group by } • Join • Event Sequence • Event Table
  • 14. Event Streams • Event stream is a sequence of events • Event streams are defined by Stream Definitions • Events streams have in-flows and out-flows • Inflows can be from • Event builders Converts incoming XML, JSON, etc events to event stream • Execution plans • Outflows are to • Event formatters Converts to event stream to XML, JSON, etc events • Execution plans
  • 15. Stream Definition { 'name':'phone.retail.shop', 'version':'1.0.0', 'nickName': 'Phone_Retail_Shop', 'description': 'Phone Sales', 'metaData':[ {'name':'clientType','type':'STRING'} ], 'correlaitonData':[ {'name':’transactionID’,'type':'STRING'} ], 'payloadData':[ {'name':'brand','type':'STRING'}, {'name':'quantity','type':'INT'}, {'name':'total','type':'INT'}, {'name':'user','type':'STRING'} ] }
  • 16. Event Format • Standard event formats are available for • XML • JSON • Text • Map • WSO2 Event • If events adhere to the standard format they do not need data mapping. • If events do not adhere custom event mapping should be configured in Event builder & Event Formatter appropriately.
  • 17. Event Format Standard XML event format <events> <event> <metaData> <tenant_id>2</tenant_id> </metaData> <correlationData> <activity_id>ID5</activity_id> </correlationData> <payloadData> <clientPhoneNo>0771117673</clientPhoneNo> <clientName>Mohanadarshan</clientName> <clientResidenceAddress>15, Alexendra road, California</clientResidenceAddress> <clientAccountNo>ACT5673</clientAccountNo> </payloadData> </event> <events>
  • 18. CEP Execution Plan ● Is an isolated logical execution unit ● Each execution plan imports some of the event streams available in CEP and defines the execution logic using queries and exports the results as output event streams. ● Has one-to-one relationship with CEP Backend Runtime. ● Has many-to-many relationship with Event Streams. ● Each execution plan spawns a Siddhi Engine Instance.
  • 19. CEP Solution patterns 1. Transformation - project, translate, enrich, split 2. Filter 3. Composition / Aggregation / Analytics ● basic stats, group by, moving averages 4. Join multiple streams 5. Detect patterns ● Coordinating events over time ● Trends - increasing, decreasing, stable, non-increasing, non-decreasing, mixed 6. Blacklisting 7. Building a profile
  • 20. Siddhi Query Structure define stream <event stream> (<attribute> <type>,<attribute> <type>, ...); from <event stream> select <attribute>,<attribute>, ... insert into <event stream> ;
  • 21. Siddhi Query : Projection define stream TempStream (deviceID long, roomNo int, temp double); from TempStream select roomNo, temp insert into OutputStream ;
  • 22. Siddhi Query : Inferred Streams from TempStream select roomNo, temp insert into OutputStream ; define stream OutputStream (roomNo int, temp double);
  • 23. Siddhi Query : Enrich from TempStream select roomNo, temp,‘C’ as scale insert into OutputStream define stream OutputStream (roomNo int, temp double, scale string);
  • 24. Siddhi Query : Enrich from TempStream select deviceID, roomNo, avg(temp) as avgTemp insert into OutputStream ;
  • 25. Siddhi Query : Transformation from TempStream select concat(deviceID, ‘-’, roomNo) as uid, toFahrenheit(temp) as tempInF, ‘F’ as scale insert into OutputStream ;
  • 26. Siddhi Query : Split from TempStream select roomNo, temp insert into RoomTempStream ; from TempStream select deviceID, temp insert into DeviceTempStream ;
  • 27. Siddhi Query : Filter from TempStream [temp > 30.0 and roomNo != 2043] select roomNo, temp insert into HotRoomsStream ;
  • 28. Siddhi Query : Window from TempStream select roomNo, avg(temp) as avgTemp insert into HotRoomsStream ;
  • 29. Siddhi Query : Window from TempStream#window.time(1 min) select roomNo, avg(temp) as avgTemp insert into HotRoomsStream ;
  • 30. Siddhi Query : Window from TempStream#window.time(1 min) select roomNo, avg(temp) as avgTemp group by roomNo insert into HotRoomsStream ;
  • 31. Siddhi Query : Batch Window from TempStream#window.timeBatch(5 min) select roomNo, avg(temp) as avgTemp group by roomNo insert into HotRoomsStream ;
  • 32. Siddhi Query : Join define stream TempStream (deviceID long, roomNo int, temp double); define stream RegulatorStream (deviceID long, roomNo int, isOn bool);
  • 33. Siddhi Query : Join define stream TempStream (deviceID long, roomNo int, temp double); define stream RegulatorStream (deviceID long, roomNo int, isOn bool); from TempStream[temp > 30.0]#window.time(1 min) as T join RegulatorStream[isOn == false]#window.lenght(1) as R on T.roomNo == R.roomNo select T.roomNo, R.deviceID, ‘start’ as action insert into RegulatorActionStream ;
  • 34. Siddhi Query : Detect Trend from t1=TempStream, t2=TempStream [t1.temp < t2.temp and t1.deviceID == t2.deviceID]+ within 5 min select t1.temp as initialTemp, t2.temp as finalTemp, t1.deviceID, t1.roomNo insert into IncreaingHotRoomsStream ;
  • 35. Siddhi Query : Partition define partition Device by TempStream.deviceID ; define partition Temp by range TempStream.temp <= 0 as ‘ICE’, range TempStream.temp > 0 and TempStream.temp < 100 as ‘WATER’, range TempStream.temp > 100 as ‘VAPOUR’ ;
  • 36. Siddhi Query : Detect Trend per Partition define partition Device by TempStream.deviceID ; from t1=TempStream, t2=TempStream [t1.temp < t2.temp and t1.deviceID == t2.deviceID]+ within 5 min select t1.temp as initialTemp, t2.temp as finalTemp, t1.deviceID, t1.roomNo insert into IncreaingHotRoomsStream partition by Device ;
  • 37. Siddhi Query : Detect Pattern define stream Purchase (price double, cardNo long,place string); from every (a1 = Purchase[price < 10] -> a3= ..) -> a2 = Purchase[price >10000 and a1.cardNo == a2.cardNo] within 1 day select a1.cardNo as cardNo, a2.price as price, a2.place as place insert into PotentialFraud ;
  • 38. Siddhi Query : Define Event Table define table CardUserTable (name string, cardNum long) ; define table CardUserTable (name string, cardNum long) from (‘datasource.name’=‘CardDataSource’, ‘table.name’= ‘UserTable’, ‘caching.algorithm’=‘LRU’) ; Cache types supported ● Basic: A size-based algorithm based on FIFO. ● LRU (Least Recently Used): The least recently used event is dropped when cache is full. ● LFU (Least Frequently Used): The least frequently used event is dropped when cache is full.
  • 39. Siddhi Query : Query Event Table define stream Purchase (price double, cardNo long, place string); define table CardUserTable (name string, cardNum long) ; from Purchase#window.length(1) join CardUserTable on Purchase.cardNo == CardUserTable.cardNum select Purchase.cardNo as cardNo, CardUserTable.name as name, Purchase.price as price insert into PurchaseUserStream ;
  • 40. Siddhi Query : Insert into Event Table define stream FraudStream (price double, cardNo long, userName string); define table BlacklistedUserTable (name string, cardNum long) ; from FraudStream select userName as name, cardNo as cardNum insert into BlacklistedUserTable ;
  • 41. Siddhi Query : Update into Event Table define stream LoginStream (userID string, islogin bool, loginTime long); define table LastLoginTable (userID string, time long) ; from LoginStream select userID, loginTime as time update LastLoginTable on LoginStream.userID == LastLoginTable.userID ;
  • 42. Siddhi Extensions ● Function extension ● Aggregator extension ● Window extension ● Transform extension
  • 43. Siddhi Query : Function Extension from TempStream select deviceID, roomNo, custom:toKelvin(temp) as tempInKelvin, ‘K’ as scale insert into OutputStream ;
  • 44. Siddhi Query : Aggregator Extension from TempStream select deviceID, roomNo, temp custom:stdev(temp) as stdevTemp, ‘C’ as scale insert into OutputStream ;
  • 45. Siddhi Query : Window Extension from TempStream #window.custom:lastUnique(roomNo,2 min) select * insert into OutputStream ;
  • 46. Siddhi Query : Transform Extension from XYZSpeedStream #transform.custom:getVelocityVector(v,vx,vy,vz) select velocity, direction insert into SpeedStream ;
  • 47. CEP Event Adaptors ● For receiving and publishing events ● Has the configurations to connect to external endpoints ● Has many-to-one relationship with Event Streams
  • 48. CEP Event Adaptors Support for several transports (network access) ● SOAP ● HTTP ● JMS ● SMTP ● SMS ● Thrift ● Kafka Supporting data formats ● XML ● JSON ● Map ● Text ● WSO2Event - WSO2 data format over Thrift for High Performant Event transfer supporting Java/C/C++/C# via Thrift language bindings
  • 49. CEP Event Adaptors Supports database writes using Map messages ● Cassandra ● MYSQL ● H2 Supports custom event adaptors via its pluggable architecture!
  • 50. Monitoring & Debugging : Event Flow ● Visualization of the Event Stream flow in CEP ● Helps to get the big picture ● Good for debugging
  • 51. Monitoring & Debugging : Event Tracer • Dump message traces in a textual format • Before and after processing each stage of event flow
  • 52. Monitoring & Debugging : Event Statistics • Real-time statistics • via visual illustrations & JMX • Time based request & response counts • Stats on all components of CEP server
  • 53. Real Time Dashboard • Provides tools to configure gadgets • Currently supports RDBMS only • Powered by WSO2 User Engagement Server ( WSO2UES)
  • 54. Performance Results • Same JVM Performance (Siddhi with Esper, M means a Million) 4 core machine • Filters 8M Events/Sec vs Esper 2M • Window 2.5M Events/Sec vs. Esper 1M • Patterns 1.4M Events/Sec about 10X faster than Esper • Over the Network Performance (Using thrift based WSO2 event format) - 8 core machine • Filter 0.25M (or 250K) Event/Sec
  • 55. CEP High Availability Execution plan in “RedundantNode” based distributed processing mode <executionPlan name="RedundantNodeExecutionPlan" statistics="enable" trace="enable" xmlns="http://wso2.org/carbon/eventprocessor"> ... <siddhiConfiguration> <property name="siddhi.enable.distributed.processing">RedundantNode</property> <property name="siddhi.persistence.snapshot.time.interval.minutes">0</property> </siddhiConfiguration> ... </executionPlan>
  • 56. HA / Persistence • Option 1: Side by side • Recommended • Takes 2X hardware • Gives zero down time • Option 2: Snapshot and restore • Uses less HW • Will lose events between snapshots • Downtime while recovery • ** Some scenarios you can use event tables to keep intermediate state
  • 57. Scaling • Vertically scaling • Can be distributed as a pipeline • Horizontally scaling • Queries like windows, patterns, and Join have shared states • Hard to distribute!
  • 58. Scaling (Contd.) • Currently users have to setup the pipeline manually (WSO2 team can help) • Work is underway to support above pipeline and distributer operators out of the box
  • 61. Demo
  • 62. Scenario MyPizzaShop – On time delivery or free Pizza Offer !!!
  • 63. Order Event { "event": { "correlationData": { "orderNo": "0023" }, "payloadData": { "orderInfo": "2 L PEPPERONI", "amount": "25.70", "name": "James Mark", "address": "29BX Finchwood Ave, Clovis, CA 93611", "tpNo": "(626)446-4601" } } }
  • 64. Delivered to customer event correlation_orderNo:23, isDelivered:true
  • 65. Email Notification Hi Alis Miranda Your order for 1 L CHICKEN pizza will be delivered in 30 mins to 779 Burl Ave, Clovis, CA 93611. The total cost of the order is $14.5. If you didn't get the pizza within 30 min you will be eligible to have those pizzas for free..!! MyPizzaShop
  • 66. Final Payment Notification <event xmlns="http://wso2.org/carbon/event"> <correlationData> <orderNo>3</orderNo> </correlationData> <payloadData> <name>James Clark</name> <amount>54.0</amount> </payloadData> </event>