Real-Time	Relevance
Rabobank’s	Event-driven	Architecture
using	Apache	Kafka
Jeroen	van	Disseldorp
Dizzit
Dizzit &Who am I
Personal
‱ 41	years,	married,	father	of	two
‱ Living	in	Raamsdonksveer
‱ Fanatic	squash	player
Education
‱ 1997	MSc	Computer	Science,	
Utrecht
‱ 2008	MBA	Rotterdam	School	of	
Management,	Erasmus	University
Career
‱ Started	developing	at	age	9
‱ 19	years	in	large	corporations
‱ Online,	Open	Source,	Architecture
‱ Passion	for	Product	Development
‱ Started	Dizzit	in	2014
‱ 3	FTE	today,	looking	for	new	devs
Dizzit &Rabobank Senses
Personal	Dialogue
Proactive	and	help	out
Every	journey	is	a	
positive	experience
Dizzit &Rabobank Mobile Banking
A	personal	financial	environment
‱ Manage	your	payments,	personal	
finance	and	bookkeeping	
intuitively	and	easily
‱ Notifies	you,	at	the	right	moment,	
thinks	along
Your	financial	network	close
‱ Rabobank	advisors	‘one	touch	
away’
‱ Always	connected	to	your	
financial	network
‱ Collaborate	and	share	with	
whomever	you	want
Using	your	preferred	device
‱ Mobile,	tablet,	laptop,	desktop
‱ Brain	or	touch	operation
‱ Car
Dizzit &Being relevant
Functionality
Alerting
Extra	Inzicht 2.0
Up-to-date	customer	
info
Customer	Journey	
Analytics
Dizzit &Alerting
Case
Customers	want	to	be	in	control	
of	their	finances.	This	requires	
notifying	them	in	situations	that	
require	action.
For	instance:
‱ Balance	below	threshold
‱ Salary	received
‱ Energy	bill	could	not	be	paid
‱ You	spent	more	on	groceries	
than	you	should	have
Challenge
Rabobank	allows	customers	to	
define	custom	notification	rules.	
But	the	entire	IT	landscape	is	
undergoing	renewal.	How	to	
detect	and	process	the	relevant	
financial	events?
Dizzit &
Time-driven
Request-driven
Event-driven
Initiator:	Time
Participants:	specified	systems
Initiator:	Client
Participants:	Client	and	Server
Initiator:	Event
Participants:	open-ended
Data logistics mechanisms
Dizzit &Time-driven: Digestion
“Data warehouses”
Typically	3	times	per	day
Batches
Fixed	process
Slow	but	predictable
Dizzit &
“SOA”
Millions	of	times	per	day
Individual	commands
Two	involved	parties
Requires	specific	intent
Request-driven: Movement
Dizzit &Event-driven: Nervous system
Millions	of	times	per	day
Observations,	signals
Context-dependant process
Autonomous	microservices
“Business Event Bus”
Millions	of	messages	per	day
Individual	observations	and	signals
Context-dependent	processing
Network	of	systems
Dizzit &
Business Event
An	event	that	is	important	for	a	customer
and/or	business	expert
Dizzit &
Business Event Bus
Rabobank’s	application	integration	platform
that	enables	real-time	business
Dizzit &
Business Event Bus
central	nervous	system
Rabobank’s	application	integration	platform
that	enables	real-time	business
Dizzit &Before Business Event Bus
Producer	1 Producer	2 Producer	3
Consumer	1 Consumer	2 Consumer	3 Consumer	4
Dizzit &Using Business Event Bus
Producer	1 Producer	2 Producer	3
Consumer	1 Consumer	2 Consumer	3 Consumer	4
Business	Event	Bus
Dizzit &Features
Functionality
Event	Messaging
Publish	/	subscribe	model
Schema	registry	for	corporate	
data	governance
Strict	security	model
Characteristics
Extremely	scalable,	up	to	
billions	of	messages	per	day
Producers	and	consumers	
don’t	know	each	other
Producers	and	consumers	
don’t	have	to	be	available	at	
the	same	time
Allows	both	real-time	and	
batch	processing
Producer	1 Producer	2 Producer	3
Consumer	1 Consumer	2 Consumer	3 Consumer	4
Business	Event	Bus
Dizzit &Being relevant
Functionality
Alerting
Extra	Inzicht 2.0
Up-to-date	customer	
info
Customer	Journey	
Analytics
Dizzit &Extra Inzicht 2.0
Case
Rabobank’s	personal	finance	
manager	categorizes	income	and	
expenditures.
Examples:
‱ Mortgage
‱ Groceries
‱ Clothing
Challenge
The	current	solution	processes	
transactions	in	nightly	batches,	
so	results	are	visible	the	next	day	
only.	This	decreases	the	service’s	
value.
The	current	IT	solution	is	too	
expensive.	A	cheaper	solution	
must	be	found,	or	the	service	
will	be	discontinued	entirely.
Dizzit &Being relevant
Functionality
Alerting
Extra	Inzicht 2.0
Up-to-date	customer	
info
Customer	Journey	
Analytics
Dizzit &Up-to-date customer info
Case
Banking	customers	are	given	
self-service	pages	with	which	
they	update	their	personal	
contact	information.
For	instance:
‱ Address
‱ Email
‱ Mobile	phone	number
Challenge
CRM	contains	the	master	
customer	data,	but	does	not	
support	high-volume	queries.	
Therefore	other	systems	store	
personal	information	as	well.	
These	systems	must	be	notified	
of	any	change	a	customer	makes	
to	his/her	personal	information.
Dizzit &Being relevant
Functionality
Alerting
Extra	Inzicht 2.0
Up-to-date	customer	
info
Customer	Journey	
Analytics
Dizzit &Customer Journey Analytics
Case
Rabobank	monitors	visitors	and	
customers	across	website	and	
app	to	track	effectiveness	and	
ease	of	use.
Examples:
‱ Product	pages	visited
‱ Sales	processes	started
‱ Services	used
Challenge
The	current	solution	supports	
only	web-based	channels.	This	
means	customers	are	not	
tracked	across	other	internal	
channels	(eg.	bank	offices,	call	
centers,	chats,	API)	and	external	
channels	(eg.	Facebook,	Twitter,	
external	websites).
Dizzit &Making Rabobank relevant
Alerting
200M+	rules	/	day
20M	alerts	/	month
Extra	Inzicht 2.0
25M	entries	/	day
10M	categorizations	/	day
Up-to-date	customer	info
150k+	updates	/	day
Customer	Journey	
Analytics
1M+	sessions	/	day
24

Kafka Utrecht Meetup