SlideShare ist ein Scribd-Unternehmen logo
1 von 83
Downloaden Sie, um offline zu lesen
You Put WHAT in Your Stream?!
Patterns and Practices for Event Design
@AdamBellemare | developer.confluent.io
Who am I?
● Staff Technologist at Confluent
● Previously a Data Platform Engineer
● Written a few Books
● Check out the Practical Data Mesh!
Released 2020
AVAILABLE NOW!
@AdamBellemare | developer.confluent.io
So you’re at an event-driven architectures talk…
@AdamBellemare | developer.confluent.io
“But what did you actually put in your event?”
@AdamBellemare | developer.confluent.io
The hand-waving event design technique
Source: NHLGIFs, apparently
@AdamBellemare | developer.confluent.io
Okay it didn’t work at all. And my arms are tired.
@AdamBellemare | developer.confluent.io
And no, not by going to 7th Normal Form
Use Schemas
@AdamBellemare | developer.confluent.io
Schema-on-Read Doesn’t Work for Streams
A typical
“Schema-On-Read”
big data file system
Source: https://commons.wikimedia.org/wiki/File:Messy_storage_room_with_boxes.jpg
@AdamBellemare | developer.confluent.io
Bloopers
isScreenOn:
@AdamBellemare | developer.confluent.io
Bloopers
isScreenOn:
True, False
@AdamBellemare | developer.confluent.io
Bloopers
isScreenOn:
True, False, “Yes”, “No”
@AdamBellemare | developer.confluent.io
Bloopers
isScreenOn:
True, False, “Yes”, “No”, 1, 0
@AdamBellemare | developer.confluent.io
Bloopers
isScreenOn:
True, False, “Yes”, “No”, 1, 0, null
@AdamBellemare | developer.confluent.io
Bloopers
isScreenOn:
True, False, “Yes”, “No”, 1, 0, null
Source: Beaker
@AdamBellemare | developer.confluent.io
Per-Consumer Sensitivity to Bad Data
Stream
Stream
@AdamBellemare | developer.confluent.io
Bloopers
promotedContent:
True, False,
@AdamBellemare | developer.confluent.io
Bloopers
promotedContent:
True, False, 4291, null,
@AdamBellemare | developer.confluent.io
Bloopers
promotedContent:
True, False, 4291, null, “null”
@AdamBellemare | developer.confluent.io
Bloopers
promotedContent:
True, False, 4291, null, “null”
Source: Uh some kid?
@AdamBellemare | developer.confluent.io
Fixing the Bloopers
{
"type" : "record",
"name" : "SampleEvent",
"fields" : [
{ "name" : "isScreenOn" , "type" : "boolean" },
{ "name" : "promotedContent" , "type" : "boolean" }
]
}
@AdamBellemare | developer.confluent.io
Schemaless events
Source: Steve’s Disco and Dumpster Inferno Emporium
@AdamBellemare | developer.confluent.io
Use a Schema Registry
Confluent Schema Registry
● Supports:
○ Avro
○ Protobuf
○ JSON Schema
● Supports Schema Evolution
● Serialization & Code Generators
● See the Schema Registry 101 Course on developer.confluent.io
Factor 1:
Fact or Delta Event Types
@AdamBellemare | developer.confluent.io
Fact Events vs. Delta Events
Deltas Facts
@AdamBellemare | developer.confluent.io
Fact and Delta Event Types
Cart Fact Event item_added_to_cart
Delta Event
{
"cart_id": 3125123,
"item_map": [ (521,1), (923,3) ],
"shipping": "express"
}
{
"cart_id": 3125123,
"item_id": 521,
"quantity": 1
}
@AdamBellemare | developer.confluent.io
When do you use Deltas, and when do you use Facts?
@AdamBellemare | developer.confluent.io
TIP: Ask yourself:
Are you transferring data?
OR
Are you notifying of an occurrence?
@AdamBellemare | developer.confluent.io
A lot of it depends on the boundaries
Internal World
External
World
Service
Boundary
(aka: Bounded
Context)
External
World
External
World
@AdamBellemare | developer.confluent.io
The Internal World
Internal World
Service
Boundary
(aka: Bounded
Context)
@AdamBellemare | developer.confluent.io
Data on the Inside
Tables
Stream Stream
Event Sourcing
Database-Backed System Event-Sourced System
Private and Purpose-Built for Internal Usage!
@AdamBellemare | developer.confluent.io
The External World
Internal World
External
World
External
World
External
World
Service
Boundary
(aka: Bounded
Context)
@AdamBellemare | developer.confluent.io
Data on the Outside
Stream
Stream
Stream
Stream
Stream Internal World
External
World
External
World
External
World
@AdamBellemare | developer.confluent.io
Events as Data Transfer Objects
Event Stream
Tables
Stream Stream
Database Backed
Event Sourcing
Create External Event
from Internal Model
@AdamBellemare | developer.confluent.io
Cart Fact Event (a DTO)
{
"cart_id": 3125123,
"item_map": [ (521,1), (923,3) ],
"shipping": "express"
}
item_added_to_cart
{
"cart_id": 3125123,
"item_id": 521,
"quantity": 1
}
discount_code_applied
{
"cart_id": 3125123,
"discount_code": "SAVE-20-2022",
"discount_percent": "20"
}
Facts Model State – Deltas Model Change
Delta
Events
@AdamBellemare | developer.confluent.io
Deltas Are Used in Event Sourcing
(Data on the Inside)
Customer Product Quantity
Robert
Pants 1
T-Shirts 1
Hats 15
11:37 2 Pants added to cart
11:39 1 T-Shirt added to cart
11:41 1 Pants removed from cart
11:42 15 Hats added to cart
11:42 Apply Discount Code
Event
Time Events
Read
Apply in order to build state
Current Consumer State
Stream Table
@AdamBellemare | developer.confluent.io
Deltas Not Suitable for Building External State
(Data on the Outside)
11:37 2 Pants added to cart
11:39 1 T-Shirt added to cart
11:41 1 Pants removed from cart
11:42 15 Hats added to cart
11:42 Apply Discount Code
Event
Time Events
Read Duplicate
Cart Building
Logic
Independent Consumer
Services
Apply in order to build state
Apply in order
to build state
Stream
@AdamBellemare | developer.confluent.io
Use Case: General Alerting of Changes
item_added_to_cart
item_removed_from_cart
discount_code_applied
Consumers
@AdamBellemare | developer.confluent.io
What about communicating changes with facts?
@AdamBellemare | developer.confluent.io
Inferring Changes from Fact Events
{
"cart_id": 3125123,
"item_map": [ (521,1) ],
"shipping": "standard"
}
{
"cart_id": 3125123,
"item_map": [ (521,1), (923,3) ],
"shipping": "express"
}
Cart Fact 1 Cart Fact 2
@AdamBellemare | developer.confluent.io
Facts with Before/After Fields
{
"before": {
"cart_id": 3125123,
"item_map": [ (521,1) ],
"shipping": "standard"
},
"after": {
"cart_id": 3125123,
"item_map": [ (521,1), (923,3) ],
"shipping": "express"
}
}
Cart Fact Event
@AdamBellemare | developer.confluent.io
Fact Event Considerations
Event Size
@AdamBellemare | developer.confluent.io
Fact Event Considerations
Event Size Update Frequency
@AdamBellemare | developer.confluent.io
Fact Event Considerations
Event Size Update Frequency
Intent
?
@AdamBellemare | developer.confluent.io
Composite Events?
@AdamBellemare | developer.confluent.io
Composite Events: Facts with a Delta?
{
"cart_id": 3125123,
"item_map": [ (521,1), (923,3) ],
"shipping": "standard"
"reason": "item_added_to_cart"
}
Composite Cart Event
@AdamBellemare | developer.confluent.io
Composite Events: Delta with some Facts?
{
"cart_id": 3125123,
"item_id": 923,
"quantity": 3,
"current_cart": {
"item_map": [ (521,1), (923,3) ],
"shipping": "standard"
}
}
item_added_to_cart
@AdamBellemare | developer.confluent.io
Facts are good for state transfer and flexibility
Deltas are good for event sourcing
and notifications
Factor 2:
How normalized should your events be?
@AdamBellemare | developer.confluent.io
Highly Normalized Streams
Item Stream
Brand Stream
Rating Stream
Item
Brand
Rating
Connectors
@AdamBellemare | developer.confluent.io
Streaming Joins Can Be Costly
Item Stream
Brand Stream
Rating Stream
Same Joins!
Item
Brand
Rating
Consumers
@AdamBellemare | developer.confluent.io
Denormalizing Streams - Everybody’s doing it
Source: The 60s. Maybe the early 70s. That’s like 50 years ago…
@AdamBellemare | developer.confluent.io
Events are best served denormalized
@AdamBellemare | developer.confluent.io
Option 1: Outbox Table Pattern
Item
Brand
Connector
Outbox
Table
Enriched Item Stream
Transaction
Rating
@AdamBellemare | developer.confluent.io
Option 1: Outbox Table Pattern
Item
Brand
Rating
Connector
Outbox
Table
Enriched Item Stream
Transaction
Join
Triggers?
@AdamBellemare | developer.confluent.io
Option 1: Outbox Table Pattern
Item
Brand
Rating
Connector
Outbox
Table
Enriched Item Stream
Transaction
Extra Load
Join
Triggers?
@AdamBellemare | developer.confluent.io
Option 1: Outbox Table Pattern
Item
Brand
Rating
Connector
Outbox
Table
Enriched Item Stream
Transaction
Code
Extra Load
Join
Triggers?
@AdamBellemare | developer.confluent.io
Option 1: Outbox Table Pattern
Item
Brand
Rating
Connector
Outbox
Table
Enriched Item Stream
Transaction
Deletions
Extra Load
Join
Triggers?
Code
@AdamBellemare | developer.confluent.io
Option 2: Denormalize the Streams
Item Facts Stream
Brand Facts Stream
Rating Facts Stream
Enriched Item Facts Stream
Join events together
using ksqlDB
@AdamBellemare | developer.confluent.io
Option 2: Denormalize the Streams
Normalized
SELECT
I.ID,
I.PRICE,
I.NAME,
B.NAME
FROM ITEM I
INNER JOIN BRAND B
ON I.BRAND_ID = B.ID
EMIT CHANGES;
ksqlDB
Item Facts Stream
Brand Facts Stream
Enriched Item Facts Stream
Denormalized
@AdamBellemare | developer.confluent.io
Denormalization Considerations
Event Size
@AdamBellemare | developer.confluent.io
Denormalization Considerations
Event Size Join Trigger
Frequency
Factor 3:
Single vs. Multiple
Definitions per Stream
@AdamBellemare | developer.confluent.io
Use Case 1: Transferring State with Facts
Cart Fact Event
{
"cart_id": 3125123,
"item_map": [ (521,1), (923,3) ],
"shipping": "express"
}
Single Type per Stream
Cart Facts
Consumers
@AdamBellemare | developer.confluent.io
Use Case: Transferring State with Facts
Cart Facts
Item Facts
Single Type per Stream
Consumers
@AdamBellemare | developer.confluent.io
Single Fact Type per Stream
CREATE TABLE Items(
id BIGINT PRIMARY KEY,
price DECIMAL(10,2),
name STRING,
description STRING,
brand_id BIGINT
) WITH (
kafka_topic = 'items',
key_format = 'KAFKA',
value_format = 'AVRO');
Item Facts
ksqlDB
@AdamBellemare | developer.confluent.io
Best Practice: Record the Entire State in one Fact
Order
Cart
User
ksqlDB
Order_Cart
Cart
Order_User
User
@AdamBellemare | developer.confluent.io
Use Case 2: General Alerting of Changes
item_added_to_cart
item_removed_from_cart
discount_code_applied
Single Type per Stream
Consumers
@AdamBellemare | developer.confluent.io
Remove
item
from
cart
Add
item
to
cart
Apply
discount
code
Remove
item
from
cart
Apply
discount
code
Remove
item
from
cart
Cart Events Stream
Use Case 3: Strict Order Processing
@AdamBellemare | developer.confluent.io
Multiple Types per Stream
Cart Events Stream
Consumer
item_added_to_cart
item_removed_from_cart
discount_code_applied
Use Case 3: Strict Order Processing
@AdamBellemare | developer.confluent.io
Can always split up the stream later
Cart Events Stream
ksqlDB
Application
item_added_to_cart
item_removed_from_cart
discount_code_applied
@AdamBellemare | developer.confluent.io
Facts:
Single Definition per Stream
Deltas:
Single or Multiple Definitions per Stream
Rapid Fire Best Practices
@AdamBellemare | developer.confluent.io
Evolving your Data Model?
@AdamBellemare | developer.confluent.io
Versioned Streams for Breaking Changes
Cart Version 2
Cart Version 1
Producer
(Writes both for a period)
@AdamBellemare | developer.confluent.io
Versioned Streams for Breaking Changes
Cart Version 2
Producer
@AdamBellemare | developer.confluent.io
Deltas
Naming so far?
item_added_to_cart
item_removed_from_cart
discount_code_applied
Facts
Cart
Item
User
@AdamBellemare | developer.confluent.io
Streams Across the Business
Inventory
Orders
Shipments
Finance
@AdamBellemare | developer.confluent.io
Event Stream Naming
1) <domain>.<event-type>.<version>
@AdamBellemare | developer.confluent.io
Event Stream Naming
1) <domain>.<event-type>.<version>
Old Fact Stream Name:
Customers.Advertisement
New Fact Stream Names:
Customers.Advertisement.v2
@AdamBellemare | developer.confluent.io
2) <domain>.<service>.<event-type>.<version>
Event Stream Naming Including Service Name
@AdamBellemare | developer.confluent.io
2) <domain>.<service>.<event-type>.<version>
Event Stream Naming Including Service Name
Orders.Order_Placer_Service.Order.v1
Customers.Ad_Manager.Advertisement.v2
Customers.Ad_Budget_Manager.Ad_Promo_Budget.v2
@AdamBellemare | developer.confluent.io
Check out our
Data Mesh eBook!
AVAILABLE NOW!
Stay Tuned for
More Free Courses!

