SlideShare a Scribd company logo
Reigning in Protobuf
Graham Stirling David Navalho
Saxo adopted a ‘data mesh’ architecture in 2019
<< Data Governance
▪ Schema Registry is a “serving layer for your metadata”
▪ Storage, versioning and retrieval of schemas
▪ Enables data discovery
▪ Allows for safe schema evolution
Before we can talk about Protobuf,
we first need to talk about …
common/identifiers.avdl
trading/transaction.avdl instrument/base.avdl
@namespace("domain.common")
protocol Identifiers {
record InstrumentIdentifier {
int id;
}
}
@namespace("domain.trading")
protocol TransactionProtocol {
import idl "common/identifiers.avdl";
record OpenPosition {
domain.common.InstrumentIdentifier id;
}
}
@namespace("domain.instrument")
protocol BaseProtocol {
import idl "common/identifiers.avdl";
record InstrumentBase {
domain.common.InstrumentIdentifier id;
}
}
{
"protocol" : "TransactionProtocol",
"namespace" : "domain.trading",
"types" : [ {
"type" : "record",
"name" : "InstrumentIdentifier",
"namespace" : "domain.common",
"fields" : [ { "name" : "id", "type" : "int" } ]
}, {
"type" : "record",
"name" : "OpenPosition",
"fields" : [ { "name" : "id", "type" : "domain.common.InstrumentIdentifier"
} ]
} ],
"messages" : { }
}
public static final org.apache.avro.Schema SCHEMA$ =
new org.apache.avro.Schema.Parser().parse("{"type":"record"," +
""name":"OpenPosition","namespace":"domain" +
".trading","fields":[{"name":"id"," +
""type":{"type":"record"," +
""name":"InstrumentIdentifier","namespace":"domain" +
".common","fields":[{"name":"id"," +
""type":"int"}]}}]}");
> java –jar avro-tools-1.11.0.jar idl transaction.avdl transaction.avsc
> java –jar avro-tools-1.11.0.jar compile protocol transaction.avsc
lookup
Caused by:
io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException:
Schema not found; error code: 40403
Not all language bindings are created equal
RESOLVED
@matt_howlett
OPEN
OPEN
OPEN
OPEN
OPEN
OPEN OPEN
OPEN
Optimistically tweet Matt Howlett?
A serialization format with no gaps?
Avro Proto3
Schema
Evolution
▪ Required with defaults ▪ Everything is optional
Annotations ▪ Loosely typed e.g.
@info-class(“personal")
▪ Strongly typed e.g.
option (info_class) = PERSONAL
Official Releases
(Since Jan 21)
▪ 2 ▪ > 20
Language
Support (Official)
▪ C#
▪ Java
▪ Python
▪ C++
▪ JS/Perl/PHP/Ruby/Rust
▪ C#
▪ Java/Kotlin
▪ Python
▪ C++
▪ PHP/Ruby/PHP/Go/Dart/Objective-C
Data Lake
Support
▪ Yes ▪ No (mostly)
3rd Party
Ecosystem
▪ Limited (outside of Hadoop) ▪ Rich
lookup
syntax = "proto3";
package domain.trading;
import "common/identifiers.proto";
message OpenPosition {
domain.common.InstrumentIdentifier id = 1;
}
syntax = "proto3";
package domain.common;
message InstrumentIdentifier {
int64 id = 1;
}
static {
java.lang.String[] descriptorData = {
"n031trading/transaction.proto022016domain.trad" +
"ing032030common/identifiers.proto"?n014OpenPosition022/n002id” +
“030001 001(0132#.domain.common.InstrumentIdentifierb006proto3"
};
static {
java.lang.String[] descriptorData = {
"n030common/identifiers.proto022rdomain.common""n024Instr” +
“umentIdentifier022nn002id030001 001(003b006proto3"
};
import "common/v1/change_type.proto";
import "common/v1/client_identifier.proto";
import "common/v1/currency_identifier.proto";
import "common/v1/date.proto";
import "common/v1/uuid.proto";
import "common/v1/employee_identifier.proto";
import "common/v1/quantity.proto";
import "common/v1/timestamp_ticks.proto";
import "common/v1/user_role_type_identifer.proto";
import "common/v1/market_identifier_code.proto";
import "common/instruments/v1/instrument_identifier.proto";
import "common/instruments/v1/instrument_price.proto";
import "common/instruments/v1/instrument_symbol_code.proto";
import "common/trading/v1/commission_group_identifier.proto";
import "common/trading/v1/currency_cut_profile_identifier.proto";
import "common/trading/v1/order_identifier.proto";
import "common/trading/v1/tool_identifier.proto";
import "common/trading/v1/trade_identifier.proto";
import "common/trading/v1/trading_account_public_identifier.proto";
import "common/trading/v1/external_references.proto";
import "trading/v1/open_position_fx_option.proto";
import "trading/v1/open_position_bond.proto";
import "trading/v1/open_position_cfd.proto";
import "trading/v1/open_position_cfd_on_future.proto";
import "trading/v1/open_position_contract_future.proto";
import "trading/v1/open_position_eto.proto";
import "trading/v1/open_position_external_charge.proto";
import "trading/v1/open_position_tax.proto";
import "trading/v1/open_position_transaction_cost.proto";
import "trading/v1/trade_registration.proto";
import "trading/v1/instrument_to_account_rate.proto";
import "trading/v1/open_position_fx.proto";
import "trading/v1/correlation.proto";
[truncated]
404(03)
Not all language bindings are created equal !!!
And as adoption increased, versions changed,
and boundaries pushed, we started to see a lot
more issues cropping up in our support channel …
* To expedite matters, one might consider
skipping making choices entirely, and proceed
straight to regret.
Let’s revisit the original design driver for a
Kafka Schema Registry …
AVRO-1124 (“RESTful service for holding schemas”)
Jay Kreps
“Motivation: Pass around data in serialized form but still
know the exact schema that was used to serialize it. The
overhead of storing the schema with each record is too high
unless the individual records are very large”
Protobuf is different …
Let’s look at how the ID is used by the client …
C# consumer doesn’t care …
Confluent.SchemaRegistry.Serdes.Protobuf/ProtobufDeserializer.cs
The C# producer does care ..
Confluent.SchemaRegistry.Serdes.Protobuf/ProtobufSerializer.cs
… but only because the consumer might
But the latest version might be good enough …
Confluent.SchemaRegistry.Serdes.Protobuf/ProtobufSerializer.cs
… more on that later
Other benefits mentioned in AVRO-1124 …
▪ A graphical browser
▪ Automatic enforcement of compatibility rules
Let’s talk about compatibility rules
Avro
Backward ▪ Delete Mandatory Fields
▪ Add Optional fields
Backward Transitive ▪ Delete Mandatory Fields
▪ Add Optional fields
Forward ▪ Add Mandatory Fields
▪ Delete Optional fields
Forward Transitive ▪ Add Mandatory Fields
▪ Delete Optional fields
Full ▪ Add optional fields
▪ Delete optional fields
Full Transitive ▪ Add optional fields
▪ Delete optional fields
None ▪ All changes accepted
Avro
Backward ▪ Delete Mandatory Fields
▪ Add Optional fields
Backward Transitive ▪ Delete Mandatory Fields
▪ Add Optional fields
Forward ▪ Add Mandatory Fields
▪ Delete Optional fields
Forward Transitive ▪ Add Mandatory Fields
▪ Delete Optional fields
Full ▪ Add optional fields
▪ Delete optional fields
Full Transitive ▪ Add optional fields
▪ Delete optional fields
None ▪ All changes accepted
Avro Proto3 (aka “everything is optional”)
Backward ▪ Delete Mandatory Fields
▪ Add Optional fields
▪ Add Optional fields
▪ Delete Optional fields
Backward Transitive ▪ Delete Mandatory Fields
▪ Add Optional fields
Forward ▪ Add Mandatory Fields
▪ Delete Optional fields
Forward Transitive ▪ Add Mandatory Fields
▪ Delete Optional fields
Full ▪ Add optional fields
▪ Delete optional fields
Full Transitive ▪ Add optional fields
▪ Delete optional fields
None ▪ All changes accepted ▪ All changes accepted
Evolving schemas over time
How does Schema Registry handle it?
409
Intuitively, this looks wrong…
Reserved is your friend…
but not enforced!
Reserved is your friend…
but not enforced!
Multiple event types in the same topic
oneof: data loss scenario
oneof: data loss scenario
oneof: data loss scenario
How does Schema Registry handle it?
409
409
Id: N
Id: N
▪ ONEOF compatibility doesn’t work for us
▪ Field deletion/reserved validation not handled
▪ Need more control over schema evolution
Buf CLI: breaking change detector
Fine grained control of the exact breaking rules we want
Fine grained control of the exact breaking rules we want
Fine grained control of the exact breaking rules we want
Documentation enforcement
Opinionated approach to major versioning (v1, v2, etc)
Naming standardisation
Enforcement of package cohesion
Bonus: Buf CLI linting!
Overall approach
What about Schema Registry?
Future Direction
▪ Use a Schema Registry?
▪ Don’t use a Schema Registry?
▪ Consider what problem you’re trying to solve
Many improvements to Schema Registry e.g.
▪ Compare canonical form (normalize=true)
▪ Better errors (verbose=true)
thanks to a patient Saxo development community
Tak
Graham Stirling David Navalho

More Related Content

What's hot

Esxi troubleshooting
Esxi troubleshootingEsxi troubleshooting
Esxi troubleshooting
Ovi Chis
 
Weblogic 12c installation (oracle linux)
Weblogic 12c installation (oracle linux)Weblogic 12c installation (oracle linux)
Weblogic 12c installation (oracle linux)
Osama Mustafa
 
Apache Kafka® Security Overview
Apache Kafka® Security OverviewApache Kafka® Security Overview
Apache Kafka® Security Overview
confluent
 
VMware vSphere Networking deep dive
VMware vSphere Networking deep diveVMware vSphere Networking deep dive
VMware vSphere Networking deep dive
Sanjeev Kumar
 
Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018
Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018
Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018
Amazon Web Services
 
Getting up to speed with Kafka Connect: from the basics to the latest feature...
Getting up to speed with Kafka Connect: from the basics to the latest feature...Getting up to speed with Kafka Connect: from the basics to the latest feature...
Getting up to speed with Kafka Connect: from the basics to the latest feature...
HostedbyConfluent
 
OSPF External Route Summarization
OSPF External Route Summarization OSPF External Route Summarization
OSPF External Route Summarization
NetProtocol Xpert
 
How to Lock Down Apache Kafka and Keep Your Streams Safe
How to Lock Down Apache Kafka and Keep Your Streams SafeHow to Lock Down Apache Kafka and Keep Your Streams Safe
How to Lock Down Apache Kafka and Keep Your Streams Safe
confluent
 
Apache Phoenix Query Server
Apache Phoenix Query ServerApache Phoenix Query Server
Apache Phoenix Query Server
Josh Elser
 
Apache NiFi Record Processing
Apache NiFi Record ProcessingApache NiFi Record Processing
Apache NiFi Record Processing
Bryan Bende
 
Introduction to Apache Kafka
Introduction to Apache KafkaIntroduction to Apache Kafka
Introduction to Apache Kafka
Jeff Holoman
 
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Kafka Tutorial - Introduction to Apache Kafka (Part 1)Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Jean-Paul Azar
 
How to size up an Apache Cassandra cluster (Training)
How to size up an Apache Cassandra cluster (Training)How to size up an Apache Cassandra cluster (Training)
How to size up an Apache Cassandra cluster (Training)
DataStax Academy
 
Get the Most Out of Amazon EC2: A Deep Dive on Reserved, On-Demand, and Spot ...
Get the Most Out of Amazon EC2: A Deep Dive on Reserved, On-Demand, and Spot ...Get the Most Out of Amazon EC2: A Deep Dive on Reserved, On-Demand, and Spot ...
Get the Most Out of Amazon EC2: A Deep Dive on Reserved, On-Demand, and Spot ...
Amazon Web Services
 
RedHat OpenStack Platform Overview
RedHat OpenStack Platform OverviewRedHat OpenStack Platform Overview
RedHat OpenStack Platform Overview
indevlab
 
From Message to Cluster: A Realworld Introduction to Kafka Capacity Planning
From Message to Cluster: A Realworld Introduction to Kafka Capacity PlanningFrom Message to Cluster: A Realworld Introduction to Kafka Capacity Planning
From Message to Cluster: A Realworld Introduction to Kafka Capacity Planning
confluent
 
Apache Phoenix and HBase: Past, Present and Future of SQL over HBase
Apache Phoenix and HBase: Past, Present and Future of SQL over HBaseApache Phoenix and HBase: Past, Present and Future of SQL over HBase
Apache Phoenix and HBase: Past, Present and Future of SQL over HBase
DataWorks Summit/Hadoop Summit
 
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
HostedbyConfluent
 
Server operating system file
Server operating system fileServer operating system file
Server operating system file
MirzaShabi1
 
Introduction to nexux from zero to Hero
Introduction to nexux  from zero to HeroIntroduction to nexux  from zero to Hero
Introduction to nexux from zero to Hero
Dhruv Sharma
 

What's hot (20)

Esxi troubleshooting
Esxi troubleshootingEsxi troubleshooting
Esxi troubleshooting
 
Weblogic 12c installation (oracle linux)
Weblogic 12c installation (oracle linux)Weblogic 12c installation (oracle linux)
Weblogic 12c installation (oracle linux)
 
Apache Kafka® Security Overview
Apache Kafka® Security OverviewApache Kafka® Security Overview
Apache Kafka® Security Overview
 
VMware vSphere Networking deep dive
VMware vSphere Networking deep diveVMware vSphere Networking deep dive
VMware vSphere Networking deep dive
 
Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018
Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018
Deep Dive on PostgreSQL Databases on Amazon RDS (DAT324) - AWS re:Invent 2018
 
Getting up to speed with Kafka Connect: from the basics to the latest feature...
Getting up to speed with Kafka Connect: from the basics to the latest feature...Getting up to speed with Kafka Connect: from the basics to the latest feature...
Getting up to speed with Kafka Connect: from the basics to the latest feature...
 
OSPF External Route Summarization
OSPF External Route Summarization OSPF External Route Summarization
OSPF External Route Summarization
 
How to Lock Down Apache Kafka and Keep Your Streams Safe
How to Lock Down Apache Kafka and Keep Your Streams SafeHow to Lock Down Apache Kafka and Keep Your Streams Safe
How to Lock Down Apache Kafka and Keep Your Streams Safe
 
Apache Phoenix Query Server
Apache Phoenix Query ServerApache Phoenix Query Server
Apache Phoenix Query Server
 
Apache NiFi Record Processing
Apache NiFi Record ProcessingApache NiFi Record Processing
Apache NiFi Record Processing
 
Introduction to Apache Kafka
Introduction to Apache KafkaIntroduction to Apache Kafka
Introduction to Apache Kafka
 
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Kafka Tutorial - Introduction to Apache Kafka (Part 1)Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
 
How to size up an Apache Cassandra cluster (Training)
How to size up an Apache Cassandra cluster (Training)How to size up an Apache Cassandra cluster (Training)
How to size up an Apache Cassandra cluster (Training)
 
Get the Most Out of Amazon EC2: A Deep Dive on Reserved, On-Demand, and Spot ...
Get the Most Out of Amazon EC2: A Deep Dive on Reserved, On-Demand, and Spot ...Get the Most Out of Amazon EC2: A Deep Dive on Reserved, On-Demand, and Spot ...
Get the Most Out of Amazon EC2: A Deep Dive on Reserved, On-Demand, and Spot ...
 
RedHat OpenStack Platform Overview
RedHat OpenStack Platform OverviewRedHat OpenStack Platform Overview
RedHat OpenStack Platform Overview
 
From Message to Cluster: A Realworld Introduction to Kafka Capacity Planning
From Message to Cluster: A Realworld Introduction to Kafka Capacity PlanningFrom Message to Cluster: A Realworld Introduction to Kafka Capacity Planning
From Message to Cluster: A Realworld Introduction to Kafka Capacity Planning
 
Apache Phoenix and HBase: Past, Present and Future of SQL over HBase
Apache Phoenix and HBase: Past, Present and Future of SQL over HBaseApache Phoenix and HBase: Past, Present and Future of SQL over HBase
Apache Phoenix and HBase: Past, Present and Future of SQL over HBase
 
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
Developing Kafka Streams Applications with Upgradability in Mind with Neil Bu...
 
Server operating system file
Server operating system fileServer operating system file
Server operating system file
 
Introduction to nexux from zero to Hero
Introduction to nexux  from zero to HeroIntroduction to nexux  from zero to Hero
Introduction to nexux from zero to Hero
 

Similar to Reigning in Protobuf with David Navalho and Graham Stirling | Kafka Summit London 2022

Webinar: Extend The Power of The ForgeRock Identity Platform Through Scripting
Webinar: Extend The Power of The ForgeRock Identity Platform Through ScriptingWebinar: Extend The Power of The ForgeRock Identity Platform Through Scripting
Webinar: Extend The Power of The ForgeRock Identity Platform Through Scripting
ForgeRock
 
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
DataStax Academy
 
Intravert Server side processing for Cassandra
Intravert Server side processing for CassandraIntravert Server side processing for Cassandra
Intravert Server side processing for Cassandra
Edward Capriolo
 
A First Date With Scala
A First Date With ScalaA First Date With Scala
A First Date With Scala
Franco Lombardo
 
File Transfer Through Sockets
File Transfer Through SocketsFile Transfer Through Sockets
File Transfer Through Sockets
adil raja
 
Secure pl-sql-coding
Secure pl-sql-codingSecure pl-sql-coding
Secure pl-sql-coding
Trần Bình Hậu
 
Silver Light By Nyros Developer
Silver Light By Nyros DeveloperSilver Light By Nyros Developer
Silver Light By Nyros Developer
Nyros Technologies
 
Mojolicious
MojoliciousMojolicious
Mojolicious
Marcus Ramberg
 
Implementing SunGard Banner Voice Response
Implementing SunGard Banner Voice ResponseImplementing SunGard Banner Voice Response
Implementing SunGard Banner Voice Response
egrong
 
AVRO to JSON Conversion
AVRO to JSON ConversionAVRO to JSON Conversion
AVRO to JSON Conversion
ManjuKumara GH
 
From GameMaker to Game Baker - Porting Hotline Miami
From GameMaker to Game Baker - Porting Hotline MiamiFrom GameMaker to Game Baker - Porting Hotline Miami
From GameMaker to Game Baker - Porting Hotline Miami
Frans Kasper
 
Introduccion a HTML5
Introduccion a HTML5Introduccion a HTML5
Introduccion a HTML5
Pablo Garaizar
 
html5
html5html5
Building an Observability Platform in 389 Difficult Steps
Building an Observability Platform in 389 Difficult StepsBuilding an Observability Platform in 389 Difficult Steps
Building an Observability Platform in 389 Difficult Steps
DigitalOcean
 
OSMC 2013 | Distributed Monitoring and Cloud Scaling for Web Apps by Fernando...
OSMC 2013 | Distributed Monitoring and Cloud Scaling for Web Apps by Fernando...OSMC 2013 | Distributed Monitoring and Cloud Scaling for Web Apps by Fernando...
OSMC 2013 | Distributed Monitoring and Cloud Scaling for Web Apps by Fernando...
NETWAYS
 
Windows Server 2008 for Developers - Part 2
Windows Server 2008 for Developers - Part 2Windows Server 2008 for Developers - Part 2
Windows Server 2008 for Developers - Part 2
ukdpe
 
Introduction of Pharo 5.0
Introduction of Pharo 5.0Introduction of Pharo 5.0
Introduction of Pharo 5.0
Masashi Umezawa
 
How to build Simple yet powerful API.pptx
How to build Simple yet powerful API.pptxHow to build Simple yet powerful API.pptx
How to build Simple yet powerful API.pptx
Channa Ly
 
Lightning Component - Components, Actions and Events
Lightning Component - Components, Actions and EventsLightning Component - Components, Actions and Events
Lightning Component - Components, Actions and Events
Durgesh Dhoot
 
Client-side JavaScript Vulnerabilities
Client-side JavaScript VulnerabilitiesClient-side JavaScript Vulnerabilities
Client-side JavaScript Vulnerabilities
Ory Segal
 

Similar to Reigning in Protobuf with David Navalho and Graham Stirling | Kafka Summit London 2022 (20)

Webinar: Extend The Power of The ForgeRock Identity Platform Through Scripting
Webinar: Extend The Power of The ForgeRock Identity Platform Through ScriptingWebinar: Extend The Power of The ForgeRock Identity Platform Through Scripting
Webinar: Extend The Power of The ForgeRock Identity Platform Through Scripting
 
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
 
Intravert Server side processing for Cassandra
Intravert Server side processing for CassandraIntravert Server side processing for Cassandra
Intravert Server side processing for Cassandra
 
A First Date With Scala
A First Date With ScalaA First Date With Scala
A First Date With Scala
 
File Transfer Through Sockets
File Transfer Through SocketsFile Transfer Through Sockets
File Transfer Through Sockets
 
Secure pl-sql-coding
Secure pl-sql-codingSecure pl-sql-coding
Secure pl-sql-coding
 
Silver Light By Nyros Developer
Silver Light By Nyros DeveloperSilver Light By Nyros Developer
Silver Light By Nyros Developer
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Implementing SunGard Banner Voice Response
Implementing SunGard Banner Voice ResponseImplementing SunGard Banner Voice Response
Implementing SunGard Banner Voice Response
 
AVRO to JSON Conversion
AVRO to JSON ConversionAVRO to JSON Conversion
AVRO to JSON Conversion
 
From GameMaker to Game Baker - Porting Hotline Miami
From GameMaker to Game Baker - Porting Hotline MiamiFrom GameMaker to Game Baker - Porting Hotline Miami
From GameMaker to Game Baker - Porting Hotline Miami
 
Introduccion a HTML5
Introduccion a HTML5Introduccion a HTML5
Introduccion a HTML5
 
html5
html5html5
html5
 
Building an Observability Platform in 389 Difficult Steps
Building an Observability Platform in 389 Difficult StepsBuilding an Observability Platform in 389 Difficult Steps
Building an Observability Platform in 389 Difficult Steps
 
OSMC 2013 | Distributed Monitoring and Cloud Scaling for Web Apps by Fernando...
OSMC 2013 | Distributed Monitoring and Cloud Scaling for Web Apps by Fernando...OSMC 2013 | Distributed Monitoring and Cloud Scaling for Web Apps by Fernando...
OSMC 2013 | Distributed Monitoring and Cloud Scaling for Web Apps by Fernando...
 
Windows Server 2008 for Developers - Part 2
Windows Server 2008 for Developers - Part 2Windows Server 2008 for Developers - Part 2
Windows Server 2008 for Developers - Part 2
 
Introduction of Pharo 5.0
Introduction of Pharo 5.0Introduction of Pharo 5.0
Introduction of Pharo 5.0
 
How to build Simple yet powerful API.pptx
How to build Simple yet powerful API.pptxHow to build Simple yet powerful API.pptx
How to build Simple yet powerful API.pptx
 
Lightning Component - Components, Actions and Events
Lightning Component - Components, Actions and EventsLightning Component - Components, Actions and Events
Lightning Component - Components, Actions and Events
 
Client-side JavaScript Vulnerabilities
Client-side JavaScript VulnerabilitiesClient-side JavaScript Vulnerabilities
Client-side JavaScript Vulnerabilities
 

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 London
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
 
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
HostedbyConfluent
 
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
HostedbyConfluent
 
Fish Plays Pokemon | Kafka Summit London
Fish Plays Pokemon | Kafka Summit LondonFish Plays Pokemon | Kafka Summit London
Fish Plays Pokemon | Kafka Summit London
HostedbyConfluent
 
Tiered Storage 101 | Kafla Summit London
Tiered Storage 101 | Kafla Summit LondonTiered Storage 101 | Kafla Summit London
Tiered Storage 101 | Kafla Summit London
HostedbyConfluent
 
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
HostedbyConfluent
 
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 Clusters
HostedbyConfluent
 
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
HostedbyConfluent
 
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
HostedbyConfluent
 
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
HostedbyConfluent
 
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
HostedbyConfluent
 
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
HostedbyConfluent
 
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
HostedbyConfluent
 
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
HostedbyConfluent
 
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
HostedbyConfluent
 
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
HostedbyConfluent
 

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

Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Zilliz
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 

Recently uploaded (20)

Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 

Reigning in Protobuf with David Navalho and Graham Stirling | Kafka Summit London 2022

  • 1. Reigning in Protobuf Graham Stirling David Navalho
  • 2. Saxo adopted a ‘data mesh’ architecture in 2019
  • 3.
  • 4.
  • 6.
  • 7.
  • 8. ▪ Schema Registry is a “serving layer for your metadata” ▪ Storage, versioning and retrieval of schemas ▪ Enables data discovery ▪ Allows for safe schema evolution
  • 9.
  • 10.
  • 11.
  • 12. Before we can talk about Protobuf, we first need to talk about …
  • 13.
  • 14. common/identifiers.avdl trading/transaction.avdl instrument/base.avdl @namespace("domain.common") protocol Identifiers { record InstrumentIdentifier { int id; } } @namespace("domain.trading") protocol TransactionProtocol { import idl "common/identifiers.avdl"; record OpenPosition { domain.common.InstrumentIdentifier id; } } @namespace("domain.instrument") protocol BaseProtocol { import idl "common/identifiers.avdl"; record InstrumentBase { domain.common.InstrumentIdentifier id; } }
  • 15. { "protocol" : "TransactionProtocol", "namespace" : "domain.trading", "types" : [ { "type" : "record", "name" : "InstrumentIdentifier", "namespace" : "domain.common", "fields" : [ { "name" : "id", "type" : "int" } ] }, { "type" : "record", "name" : "OpenPosition", "fields" : [ { "name" : "id", "type" : "domain.common.InstrumentIdentifier" } ] } ], "messages" : { } } public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{"type":"record"," + ""name":"OpenPosition","namespace":"domain" + ".trading","fields":[{"name":"id"," + ""type":{"type":"record"," + ""name":"InstrumentIdentifier","namespace":"domain" + ".common","fields":[{"name":"id"," + ""type":"int"}]}}]}"); > java –jar avro-tools-1.11.0.jar idl transaction.avdl transaction.avsc > java –jar avro-tools-1.11.0.jar compile protocol transaction.avsc lookup
  • 17. Not all language bindings are created equal
  • 20.
  • 21. A serialization format with no gaps?
  • 22.
  • 23. Avro Proto3 Schema Evolution ▪ Required with defaults ▪ Everything is optional Annotations ▪ Loosely typed e.g. @info-class(“personal") ▪ Strongly typed e.g. option (info_class) = PERSONAL Official Releases (Since Jan 21) ▪ 2 ▪ > 20 Language Support (Official) ▪ C# ▪ Java ▪ Python ▪ C++ ▪ JS/Perl/PHP/Ruby/Rust ▪ C# ▪ Java/Kotlin ▪ Python ▪ C++ ▪ PHP/Ruby/PHP/Go/Dart/Objective-C Data Lake Support ▪ Yes ▪ No (mostly) 3rd Party Ecosystem ▪ Limited (outside of Hadoop) ▪ Rich
  • 24. lookup syntax = "proto3"; package domain.trading; import "common/identifiers.proto"; message OpenPosition { domain.common.InstrumentIdentifier id = 1; } syntax = "proto3"; package domain.common; message InstrumentIdentifier { int64 id = 1; } static { java.lang.String[] descriptorData = { "n031trading/transaction.proto022016domain.trad" + "ing032030common/identifiers.proto"?n014OpenPosition022/n002id” + “030001 001(0132#.domain.common.InstrumentIdentifierb006proto3" }; static { java.lang.String[] descriptorData = { "n030common/identifiers.proto022rdomain.common""n024Instr” + “umentIdentifier022nn002id030001 001(003b006proto3" };
  • 25. import "common/v1/change_type.proto"; import "common/v1/client_identifier.proto"; import "common/v1/currency_identifier.proto"; import "common/v1/date.proto"; import "common/v1/uuid.proto"; import "common/v1/employee_identifier.proto"; import "common/v1/quantity.proto"; import "common/v1/timestamp_ticks.proto"; import "common/v1/user_role_type_identifer.proto"; import "common/v1/market_identifier_code.proto"; import "common/instruments/v1/instrument_identifier.proto"; import "common/instruments/v1/instrument_price.proto"; import "common/instruments/v1/instrument_symbol_code.proto"; import "common/trading/v1/commission_group_identifier.proto"; import "common/trading/v1/currency_cut_profile_identifier.proto"; import "common/trading/v1/order_identifier.proto"; import "common/trading/v1/tool_identifier.proto"; import "common/trading/v1/trade_identifier.proto"; import "common/trading/v1/trading_account_public_identifier.proto"; import "common/trading/v1/external_references.proto"; import "trading/v1/open_position_fx_option.proto"; import "trading/v1/open_position_bond.proto"; import "trading/v1/open_position_cfd.proto"; import "trading/v1/open_position_cfd_on_future.proto"; import "trading/v1/open_position_contract_future.proto"; import "trading/v1/open_position_eto.proto"; import "trading/v1/open_position_external_charge.proto"; import "trading/v1/open_position_tax.proto"; import "trading/v1/open_position_transaction_cost.proto"; import "trading/v1/trade_registration.proto"; import "trading/v1/instrument_to_account_rate.proto"; import "trading/v1/open_position_fx.proto"; import "trading/v1/correlation.proto"; [truncated]
  • 27. Not all language bindings are created equal !!!
  • 28. And as adoption increased, versions changed, and boundaries pushed, we started to see a lot more issues cropping up in our support channel …
  • 29.
  • 30. * To expedite matters, one might consider skipping making choices entirely, and proceed straight to regret.
  • 31. Let’s revisit the original design driver for a Kafka Schema Registry …
  • 32. AVRO-1124 (“RESTful service for holding schemas”) Jay Kreps
  • 33. “Motivation: Pass around data in serialized form but still know the exact schema that was used to serialize it. The overhead of storing the schema with each record is too high unless the individual records are very large”
  • 34.
  • 36.
  • 37. Let’s look at how the ID is used by the client …
  • 38. C# consumer doesn’t care … Confluent.SchemaRegistry.Serdes.Protobuf/ProtobufDeserializer.cs
  • 39. The C# producer does care .. Confluent.SchemaRegistry.Serdes.Protobuf/ProtobufSerializer.cs … but only because the consumer might
  • 40. But the latest version might be good enough … Confluent.SchemaRegistry.Serdes.Protobuf/ProtobufSerializer.cs … more on that later
  • 41. Other benefits mentioned in AVRO-1124 … ▪ A graphical browser ▪ Automatic enforcement of compatibility rules
  • 42.
  • 43. Let’s talk about compatibility rules
  • 44. Avro Backward ▪ Delete Mandatory Fields ▪ Add Optional fields Backward Transitive ▪ Delete Mandatory Fields ▪ Add Optional fields Forward ▪ Add Mandatory Fields ▪ Delete Optional fields Forward Transitive ▪ Add Mandatory Fields ▪ Delete Optional fields Full ▪ Add optional fields ▪ Delete optional fields Full Transitive ▪ Add optional fields ▪ Delete optional fields None ▪ All changes accepted
  • 45. Avro Backward ▪ Delete Mandatory Fields ▪ Add Optional fields Backward Transitive ▪ Delete Mandatory Fields ▪ Add Optional fields Forward ▪ Add Mandatory Fields ▪ Delete Optional fields Forward Transitive ▪ Add Mandatory Fields ▪ Delete Optional fields Full ▪ Add optional fields ▪ Delete optional fields Full Transitive ▪ Add optional fields ▪ Delete optional fields None ▪ All changes accepted
  • 46. Avro Proto3 (aka “everything is optional”) Backward ▪ Delete Mandatory Fields ▪ Add Optional fields ▪ Add Optional fields ▪ Delete Optional fields Backward Transitive ▪ Delete Mandatory Fields ▪ Add Optional fields Forward ▪ Add Mandatory Fields ▪ Delete Optional fields Forward Transitive ▪ Add Mandatory Fields ▪ Delete Optional fields Full ▪ Add optional fields ▪ Delete optional fields Full Transitive ▪ Add optional fields ▪ Delete optional fields None ▪ All changes accepted ▪ All changes accepted
  • 48.
  • 49.
  • 50.
  • 51. How does Schema Registry handle it?
  • 52.
  • 53.
  • 54.
  • 55.
  • 56. 409
  • 58. Reserved is your friend… but not enforced!
  • 59. Reserved is your friend… but not enforced!
  • 60. Multiple event types in the same topic
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67. oneof: data loss scenario
  • 68. oneof: data loss scenario
  • 69. oneof: data loss scenario
  • 70. How does Schema Registry handle it?
  • 71.
  • 72. 409
  • 73.
  • 74. 409
  • 75.
  • 76. Id: N
  • 77.
  • 78. Id: N
  • 79. ▪ ONEOF compatibility doesn’t work for us ▪ Field deletion/reserved validation not handled ▪ Need more control over schema evolution
  • 80. Buf CLI: breaking change detector
  • 81. Fine grained control of the exact breaking rules we want
  • 82. Fine grained control of the exact breaking rules we want
  • 83. Fine grained control of the exact breaking rules we want
  • 84. Documentation enforcement Opinionated approach to major versioning (v1, v2, etc) Naming standardisation Enforcement of package cohesion Bonus: Buf CLI linting!
  • 86.
  • 87.
  • 88.
  • 89.
  • 90. What about Schema Registry?
  • 91.
  • 92.
  • 94. ▪ Use a Schema Registry? ▪ Don’t use a Schema Registry? ▪ Consider what problem you’re trying to solve
  • 95. Many improvements to Schema Registry e.g. ▪ Compare canonical form (normalize=true) ▪ Better errors (verbose=true)
  • 96. thanks to a patient Saxo development community
  • 97.