SlideShare a Scribd company logo
1 of 161
Download to read offline
Evolving Schemas
Without Schema Evolution
Abstract
Schema Registry allows us to control how schemas can be evolved through time without breaking compatibility.
However, when using high retention, you could end up with a convoluted “dirty” schema depending on the selected
compatibility level, as well as many different models in your application logic to support all the schema versions.
Upcaster chains allow you to read an old version of a message and bring it to what your logic needs today.
The upcasters in the chain describe how to jump from one version to the next. They describe what your logic expects instead of
covering all the possible variations that were ever published.
We created an upcaster registry to allow you to declare upcasters and their chains in a declarative manner allowing them to be
used across all your streaming apps. It is a great combo with Schema Registry; one providing the schemas themselves, the other
expressing how to evolve from one schema version to the next.
Andreas Evers
CTO @ KOR Financial
Previously Pivotal / VMware
➢ Staff solution architect consulting for some of the biggest European firms
➢ Focused on application transformation & system design
➢ Worked on Spinnaker, together with the Spring team
Who is this guy?
@andreasevers
Mission
Avoid another financial crisis
by mapping out risk in financial
markets
Selena Gomez
explains “CDOs”, one of the
financial products that were
the cause of the 2008 crash
KOR Solution
Real-time insights based on
regulation to make financial
products like CDOs
transparent to the market and
regulators.
Most companies use Kafka with a
low retention setting, such as 7 days
This works great for messaging use cases
Kafka can mean so much more
for your company
The typical use case offloads the streamed events into an external database
Those databases typically use commit logs or sequential files internally
Such commit logs and sequential files are in fact very similar
to Kafka topics and segment files 🤔
Why not use Kafka as the commit log for your data, and
become the system of record instead of merely a tunnel
KSQL: Turning the database inside-out
Source of truth
stream
Continuous
query
Derived table
High retention offers a lot of benefits,
but also comes with its own unique challenges
You can’t just wait 7 days
for old formats to leave your cluster
How do we deal with
Evolution?
Let’s start with
short retention
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
}
- Rick
- Morty
Class People {
- Rick
- Morty
}
0
- Rick
- Morty
Class People {
- Rick
- Morty
}
0
Class People {
- Rick
- Morty
}
- Rick
- Morty
0
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
- Summer
}
- Rick
- Morty
0
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
- Summer
}
- Rick
- Morty
- Summer
1
- Rick
- Morty
0
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
- Summer
}
- Rick
- Morty
- Summer
1
- Rick
- Morty
0
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
- Summer
}
- Rick
- Morty
- Summer
1
- Rick
- Morty
0
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
}
1
Class People {
- Rick
- Morty
}
- Rick
- Morty
0 1
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
- Optional<Summer>
}
- Rick
- Morty
0 1
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
- Summer
}
Class People {
- Rick
- Morty
- Optional<Summer>
}
- Rick
- Morty
0 1
Class People {
- Rick
- Morty
- Summer
}
Class People {
- Rick
- Morty
- Optional<Summer>
}
- Rick
- Morty
0 1
- Rick
- Morty
- Summer
Class People {
- Rick
- Morty
- Summer
}
Class People {
- Rick
- Morty
- Optional<Summer>
}
- Rick
- Morty
- Rick
- Morty
- Summer
0 1
Class People {
- Rick
- Morty
- Summer
}
Class People {
- Rick
- Morty
- Optional<Summer>
}
- Rick
- Morty
- Rick
- Morty
- Summer
0 1
Class People {
- Rick
- Morty
- Summer
}
Class People {
- Rick
- Morty
- Optional<Summer>
}
- Rick
- Morty
- Rick
- Morty
- Summer
0 1
1
Class People {
- Rick
- Morty
- Summer
}
Class People {
- Rick
- Morty
- Optional<Summer>
}
- Rick
- Morty
- Summer
1
Class People {
- Rick
- Morty
- Summer
}
Class People {
- Rick
- Morty
- Summer
}
- Rick
- Morty
- Summer
Isn’t this easier
in HTTP APIs?
- Rick
- Morty
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
}
- Rick
- Morty
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
}
- Rick
- Morty
- Summer
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
- Summer
}
Tolerant Reader
Postel’s Law,
a.k.a. the Robustness Principle:
Be conservative in what you do,
be liberal in what you accept from others.
Client Functions
Client Stub
Server Functions
Server Stub
(skeleton)
Network Routines Network Routines
kernel
client
process
kernel
server
process
network
client server
Client Objects
Client SOAP Handler
Server Objects
Server SOAP Handler
Network Routines Network Routines
network
kernel
client
process
kernel
server
process
client server
SpecificRecord
Avro Serdes
SpecificRecord
Avro Serdes
Network Routines Network Routines
network
kernel
client
process
kernel
server
process
client server
mvn generate-sources
Look ma, no programming!
- Rick
- Morty
- Summer
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
- Summer
}
Be conservative in what you do,
be liberal in what you accept from others.
@JsonIgnoreProperties
(ignoreUnknown = true)
- Rick
- Morty
0
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
- Summer
}
- Rick
- Morty
- Summer
1
Be conservative in what you do,
be liberal in what you accept from others.
Tolerant
GenericRecordToDto
Deserializer
What about
some other changes?
- Rick
- Morty
0
Class People {
- Rick
- Morty
}
Class People {
- Rick
}
- Rick
1
- Rick
- Morty
0
Class People {
- Rick
- Morty
}
Class People {
- Rick
}
- Rick
1
- Rick
- Morty
0
Class People {
- Rick
- Morty
}
Class People {
- PickleRick
- Morty
}
- PickleRick
- Morty
1
- Rick
- Morty
0
Class People {
- Rick
- Morty
}
Class People {
- PickleRick
- Morty
}
- PickleRick
- Morty
1
- Rick
- Morty
0
Class People {
- PickleRick
- Morty
}
Class People {
- PickleRick
- Morty
}
- PickleRick
- Morty
1
- Rick
- Morty
0
Class People {
- PickleRick
- Morty
}
Class People {
- PickleRick
- Morty
}
- PickleRick
- Morty
1
- Rick: String
- Morty
0
Class People {
- Rick: String
- Morty
}
Class People {
- Rick: boolean
- Morty
}
- Rick: boolean
- Morty
1
- Rick: String
- Morty
0
Class People {
- Rick: String
- Morty
}
Class People {
- Rick: boolean
- Morty
}
- Rick: boolean
- Morty
1
How can we prevent
breaking consumers?
- Rick
- Morty
0
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
}
1
Class People {
- Rick
- Morty
}
- Rick
- Morty
0 1
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
- Optional<Summer>
}
- Rick
- Morty
0 1
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
- Summer
}
Class People {
- Rick
- Morty
- Optional<Summer>
}
- Rick
- Morty
0 1
Consumer-driven
Contract Testing
Field-by-field compatibility testing
Consumer-driven
Contract Testing
Field-by-field compatibility testing
V2
V2
Consumer A is on version 2,
only uses PickleRick
V2
Consumer A is on version 2,
only uses PickleRick
V2
Consumer A is on version 2,
only uses PickleRick
V2
Consumer A is on version 2,
only uses PickleRick
V2
Consumer-Driven Contract Testing
Consumer A is on version 2,
only uses PickleRick
Consumer-Driven Contract Testing
❯ pact-broker can-i-deploy
--pacticipant Foo
--version 23
--to production
Schema Registry
Automatic schema management
and validation
Schema Evolution through Schema Registry
Schema Registry
• Versions every schema
• Every schema has a unique ID
• Uses subjects with Topic, Record, or TopicRecord names
• For each subject, each schema change gets a version increase
Schema
ID: foo
Schema
ID: bar
Subject
topic-People
- Rick
- Morty
- Rick
- Morty
- Summer
V1
V2
Compatibility Types
Compatibility Type Changes allowed Check against which schemas Upgrade first
BACKWARD Delete fields
Add optional fields
Last version Consumers
BACKWARD_TRANSITIVE Delete fields
Add optional fields
All previous versions Consumers
FORWARD Add fields
Delete optional fields
Last version Producers
FORWARD_TRANSITIVE Add fields
Delete optional fields
All previous versions Producers
FULL Add optional fields
Delete optional fields
Last version Any order
FULL_TRANSITIVE
Add optional fields
Delete optional fields
All previous versions Any order
NONE All changes are accepted Compatibility checking disabled Depends
Backward
Class People {
- Rick
- Optional<Summer>
}
Backward
0 1
- Rick
- Morty
- Rick
- Optional<Summer>
Class People {
- Rick
- Optional<Summer>
}
Class People {
- Rick
- Optional<Summer>
}
Backward
- Rick
- Morty
0
- Rick
- Optional<Summer>
1
Class People {
- Rick
- Optional<Summer>
}
Class People {
- Rick
- Optional<Summer>
}
Backward
0 1
- Rick
- Morty
- Rick
- Optional<Summer>
Class People {
- Rick
- Optional<Summer>
}
Class People {
- Rick
- Optional<Summer>
}
Backward
0 1
- Rick
- Morty
- Rick
- Optional<Summer>
Class People {
- Rick
- Optional<Summer>
}
Class People {
- Rick
- Optional<Summer>
}
- Rick
- Optional<Summer>
Backward
Class People {
- Rick
- Optional<Summer>
}
Class People {
- Rick
- Optional<Summer>
}
- Rick
- Optional<Summer>
Backward
Class People {
- Rick
- Optional<Summer>
}
Class People {
- Rick
- Morty
}
- Rick
- Morty
Backward
Class People {
- Rick
- Optional<Summer>
}
Class People {
- Rick
- Morty
}
- Rick
- Morty
Backward
- Rick
- Morty
0
Class People {
- Rick
- Optional<Summer>
}
- Rick
- Optional<Summer>
1
- Rick
2
Backward
Transitive
- Rick
- Morty
0
Class People {
- Rick
- Optional<Summer>
}
Class People {
- Rick
- Optional<Summer>
}
- Rick
- Optional<Summer>
1
- Rick
2
Backward
Transitive
- Rick
- Morty
0
Class People {
- Rick
- Optional<Summer>
}
Class People {
- Rick
- Optional<Summer>
}
- Rick
- Optional<Summer>
1
- Rick
2
Backward
Transitive
- Rick
- Morty
0
Class People {
- Rick
- Optional<Summer>
}
Class People {
- Rick
- Optional<Summer>
}
- Rick
- Optional<Summer>
1
- Rick
2
Backward
Transitive
- Rick
- Morty
0
Class People {
- Rick
- Optional<Summer>
}
Class People {
- Rick
- Optional<Summer>
}
- Rick
- Optional<Summer>
1
- Rick
2
Backward
Transitive
Forward
Class People {
- Rick
- Optional<Morty>
}
Class People {
- Rick
- Optional<Morty>
}
Forward
- Rick
- Optional<Morty>
Class People {
- Rick
- Optional<Morty>
}
Class People {
- Rick
- Optional<Morty>
}
Forward
- Rick
- Optional<Morty>
Class People {
- Rick
- Optional<Morty>
}
Class People {
- Rick
- Summer
}
Forward
- Rick
- Optional<Morty>
- Rick
- Summer
Class People {
- Rick
- Optional<Morty>
}
Class People {
- Rick
- Optional<Morty>
}
- Rick
- Optional<Morty>
Forward
Class People {
- Rick
- Optional<Morty>
}
Class People {
- Rick
- Summer
}
- Rick
- Summer
Forward
- Rick
- Optional<Morty>
0
Class People {
- Rick
- Optional<Morty>
}
Class People {
- Rick
- Optional<Morty>
}
1 2
Forward
Transitive
- Rick
- Optional<Morty>
0
Class People {
- Rick
- Optional<Morty>
}
Class People {
- Rick
- Optional<Morty>
}
1 2
Forward
Transitive
- Rick
- Optional<Morty>
0
Class People {
- Rick
- Optional<Morty>
}
Class People {
- Rick
}
1
- Rick
2
Forward
Transitive
- Rick
- Optional<Morty>
0
Class People {
- Rick
- Optional<Morty>
}
Class People {
- Rick
- Summer
}
- Rick
- Summer
1
- Rick
2
Forward
Transitive
Short Retention = Full?
Backward when
• you want to allow the producer to roll back to a previous version,
writing a previous schema, without breaking consumers (provided they
are tolerant readers)
Forward when
• you want to allow consumers to read new versions without needing to
be updated first (provided they are tolerant readers and non-compatible
upgrades are controlled, e.g. using CDCT)
High Retention = Full Transitive?
Backward transitive when
• you want to allow new consumers which will start at offset 0,
to be added at any time in the future
• or you want to allow producers to roll back to any previous version,
writing a previous schema, without breaking consumers (provided they
are tolerant readers)
Forward transitive when
• you want to allow consumers to read new versions without needing to
be updated first (provided they are tolerant readers)
regardless from where they start consuming
High Retention = Full Transitive forever?
Class People {
- Optional<Rick>
- Optional<Morty>
- Optional<Summer>
- Optional<PickleRick>
- Optional<Rick:boolean>
}
Evolution strategies
• Tolerant Reader
• Versioned Events
• Copy-Transform
• Upcasting
Copy-Transform
A.k.a. Copy & Replace
A.k.a. The Parallel Universe
Copy-Transform
Copy-Transform
Copy-Transform
Copy-Transform
Copy-Transform
Copy-Transform
Copy-Transform
Copy-Transform
Benefits Drawbacks
Relatively simple to
implement
Complete freedom to do
anything you want
Data preservation
One-time operation
Performance
Upcasting
A.k.a. Message Translators
Avro defaults give you wire-compatibility
Upcasting gives you business-compatibility
- Rick
- Morty
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
- Rick
- Morty
Class People {
- PickleRick
- Summer
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
- Rick
- Morty
Class People {
- PickleRick
- Summer
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
- Rick
- Morty
Class People {
- PickleRick
- Summer
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V3
- Rick
- Morty
Class People {
- PickleRick
- Summer
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V3
V1 → V2
V2 → V3
V2 → V3
- Rick
- Morty
Class People {
- PickleRick
- Summer
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V3
- Rick
- Morty
Class People {
- PickleRick
- Summer
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V3
V2 → V3
- Rick
- Morty
Class People {
- PickleRick
- Summer
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V3
V2 → V3
- Rick
- Morty
Class People {
- PickleRick
- Summer
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V3
V1 → V2
V2 → V3
V2 → V3
- Rick
- Morty
Class People {
- PickleRick
- Summer
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V3
V1 → V2
V2 → V3
V2 → V3
- Rick
- Morty
Class People {
- Rick
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V2
- Rick
- Morty
Class People {
- Rick
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V2
V1 → V2 V3 → V2
- Rick
- Morty
Class People {
- Rick
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V2
V1 → V2 V3 → V2
What if some consumers
are missing upcasters?
- Rick
- Morty
Class People {
- Rick
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V2
V1 → V2 V3 → V2
- Rick
- Morty
Class People {
- Rick
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V2
V3 → V2
- Rick
- Morty
Class People {
- Rick
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V2
V3 → V2
- Rick
- Morty
Class People {
- Rick
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V2
- Rick
- Morty
Class People {
- Rick
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V2
- Rick
- Morty
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V2
- Rick
- Morty
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V2
V3 V2
V1
V3
V1
V2
V1
Upcaster Registry
Centralized repository for up- and
downcasters
Class People {
- Rick
- Morty
}
V1
Class People {
- Rick
- Morty
}
V1
- Rick
- Morty
V1
- Rick
- Morty
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
}
V1
V1
V1
- Rick
- Morty
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
}
V1
V1
V1
- Rick
- Morty
Class People {
- Rick
- Morty
}
Class People {
- Rick
- Morty
}
V1
V1
V1
- Rick
- Morty
Class People {
- Rick
- Morty
}
Class People {
- Rick
}
V1
V1
V2
- Rick
- Morty
Class People {
- Rick
- Morty
}
Class People {
- Rick
}
V1
V1
V2
V1 → V2
V2 → V1
- Rick
- Morty
Class People {
- Rick
- Morty
}
Class People {
- Rick
}
V1
V1
V2
V1 → V2
V2 → V1
- Rick
V2
- Rick
- Morty
Class People {
- Rick
- Morty
}
Class People {
- Rick
}
V1
V1
V2
V1 → V2
V2 → V1
- Rick
V2
- Rick
- Morty
Class People {
- Rick
- Morty
}
Class People {
- Rick
}
V1
V1
V2
V1 → V2
V2 → V1
- Rick
V2
- Rick
- Morty
Class People {
- Rick
- Morty
}
Class People {
- Rick
}
V1
V1
V2
V1 → V2
V2 → V1
- Rick
V2
V2 → V1
- Rick
- Morty
Class People {
- Rick
}
Class People {
- Rick
}
V1
V2
V2
V1 → V2
V2 → V1
- Rick
V2
- Rick
- Morty
Class People {
- Rick
}
Class People {
- Rick
}
V1
V2
V2
V1 → V2
V2 → V1
- Rick
V2
- Rick
- Morty
Class People {
- Rick
}
Class People {
- Rick
}
V1
V2
V2
V1 → V2
V2 → V1
- Rick
V2
V1 → V2
- Rick
- Morty
Class People {
- Rick
}
Class People {
- PickleRick
- Summer
}
V1
V2
V3
V1 → V2
V2 → V1
- Rick
V2
- Rick
- Morty
Class People {
- Rick
}
Class People {
- PickleRick
- Summer
}
V1
V2
V3
V1 → V2
V2 → V1
- Rick
V2
V3 → V2
V2 → V3
- Rick
- Morty
Class People {
- Rick
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
- Rick
V1 V2 V3
V2
V1 → V2 V3 → V2
V1 → V2
V3 → V2
V2 → V1
V2 → V3
V3
https://github.com/KOR-Financial/kopper
- Rick
- Morty
0
Class People {
- Rick
}
Class People {
- PickleRick
- Summer
}
- PickleRick
- Summer
1
- Rick
2
V1 V2 V3
V2
V1 → V2 V3 → V2
V1 → V2
V3 → V2
V2 → V1
V2 → V3
V3
Consumer A is on V2
Supports V1 and V3
❯ pact-broker can-i-deploy
--pacticipant Foo
--version 23
--to production
Can we combine these
evolution strategies?
Combining strategies for short retention
• Versioned Events
• Tolerant Reader
• Consumer-driven Contract Testing
Combining strategies for short retention
This allows you to:
• Avoid transitive
• Avoid the optional dance
• Chase consumers to upgrade
• Prevent producers from mistakenly releasing incompatible version
after releasing compatible version
• Keep your consumers tolerant to change
• Keep your consumers ignorant of information they don’t need
Combining strategies for high retention
• Versioned Events
• Upcasting
• Upcaster registry
• Tolerant Reader
• Copy-Transform
Combining strategies for high retention
This allows you to:
• Avoid Full Transitive Forever
• Avoid every field being optional
• Avoid having to write to countless deprecated fields
• Keep your consumers tolerant to change
• Keep your consumers ignorant of information they don’t need
Thank you!
Accreditations:
Graphics by Arthur Shlain, Creative Stal, Siddharth Dasari, Webtechops LLP, Icons Producer, SBTS from Noun Project
Andreas Evers
@andreasevers
aevers@korfinancial.com
KOR Financial
www.korfinancial.com

More Related Content

Similar to Evolving Schemas Without Schema Evolution With Andreas Evers | Current 2022

Patterns of the Lambda Architecture -- 2015 April - Hadoop Summit, Europe
Patterns of the Lambda Architecture -- 2015 April - Hadoop Summit, EuropePatterns of the Lambda Architecture -- 2015 April - Hadoop Summit, Europe
Patterns of the Lambda Architecture -- 2015 April - Hadoop Summit, EuropeFlip Kromer
 
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016 Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016 Alexander Lisachenko
 
Producing, publishing and consuming linked data - CSHALS 2013
Producing, publishing and consuming linked data - CSHALS 2013Producing, publishing and consuming linked data - CSHALS 2013
Producing, publishing and consuming linked data - CSHALS 2013François Belleau
 
Elastic Data Analytics Platform @Datadog
Elastic Data Analytics Platform @DatadogElastic Data Analytics Platform @Datadog
Elastic Data Analytics Platform @DatadogC4Media
 
Digital Rebar Community Welcome Guide
Digital Rebar Community Welcome GuideDigital Rebar Community Welcome Guide
Digital Rebar Community Welcome GuideRackN
 
Backing Data Silo Atack: Alfresco sharding, SOLR for non-flat objects
Backing Data Silo Atack: Alfresco sharding, SOLR for non-flat objectsBacking Data Silo Atack: Alfresco sharding, SOLR for non-flat objects
Backing Data Silo Atack: Alfresco sharding, SOLR for non-flat objectsITD Systems
 
TDC2017 | POA Trilha BigData - Escalabilidade, Performance e Arquitetura do A...
TDC2017 | POA Trilha BigData - Escalabilidade, Performance e Arquitetura do A...TDC2017 | POA Trilha BigData - Escalabilidade, Performance e Arquitetura do A...
TDC2017 | POA Trilha BigData - Escalabilidade, Performance e Arquitetura do A...tdc-globalcode
 
Dissolving the Problem (Making an ACID-Compliant Database Out of Apache Kafka®)
Dissolving the Problem (Making an ACID-Compliant Database Out of Apache Kafka®)Dissolving the Problem (Making an ACID-Compliant Database Out of Apache Kafka®)
Dissolving the Problem (Making an ACID-Compliant Database Out of Apache Kafka®)confluent
 
SQL on Hadoop benchmarks using TPC-DS query set
SQL on Hadoop benchmarks using TPC-DS query setSQL on Hadoop benchmarks using TPC-DS query set
SQL on Hadoop benchmarks using TPC-DS query setKognitio
 
Groovy On The Trading Desk
Groovy On The Trading DeskGroovy On The Trading Desk
Groovy On The Trading DeskJonathan Felch
 
[RakutenTechConf2014] [D-4] The next step of LeoFS and Introducing NewDB Project
[RakutenTechConf2014] [D-4] The next step of LeoFS and Introducing NewDB Project[RakutenTechConf2014] [D-4] The next step of LeoFS and Introducing NewDB Project
[RakutenTechConf2014] [D-4] The next step of LeoFS and Introducing NewDB ProjectRakuten Group, Inc.
 
Hadoop made fast - Why Virtual Reality Needed Stream Processing to Survive
Hadoop made fast - Why Virtual Reality Needed Stream Processing to SurviveHadoop made fast - Why Virtual Reality Needed Stream Processing to Survive
Hadoop made fast - Why Virtual Reality Needed Stream Processing to Surviveconfluent
 
Batch import of large RDF datasets into Semantic MediaWiki
Batch import of large RDF datasets into Semantic MediaWikiBatch import of large RDF datasets into Semantic MediaWiki
Batch import of large RDF datasets into Semantic MediaWikiSamuel Lampa
 
Near Real Time Indexing: Presented by Umesh Prasad & Thejus V M, Flipkart
Near Real Time Indexing: Presented by Umesh Prasad & Thejus V M, FlipkartNear Real Time Indexing: Presented by Umesh Prasad & Thejus V M, Flipkart
Near Real Time Indexing: Presented by Umesh Prasad & Thejus V M, FlipkartLucidworks
 
ITCamp 2017 - Raffaele Rialdi - Adopting .NET Core in Mainstream Projects
ITCamp 2017 - Raffaele Rialdi - Adopting .NET Core in Mainstream ProjectsITCamp 2017 - Raffaele Rialdi - Adopting .NET Core in Mainstream Projects
ITCamp 2017 - Raffaele Rialdi - Adopting .NET Core in Mainstream ProjectsITCamp
 
Music Recommender Systems
Music Recommender SystemsMusic Recommender Systems
Music Recommender Systemsfuchaoqun
 
Diagnose Your Microservices
Diagnose Your MicroservicesDiagnose Your Microservices
Diagnose Your MicroservicesMarcus Hirt
 
IAA Life in Lockdown series: Securing Internet Routing
IAA Life in Lockdown series: Securing Internet RoutingIAA Life in Lockdown series: Securing Internet Routing
IAA Life in Lockdown series: Securing Internet RoutingAPNIC
 
From SMW to Rules
From SMW to RulesFrom SMW to Rules
From SMW to RulesJie Bao
 

Similar to Evolving Schemas Without Schema Evolution With Andreas Evers | Current 2022 (20)

Patterns of the Lambda Architecture -- 2015 April - Hadoop Summit, Europe
Patterns of the Lambda Architecture -- 2015 April - Hadoop Summit, EuropePatterns of the Lambda Architecture -- 2015 April - Hadoop Summit, Europe
Patterns of the Lambda Architecture -- 2015 April - Hadoop Summit, Europe
 
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016 Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016
 
Producing, publishing and consuming linked data - CSHALS 2013
Producing, publishing and consuming linked data - CSHALS 2013Producing, publishing and consuming linked data - CSHALS 2013
Producing, publishing and consuming linked data - CSHALS 2013
 
Elastic Data Analytics Platform @Datadog
Elastic Data Analytics Platform @DatadogElastic Data Analytics Platform @Datadog
Elastic Data Analytics Platform @Datadog
 
Digital Rebar Community Welcome Guide
Digital Rebar Community Welcome GuideDigital Rebar Community Welcome Guide
Digital Rebar Community Welcome Guide
 
Backing Data Silo Atack: Alfresco sharding, SOLR for non-flat objects
Backing Data Silo Atack: Alfresco sharding, SOLR for non-flat objectsBacking Data Silo Atack: Alfresco sharding, SOLR for non-flat objects
Backing Data Silo Atack: Alfresco sharding, SOLR for non-flat objects
 
TDC2017 | POA Trilha BigData - Escalabilidade, Performance e Arquitetura do A...
TDC2017 | POA Trilha BigData - Escalabilidade, Performance e Arquitetura do A...TDC2017 | POA Trilha BigData - Escalabilidade, Performance e Arquitetura do A...
TDC2017 | POA Trilha BigData - Escalabilidade, Performance e Arquitetura do A...
 
Dissolving the Problem (Making an ACID-Compliant Database Out of Apache Kafka®)
Dissolving the Problem (Making an ACID-Compliant Database Out of Apache Kafka®)Dissolving the Problem (Making an ACID-Compliant Database Out of Apache Kafka®)
Dissolving the Problem (Making an ACID-Compliant Database Out of Apache Kafka®)
 
SQL on Hadoop benchmarks using TPC-DS query set
SQL on Hadoop benchmarks using TPC-DS query setSQL on Hadoop benchmarks using TPC-DS query set
SQL on Hadoop benchmarks using TPC-DS query set
 
Groovy On The Trading Desk
Groovy On The Trading DeskGroovy On The Trading Desk
Groovy On The Trading Desk
 
[RakutenTechConf2014] [D-4] The next step of LeoFS and Introducing NewDB Project
[RakutenTechConf2014] [D-4] The next step of LeoFS and Introducing NewDB Project[RakutenTechConf2014] [D-4] The next step of LeoFS and Introducing NewDB Project
[RakutenTechConf2014] [D-4] The next step of LeoFS and Introducing NewDB Project
 
Hadoop made fast - Why Virtual Reality Needed Stream Processing to Survive
Hadoop made fast - Why Virtual Reality Needed Stream Processing to SurviveHadoop made fast - Why Virtual Reality Needed Stream Processing to Survive
Hadoop made fast - Why Virtual Reality Needed Stream Processing to Survive
 
Batch import of large RDF datasets into Semantic MediaWiki
Batch import of large RDF datasets into Semantic MediaWikiBatch import of large RDF datasets into Semantic MediaWiki
Batch import of large RDF datasets into Semantic MediaWiki
 
Near Real Time Indexing: Presented by Umesh Prasad & Thejus V M, Flipkart
Near Real Time Indexing: Presented by Umesh Prasad & Thejus V M, FlipkartNear Real Time Indexing: Presented by Umesh Prasad & Thejus V M, Flipkart
Near Real Time Indexing: Presented by Umesh Prasad & Thejus V M, Flipkart
 
ITCamp 2017 - Raffaele Rialdi - Adopting .NET Core in Mainstream Projects
ITCamp 2017 - Raffaele Rialdi - Adopting .NET Core in Mainstream ProjectsITCamp 2017 - Raffaele Rialdi - Adopting .NET Core in Mainstream Projects
ITCamp 2017 - Raffaele Rialdi - Adopting .NET Core in Mainstream Projects
 
Music Recommender Systems
Music Recommender SystemsMusic Recommender Systems
Music Recommender Systems
 
Diagnose Your Microservices
Diagnose Your MicroservicesDiagnose Your Microservices
Diagnose Your Microservices
 
IAA Life in Lockdown series: Securing Internet Routing
IAA Life in Lockdown series: Securing Internet RoutingIAA Life in Lockdown series: Securing Internet Routing
IAA Life in Lockdown series: Securing Internet Routing
 
From SMW to Rules
From SMW to RulesFrom SMW to Rules
From SMW to Rules
 
Sword Crig 2007 12 06
Sword Crig 2007 12 06Sword Crig 2007 12 06
Sword Crig 2007 12 06
 

More from 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
 
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 LondonHostedbyConfluent
 
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 TrendyolHostedbyConfluent
 
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 TechniquesHostedbyConfluent
 
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 KafkaHostedbyConfluent
 
Fish Plays Pokemon | Kafka Summit London
Fish Plays Pokemon | Kafka Summit LondonFish Plays Pokemon | Kafka Summit London
Fish Plays Pokemon | Kafka Summit LondonHostedbyConfluent
 
Tiered Storage 101 | Kafla Summit London
Tiered Storage 101 | Kafla Summit LondonTiered Storage 101 | Kafla Summit London
Tiered Storage 101 | Kafla Summit LondonHostedbyConfluent
 
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 WhyHostedbyConfluent
 
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 ...HostedbyConfluent
 
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 ...HostedbyConfluent
 
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 ClustersHostedbyConfluent
 
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 PlatformHostedbyConfluent
 
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 PubHostedbyConfluent
 
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 LondonHostedbyConfluent
 
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 | KSLHostedbyConfluent
 
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 PerformanceHostedbyConfluent
 
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 BeyondHostedbyConfluent
 
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 AppsHostedbyConfluent
 
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 EcosystemHostedbyConfluent
 
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 DisksHostedbyConfluent
 

More from 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
 

Recently uploaded

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
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 CVKhem
 
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.pdfsudhanshuwaghmare1
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
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...apidays
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 

Recently uploaded (20)

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
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
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
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...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 

Evolving Schemas Without Schema Evolution With Andreas Evers | Current 2022

  • 2. Abstract Schema Registry allows us to control how schemas can be evolved through time without breaking compatibility. However, when using high retention, you could end up with a convoluted “dirty” schema depending on the selected compatibility level, as well as many different models in your application logic to support all the schema versions. Upcaster chains allow you to read an old version of a message and bring it to what your logic needs today. The upcasters in the chain describe how to jump from one version to the next. They describe what your logic expects instead of covering all the possible variations that were ever published. We created an upcaster registry to allow you to declare upcasters and their chains in a declarative manner allowing them to be used across all your streaming apps. It is a great combo with Schema Registry; one providing the schemas themselves, the other expressing how to evolve from one schema version to the next.
  • 3. Andreas Evers CTO @ KOR Financial Previously Pivotal / VMware ➢ Staff solution architect consulting for some of the biggest European firms ➢ Focused on application transformation & system design ➢ Worked on Spinnaker, together with the Spring team Who is this guy? @andreasevers
  • 4.
  • 5. Mission Avoid another financial crisis by mapping out risk in financial markets
  • 6. Selena Gomez explains “CDOs”, one of the financial products that were the cause of the 2008 crash
  • 7.
  • 8. KOR Solution Real-time insights based on regulation to make financial products like CDOs transparent to the market and regulators.
  • 9.
  • 10.
  • 11. Most companies use Kafka with a low retention setting, such as 7 days This works great for messaging use cases
  • 12. Kafka can mean so much more for your company
  • 13. The typical use case offloads the streamed events into an external database Those databases typically use commit logs or sequential files internally Such commit logs and sequential files are in fact very similar to Kafka topics and segment files 🤔 Why not use Kafka as the commit log for your data, and become the system of record instead of merely a tunnel
  • 14. KSQL: Turning the database inside-out Source of truth stream Continuous query Derived table
  • 15. High retention offers a lot of benefits, but also comes with its own unique challenges You can’t just wait 7 days for old formats to leave your cluster
  • 16. How do we deal with Evolution?
  • 18.
  • 19. Class People { - Rick - Morty }
  • 20. Class People { - Rick - Morty }
  • 21. - Rick - Morty Class People { - Rick - Morty } 0
  • 22. - Rick - Morty Class People { - Rick - Morty } 0 Class People { - Rick - Morty }
  • 23. - Rick - Morty 0 Class People { - Rick - Morty } Class People { - Rick - Morty - Summer }
  • 24. - Rick - Morty 0 Class People { - Rick - Morty } Class People { - Rick - Morty - Summer } - Rick - Morty - Summer 1
  • 25. - Rick - Morty 0 Class People { - Rick - Morty } Class People { - Rick - Morty - Summer } - Rick - Morty - Summer 1
  • 26. - Rick - Morty 0 Class People { - Rick - Morty } Class People { - Rick - Morty - Summer } - Rick - Morty - Summer 1
  • 27. - Rick - Morty 0 Class People { - Rick - Morty } Class People { - Rick - Morty } 1
  • 28. Class People { - Rick - Morty } - Rick - Morty 0 1 Class People { - Rick - Morty }
  • 29. Class People { - Rick - Morty - Optional<Summer> } - Rick - Morty 0 1 Class People { - Rick - Morty }
  • 30. Class People { - Rick - Morty - Summer } Class People { - Rick - Morty - Optional<Summer> } - Rick - Morty 0 1
  • 31. Class People { - Rick - Morty - Summer } Class People { - Rick - Morty - Optional<Summer> } - Rick - Morty 0 1 - Rick - Morty - Summer
  • 32. Class People { - Rick - Morty - Summer } Class People { - Rick - Morty - Optional<Summer> } - Rick - Morty - Rick - Morty - Summer 0 1
  • 33. Class People { - Rick - Morty - Summer } Class People { - Rick - Morty - Optional<Summer> } - Rick - Morty - Rick - Morty - Summer 0 1
  • 34. Class People { - Rick - Morty - Summer } Class People { - Rick - Morty - Optional<Summer> } - Rick - Morty - Rick - Morty - Summer 0 1
  • 35. 1 Class People { - Rick - Morty - Summer } Class People { - Rick - Morty - Optional<Summer> } - Rick - Morty - Summer
  • 36. 1 Class People { - Rick - Morty - Summer } Class People { - Rick - Morty - Summer } - Rick - Morty - Summer
  • 38. - Rick - Morty Class People { - Rick - Morty } Class People { - Rick - Morty }
  • 39. - Rick - Morty Class People { - Rick - Morty } Class People { - Rick - Morty }
  • 40. - Rick - Morty - Summer Class People { - Rick - Morty } Class People { - Rick - Morty - Summer }
  • 41. Tolerant Reader Postel’s Law, a.k.a. the Robustness Principle: Be conservative in what you do, be liberal in what you accept from others.
  • 42. Client Functions Client Stub Server Functions Server Stub (skeleton) Network Routines Network Routines kernel client process kernel server process network client server
  • 43. Client Objects Client SOAP Handler Server Objects Server SOAP Handler Network Routines Network Routines network kernel client process kernel server process client server
  • 44. SpecificRecord Avro Serdes SpecificRecord Avro Serdes Network Routines Network Routines network kernel client process kernel server process client server
  • 45. mvn generate-sources Look ma, no programming!
  • 46. - Rick - Morty - Summer Class People { - Rick - Morty } Class People { - Rick - Morty - Summer } Be conservative in what you do, be liberal in what you accept from others. @JsonIgnoreProperties (ignoreUnknown = true)
  • 47. - Rick - Morty 0 Class People { - Rick - Morty } Class People { - Rick - Morty - Summer } - Rick - Morty - Summer 1 Be conservative in what you do, be liberal in what you accept from others. Tolerant GenericRecordToDto Deserializer
  • 49. - Rick - Morty 0 Class People { - Rick - Morty } Class People { - Rick } - Rick 1
  • 50. - Rick - Morty 0 Class People { - Rick - Morty } Class People { - Rick } - Rick 1
  • 51. - Rick - Morty 0 Class People { - Rick - Morty } Class People { - PickleRick - Morty } - PickleRick - Morty 1
  • 52. - Rick - Morty 0 Class People { - Rick - Morty } Class People { - PickleRick - Morty } - PickleRick - Morty 1
  • 53. - Rick - Morty 0 Class People { - PickleRick - Morty } Class People { - PickleRick - Morty } - PickleRick - Morty 1
  • 54. - Rick - Morty 0 Class People { - PickleRick - Morty } Class People { - PickleRick - Morty } - PickleRick - Morty 1
  • 55. - Rick: String - Morty 0 Class People { - Rick: String - Morty } Class People { - Rick: boolean - Morty } - Rick: boolean - Morty 1
  • 56. - Rick: String - Morty 0 Class People { - Rick: String - Morty } Class People { - Rick: boolean - Morty } - Rick: boolean - Morty 1
  • 57. How can we prevent breaking consumers?
  • 58. - Rick - Morty 0 Class People { - Rick - Morty } Class People { - Rick - Morty } 1
  • 59. Class People { - Rick - Morty } - Rick - Morty 0 1 Class People { - Rick - Morty }
  • 60. Class People { - Rick - Morty - Optional<Summer> } - Rick - Morty 0 1 Class People { - Rick - Morty }
  • 61. Class People { - Rick - Morty - Summer } Class People { - Rick - Morty - Optional<Summer> } - Rick - Morty 0 1
  • 64. V2
  • 65. V2 Consumer A is on version 2, only uses PickleRick
  • 66. V2 Consumer A is on version 2, only uses PickleRick
  • 67. V2 Consumer A is on version 2, only uses PickleRick
  • 68. V2 Consumer A is on version 2, only uses PickleRick
  • 69. V2 Consumer-Driven Contract Testing Consumer A is on version 2, only uses PickleRick
  • 70. Consumer-Driven Contract Testing ❯ pact-broker can-i-deploy --pacticipant Foo --version 23 --to production
  • 71. Schema Registry Automatic schema management and validation
  • 72. Schema Evolution through Schema Registry Schema Registry • Versions every schema • Every schema has a unique ID • Uses subjects with Topic, Record, or TopicRecord names • For each subject, each schema change gets a version increase Schema ID: foo Schema ID: bar Subject topic-People - Rick - Morty - Rick - Morty - Summer V1 V2
  • 73. Compatibility Types Compatibility Type Changes allowed Check against which schemas Upgrade first BACKWARD Delete fields Add optional fields Last version Consumers BACKWARD_TRANSITIVE Delete fields Add optional fields All previous versions Consumers FORWARD Add fields Delete optional fields Last version Producers FORWARD_TRANSITIVE Add fields Delete optional fields All previous versions Producers FULL Add optional fields Delete optional fields Last version Any order FULL_TRANSITIVE Add optional fields Delete optional fields All previous versions Any order NONE All changes are accepted Compatibility checking disabled Depends
  • 75. Class People { - Rick - Optional<Summer> } Backward 0 1 - Rick - Morty - Rick - Optional<Summer>
  • 76. Class People { - Rick - Optional<Summer> } Class People { - Rick - Optional<Summer> } Backward - Rick - Morty 0 - Rick - Optional<Summer> 1
  • 77. Class People { - Rick - Optional<Summer> } Class People { - Rick - Optional<Summer> } Backward 0 1 - Rick - Morty - Rick - Optional<Summer>
  • 78. Class People { - Rick - Optional<Summer> } Class People { - Rick - Optional<Summer> } Backward 0 1 - Rick - Morty - Rick - Optional<Summer>
  • 79. Class People { - Rick - Optional<Summer> } Class People { - Rick - Optional<Summer> } - Rick - Optional<Summer> Backward
  • 80. Class People { - Rick - Optional<Summer> } Class People { - Rick - Optional<Summer> } - Rick - Optional<Summer> Backward
  • 81. Class People { - Rick - Optional<Summer> } Class People { - Rick - Morty } - Rick - Morty Backward
  • 82. Class People { - Rick - Optional<Summer> } Class People { - Rick - Morty } - Rick - Morty Backward
  • 83. - Rick - Morty 0 Class People { - Rick - Optional<Summer> } - Rick - Optional<Summer> 1 - Rick 2 Backward Transitive
  • 84. - Rick - Morty 0 Class People { - Rick - Optional<Summer> } Class People { - Rick - Optional<Summer> } - Rick - Optional<Summer> 1 - Rick 2 Backward Transitive
  • 85. - Rick - Morty 0 Class People { - Rick - Optional<Summer> } Class People { - Rick - Optional<Summer> } - Rick - Optional<Summer> 1 - Rick 2 Backward Transitive
  • 86. - Rick - Morty 0 Class People { - Rick - Optional<Summer> } Class People { - Rick - Optional<Summer> } - Rick - Optional<Summer> 1 - Rick 2 Backward Transitive
  • 87. - Rick - Morty 0 Class People { - Rick - Optional<Summer> } Class People { - Rick - Optional<Summer> } - Rick - Optional<Summer> 1 - Rick 2 Backward Transitive
  • 89. Class People { - Rick - Optional<Morty> } Class People { - Rick - Optional<Morty> } Forward - Rick - Optional<Morty>
  • 90. Class People { - Rick - Optional<Morty> } Class People { - Rick - Optional<Morty> } Forward - Rick - Optional<Morty>
  • 91. Class People { - Rick - Optional<Morty> } Class People { - Rick - Summer } Forward - Rick - Optional<Morty> - Rick - Summer
  • 92. Class People { - Rick - Optional<Morty> } Class People { - Rick - Optional<Morty> } - Rick - Optional<Morty> Forward
  • 93. Class People { - Rick - Optional<Morty> } Class People { - Rick - Summer } - Rick - Summer Forward
  • 94. - Rick - Optional<Morty> 0 Class People { - Rick - Optional<Morty> } Class People { - Rick - Optional<Morty> } 1 2 Forward Transitive
  • 95. - Rick - Optional<Morty> 0 Class People { - Rick - Optional<Morty> } Class People { - Rick - Optional<Morty> } 1 2 Forward Transitive
  • 96. - Rick - Optional<Morty> 0 Class People { - Rick - Optional<Morty> } Class People { - Rick } 1 - Rick 2 Forward Transitive
  • 97. - Rick - Optional<Morty> 0 Class People { - Rick - Optional<Morty> } Class People { - Rick - Summer } - Rick - Summer 1 - Rick 2 Forward Transitive
  • 98. Short Retention = Full? Backward when • you want to allow the producer to roll back to a previous version, writing a previous schema, without breaking consumers (provided they are tolerant readers) Forward when • you want to allow consumers to read new versions without needing to be updated first (provided they are tolerant readers and non-compatible upgrades are controlled, e.g. using CDCT)
  • 99. High Retention = Full Transitive? Backward transitive when • you want to allow new consumers which will start at offset 0, to be added at any time in the future • or you want to allow producers to roll back to any previous version, writing a previous schema, without breaking consumers (provided they are tolerant readers) Forward transitive when • you want to allow consumers to read new versions without needing to be updated first (provided they are tolerant readers) regardless from where they start consuming
  • 100. High Retention = Full Transitive forever? Class People { - Optional<Rick> - Optional<Morty> - Optional<Summer> - Optional<PickleRick> - Optional<Rick:boolean> }
  • 101. Evolution strategies • Tolerant Reader • Versioned Events • Copy-Transform • Upcasting
  • 102. Copy-Transform A.k.a. Copy & Replace A.k.a. The Parallel Universe
  • 110. Copy-Transform Benefits Drawbacks Relatively simple to implement Complete freedom to do anything you want Data preservation One-time operation Performance
  • 112.
  • 113. Avro defaults give you wire-compatibility Upcasting gives you business-compatibility
  • 114. - Rick - Morty Class People { - PickleRick - Summer } - PickleRick - Summer - Rick
  • 115. - Rick - Morty Class People { - PickleRick - Summer } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick
  • 116. - Rick - Morty Class People { - PickleRick - Summer } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick
  • 117. - Rick - Morty Class People { - PickleRick - Summer } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V3
  • 118. - Rick - Morty Class People { - PickleRick - Summer } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V3 V1 → V2 V2 → V3 V2 → V3
  • 119. - Rick - Morty Class People { - PickleRick - Summer } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V3
  • 120. - Rick - Morty Class People { - PickleRick - Summer } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V3 V2 → V3
  • 121. - Rick - Morty Class People { - PickleRick - Summer } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V3 V2 → V3
  • 122. - Rick - Morty Class People { - PickleRick - Summer } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V3 V1 → V2 V2 → V3 V2 → V3
  • 123. - Rick - Morty Class People { - PickleRick - Summer } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V3 V1 → V2 V2 → V3 V2 → V3
  • 124. - Rick - Morty Class People { - Rick } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V2
  • 125. - Rick - Morty Class People { - Rick } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V2 V1 → V2 V3 → V2
  • 126. - Rick - Morty Class People { - Rick } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V2 V1 → V2 V3 → V2
  • 127. What if some consumers are missing upcasters?
  • 128. - Rick - Morty Class People { - Rick } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V2 V1 → V2 V3 → V2
  • 129. - Rick - Morty Class People { - Rick } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V2 V3 → V2
  • 130. - Rick - Morty Class People { - Rick } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V2 V3 → V2
  • 131. - Rick - Morty Class People { - Rick } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V2
  • 132. - Rick - Morty Class People { - Rick } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V2
  • 133. - Rick - Morty Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V2
  • 134. - Rick - Morty Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V2 V3 V2 V1 V3 V1 V2 V1
  • 135. Upcaster Registry Centralized repository for up- and downcasters
  • 136. Class People { - Rick - Morty } V1
  • 137. Class People { - Rick - Morty } V1 - Rick - Morty V1
  • 138. - Rick - Morty Class People { - Rick - Morty } Class People { - Rick - Morty } V1 V1 V1
  • 139. - Rick - Morty Class People { - Rick - Morty } Class People { - Rick - Morty } V1 V1 V1
  • 140. - Rick - Morty Class People { - Rick - Morty } Class People { - Rick - Morty } V1 V1 V1
  • 141. - Rick - Morty Class People { - Rick - Morty } Class People { - Rick } V1 V1 V2
  • 142. - Rick - Morty Class People { - Rick - Morty } Class People { - Rick } V1 V1 V2 V1 → V2 V2 → V1
  • 143. - Rick - Morty Class People { - Rick - Morty } Class People { - Rick } V1 V1 V2 V1 → V2 V2 → V1 - Rick V2
  • 144. - Rick - Morty Class People { - Rick - Morty } Class People { - Rick } V1 V1 V2 V1 → V2 V2 → V1 - Rick V2
  • 145. - Rick - Morty Class People { - Rick - Morty } Class People { - Rick } V1 V1 V2 V1 → V2 V2 → V1 - Rick V2
  • 146. - Rick - Morty Class People { - Rick - Morty } Class People { - Rick } V1 V1 V2 V1 → V2 V2 → V1 - Rick V2 V2 → V1
  • 147. - Rick - Morty Class People { - Rick } Class People { - Rick } V1 V2 V2 V1 → V2 V2 → V1 - Rick V2
  • 148. - Rick - Morty Class People { - Rick } Class People { - Rick } V1 V2 V2 V1 → V2 V2 → V1 - Rick V2
  • 149. - Rick - Morty Class People { - Rick } Class People { - Rick } V1 V2 V2 V1 → V2 V2 → V1 - Rick V2 V1 → V2
  • 150. - Rick - Morty Class People { - Rick } Class People { - PickleRick - Summer } V1 V2 V3 V1 → V2 V2 → V1 - Rick V2
  • 151. - Rick - Morty Class People { - Rick } Class People { - PickleRick - Summer } V1 V2 V3 V1 → V2 V2 → V1 - Rick V2 V3 → V2 V2 → V3
  • 152. - Rick - Morty Class People { - Rick } Class People { - PickleRick - Summer } - PickleRick - Summer - Rick V1 V2 V3 V2 V1 → V2 V3 → V2 V1 → V2 V3 → V2 V2 → V1 V2 → V3 V3
  • 154. - Rick - Morty 0 Class People { - Rick } Class People { - PickleRick - Summer } - PickleRick - Summer 1 - Rick 2 V1 V2 V3 V2 V1 → V2 V3 → V2 V1 → V2 V3 → V2 V2 → V1 V2 → V3 V3 Consumer A is on V2 Supports V1 and V3
  • 155. ❯ pact-broker can-i-deploy --pacticipant Foo --version 23 --to production
  • 156. Can we combine these evolution strategies?
  • 157. Combining strategies for short retention • Versioned Events • Tolerant Reader • Consumer-driven Contract Testing
  • 158. Combining strategies for short retention This allows you to: • Avoid transitive • Avoid the optional dance • Chase consumers to upgrade • Prevent producers from mistakenly releasing incompatible version after releasing compatible version • Keep your consumers tolerant to change • Keep your consumers ignorant of information they don’t need
  • 159. Combining strategies for high retention • Versioned Events • Upcasting • Upcaster registry • Tolerant Reader • Copy-Transform
  • 160. Combining strategies for high retention This allows you to: • Avoid Full Transitive Forever • Avoid every field being optional • Avoid having to write to countless deprecated fields • Keep your consumers tolerant to change • Keep your consumers ignorant of information they don’t need
  • 161. Thank you! Accreditations: Graphics by Arthur Shlain, Creative Stal, Siddharth Dasari, Webtechops LLP, Icons Producer, SBTS from Noun Project Andreas Evers @andreasevers aevers@korfinancial.com KOR Financial www.korfinancial.com