Weitere ähnliche Inhalte

Ähnlich wie You Put *What* in Your Stream?! Patterns and Practices for Event Design with Adam Bellemare

The State of Front-end At CrowdTwist
The State of Front-end At CrowdTwistThe State of Front-end At CrowdTwist
The State of Front-end At CrowdTwist
Mark Fayngersh
 
Nitin_updated_Profile
Nitin_updated_ProfileNitin_updated_Profile
Nitin_updated_Profile
Nitin Saxena
 
Informatica complex transformation i
Informatica complex transformation iInformatica complex transformation i
Informatica complex transformation i
Amit Sharma
 

Ähnlich wie You Put *What* in Your Stream?! Patterns and Practices for Event Design with Adam Bellemare (20)

The State of Front-end At CrowdTwist
The State of Front-end At CrowdTwistThe State of Front-end At CrowdTwist
The State of Front-end At CrowdTwist
 
Expo qa from user stories to automated acceptance tests with bdd
Expo qa   from user stories to automated acceptance tests with bddExpo qa   from user stories to automated acceptance tests with bdd
Expo qa from user stories to automated acceptance tests with bdd
 
An Introduction To Software Development - Software Development Midterm Review
An Introduction To Software Development - Software Development Midterm ReviewAn Introduction To Software Development - Software Development Midterm Review
An Introduction To Software Development - Software Development Midterm Review
 
Neo4j Aura on AWS: The Customer Choice for Graph Databases
Neo4j Aura on AWS: The Customer Choice for Graph DatabasesNeo4j Aura on AWS: The Customer Choice for Graph Databases
Neo4j Aura on AWS: The Customer Choice for Graph Databases
 
Building Solutions with Office Graph
Building Solutions with Office GraphBuilding Solutions with Office Graph
Building Solutions with Office Graph
 
"We are doing it wrong."
"We are doing it wrong.""We are doing it wrong."
"We are doing it wrong."
 
Nitin_updated_Profile
Nitin_updated_ProfileNitin_updated_Profile
Nitin_updated_Profile
 
Expanding skill sets - Broaden your perspective on design
Expanding skill sets - Broaden your perspective on designExpanding skill sets - Broaden your perspective on design
Expanding skill sets - Broaden your perspective on design
 
DDD Belgium Meetup 2017: Events, flows and long running services
DDD Belgium Meetup 2017: Events, flows and long running servicesDDD Belgium Meetup 2017: Events, flows and long running services
DDD Belgium Meetup 2017: Events, flows and long running services
 
Building Conversational Experiences for Google Assistant
Building Conversational Experiences for Google AssistantBuilding Conversational Experiences for Google Assistant
Building Conversational Experiences for Google Assistant
 
Rhf2019 how totackle barriersofapplicationmodernization_ap16_en
Rhf2019 how totackle barriersofapplicationmodernization_ap16_enRhf2019 how totackle barriersofapplicationmodernization_ap16_en
Rhf2019 how totackle barriersofapplicationmodernization_ap16_en
 
Using Visualizations to Monitor Changes and Harvest Insights from a Global-sc...
Using Visualizations to Monitor Changes and Harvest Insights from a Global-sc...Using Visualizations to Monitor Changes and Harvest Insights from a Global-sc...
Using Visualizations to Monitor Changes and Harvest Insights from a Global-sc...
 
Twin Cities Eloqua User Group 092413
Twin Cities Eloqua User Group 092413Twin Cities Eloqua User Group 092413
Twin Cities Eloqua User Group 092413
 
Informatica complex transformation i
Informatica complex transformation iInformatica complex transformation i
Informatica complex transformation i
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
Office add ins community call - april 2019
Office add ins community call - april 2019Office add ins community call - april 2019
Office add ins community call - april 2019
 
Using Web 2.0 For Outside I Nnovation Seybold Stm Dec 07
Using Web 2.0 For Outside I Nnovation Seybold Stm Dec 07Using Web 2.0 For Outside I Nnovation Seybold Stm Dec 07
Using Web 2.0 For Outside I Nnovation Seybold Stm Dec 07
 
Microservices, Events, and Breaking the Data Monolith with Kafka
Microservices, Events, and Breaking the Data Monolith with KafkaMicroservices, Events, and Breaking the Data Monolith with Kafka
Microservices, Events, and Breaking the Data Monolith with Kafka
 
Decision Making based on Machine Learning at Outfittery (W-JAX 2017)
Decision Making based on Machine Learning at Outfittery (W-JAX 2017)Decision Making based on Machine Learning at Outfittery (W-JAX 2017)
Decision Making based on Machine Learning at Outfittery (W-JAX 2017)
 
Android Effective UI: Tips, Tricks and Patterns
Android Effective UI: Tips, Tricks and PatternsAndroid Effective UI: Tips, Tricks and Patterns
Android Effective UI: Tips, Tricks and Patterns
 

Mehr von HostedbyConfluent

Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
HostedbyConfluent
 
Evolution of NRT Data Ingestion Pipeline at Trendyol
Evolution of NRT Data Ingestion Pipeline at TrendyolEvolution of NRT Data Ingestion Pipeline at Trendyol
Evolution of NRT Data Ingestion Pipeline at Trendyol
HostedbyConfluent
 

Mehr von HostedbyConfluent (20)

Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Renaming a Kafka Topic | Kafka Summit London
Renaming a Kafka Topic | Kafka Summit LondonRenaming a Kafka Topic | Kafka Summit London
Renaming a Kafka Topic | Kafka Summit London
 
Evolution of NRT Data Ingestion Pipeline at Trendyol
Evolution of NRT Data Ingestion Pipeline at TrendyolEvolution of NRT Data Ingestion Pipeline at Trendyol
Evolution of NRT Data Ingestion Pipeline at Trendyol
 
Ensuring Kafka Service Resilience: A Dive into Health-Checking Techniques
Ensuring Kafka Service Resilience: A Dive into Health-Checking TechniquesEnsuring Kafka Service Resilience: A Dive into Health-Checking Techniques
Ensuring Kafka Service Resilience: A Dive into Health-Checking Techniques
 
Exactly-once Stream Processing with Arroyo and Kafka
Exactly-once Stream Processing with Arroyo and KafkaExactly-once Stream Processing with Arroyo and Kafka
Exactly-once Stream Processing with Arroyo and Kafka
 
Fish Plays Pokemon | Kafka Summit London
Fish Plays Pokemon | Kafka Summit LondonFish Plays Pokemon | Kafka Summit London
Fish Plays Pokemon | Kafka Summit London
 
Tiered Storage 101 | Kafla Summit London
Tiered Storage 101 | Kafla Summit LondonTiered Storage 101 | Kafla Summit London
Tiered Storage 101 | Kafla Summit London
 
Building a Self-Service Stream Processing Portal: How And Why
Building a Self-Service Stream Processing Portal: How And WhyBuilding a Self-Service Stream Processing Portal: How And Why
Building a Self-Service Stream Processing Portal: How And Why
 
From the Trenches: Improving Kafka Connect Source Connector Ingestion from 7 ...
From the Trenches: Improving Kafka Connect Source Connector Ingestion from 7 ...From the Trenches: Improving Kafka Connect Source Connector Ingestion from 7 ...
From the Trenches: Improving Kafka Connect Source Connector Ingestion from 7 ...
 
Future with Zero Down-Time: End-to-end Resiliency with Chaos Engineering and ...
Future with Zero Down-Time: End-to-end Resiliency with Chaos Engineering and ...Future with Zero Down-Time: End-to-end Resiliency with Chaos Engineering and ...
Future with Zero Down-Time: End-to-end Resiliency with Chaos Engineering and ...
 
Navigating Private Network Connectivity Options for Kafka Clusters
Navigating Private Network Connectivity Options for Kafka ClustersNavigating Private Network Connectivity Options for Kafka Clusters
Navigating Private Network Connectivity Options for Kafka Clusters
 
Apache Flink: Building a Company-wide Self-service Streaming Data Platform
Apache Flink: Building a Company-wide Self-service Streaming Data PlatformApache Flink: Building a Company-wide Self-service Streaming Data Platform
Apache Flink: Building a Company-wide Self-service Streaming Data Platform
 
Explaining How Real-Time GenAI Works in a Noisy Pub
Explaining How Real-Time GenAI Works in a Noisy PubExplaining How Real-Time GenAI Works in a Noisy Pub
Explaining How Real-Time GenAI Works in a Noisy Pub
 
TL;DR Kafka Metrics | Kafka Summit London
TL;DR Kafka Metrics | Kafka Summit LondonTL;DR Kafka Metrics | Kafka Summit London
TL;DR Kafka Metrics | Kafka Summit London
 
A Window Into Your Kafka Streams Tasks | KSL
A Window Into Your Kafka Streams Tasks | KSLA Window Into Your Kafka Streams Tasks | KSL
A Window Into Your Kafka Streams Tasks | KSL
 
Mastering Kafka Producer Configs: A Guide to Optimizing Performance
Mastering Kafka Producer Configs: A Guide to Optimizing PerformanceMastering Kafka Producer Configs: A Guide to Optimizing Performance
Mastering Kafka Producer Configs: A Guide to Optimizing Performance
 
Data Contracts Management: Schema Registry and Beyond
Data Contracts Management: Schema Registry and BeyondData Contracts Management: Schema Registry and Beyond
Data Contracts Management: Schema Registry and Beyond
 
Code-First Approach: Crafting Efficient Flink Apps
Code-First Approach: Crafting Efficient Flink AppsCode-First Approach: Crafting Efficient Flink Apps
Code-First Approach: Crafting Efficient Flink Apps
 
Debezium vs. the World: An Overview of the CDC Ecosystem
Debezium vs. the World: An Overview of the CDC EcosystemDebezium vs. the World: An Overview of the CDC Ecosystem
Debezium vs. the World: An Overview of the CDC Ecosystem
 
Beyond Tiered Storage: Serverless Kafka with No Local Disks
Beyond Tiered Storage: Serverless Kafka with No Local DisksBeyond Tiered Storage: Serverless Kafka with No Local Disks
Beyond Tiered Storage: Serverless Kafka with No Local Disks
 

Kürzlich hochgeladen

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Kürzlich hochgeladen (20)

Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 

You Put *What* in Your Stream?! Patterns and Practices for Event Design with Adam Bellemare