SlideShare a Scribd company logo
Designing your Ka
fk
a Streams
Applications with Upgradability In
Mind
Ka
fk
a Summit 2022 London


Neil Buesing, Rill Data
@nbuesing nbuesing
Background
• Principal Solution Architect, Rill Data, Inc.


• Work with clients streaming data into our platform


• 5+ years experience with Ka
fk
a Streams


• Speak on topics I'm passionate about with Apache Ka
fk
a and Ka
fk
a
Streams


• Working from home with the best pair-programmer
Goals
1. Con
fi
dence you can upgrade your application


2. Support for Data Recovery


• e.g., data corrupted due to bug in upgrade


3. Options


• e.g., responsibility


4. Reduce Developer time to achieve upgrade
Topics
1. Name processors


2. Name state stores


3. Minimize rebuilding of state


4. Data evolution


5. Partitioning


6. Microservices




7. Backup & Restore


8. Repartitioning


9. Windowed Stores


10. Circuit Breakers


11. Switches
Name Your Processors
HELLO


My Name Is
0000000001
Name Your Processors
Name Your Processors
• Syntax, add naming to existing con
fi
guration, Named added to those w/out


• Produced.as(), Grouped.as(), Joined.as(), Consumed.as(), Name.as()


• Gotchas - builders & static construction behavior


• Produced.with(Serdes.String(), vSerde).as("name")


• Produced.as("name").withKeySerde(Serdes.String()).withValueSerde(vSerde)


• Produced.<String,PurchaseOrder>as("name")


.withKeySerde(Serdes.String())


.withValueSerde(vSerde)
Name Your Processors
Name Your Processors
HELLO


My Name Is
order-groupBy-id-
fi
lter
Name Your State Stores
HELLO


My Name Is
0000000027
Name Your State Stores
Name Your State Stores
Name Your State Stores
• The most important thing you can do to make upgrades easier


• Simple




KTable<String, User> users =


builder.table(options.getUserTopic(),


Consumed.as("ktable-users"),


Materialized.as("user-table"));
Name Your State Stores
HELLO


My Name Is
user-table
Topology
• Print out topology on application start




final Topology topology = streamsBuilder(options).build(p);


log.info("Topology:n" + topology.describe());


• Visualize with


• https://zz85.github.io/ka
fk
a-streams-viz/
Minimize Rebuilding of State Stores
-changelog
Minimize Rebuilding of State Stores
final StreamsBuilder builder = new StreamsBuilder();


GlobalKTable<String, Store> stores = builder.globalTable("store",


Consumed.as("gktable-stores"),


Materialized.as("store-global-table")


);


GlobalKTable<String, Foo> foo = builder.globalTable("foo",


Consumed.as("gktable-foo"),


Materialized.as("foo-global-table")


);


builder.<String, PurchaseOrder>stream(
.
.
.
)
Minimize Rebuilding of State Stores
./4_1/rocksdb/pickup-order-reduce-store

./4_1/rocksdb/pickup-order-reduce-store/OPTIONS-000013

./4_1/rocksdb/pickup-order-reduce-store/CURRENT

./4_1/rocksdb/pickup-order-reduce-store/LOG

./4_1/rocksdb/pickup-order-reduce-store/IDENTITY

./4_1/rocksdb/pickup-order-reduce-store/OPTIONS-000011

./4_1/rocksdb/pickup-order-reduce-store/000009.log

./4_1/rocksdb/pickup-order-reduce-store/MANIFEST-000008

./4_1/rocksdb/pickup-order-reduce-store/LOCK

./5_1/rocksdb/pickup-order-reduce-store

./5_1/rocksdb/pickup-order-reduce-store/OPTIONS-000013

./5_1/rocksdb/pickup-order-reduce-store/CURRENT

./5_1/rocksdb/pickup-order-reduce-store/LOG

./5_1/rocksdb/pickup-order-reduce-store/IDENTITY

./5_1/rocksdb/pickup-order-reduce-store/OPTIONS-000011

./5_1/rocksdb/pickup-order-reduce-store/000009.log

./5_1/rocksdb/pickup-order-reduce-store/MANIFEST-000008

./5_1/rocksdb/pickup-order-reduce-store/LOCK
Data Evolution
Data Evolution
• Data Modeling


• Data Marshaling


• Data Versioning
Data Evolution - JSON
public class UnmappedProperties {


private final Map<String, Object> map = new LinkedHashMap
<
>
();


@JsonAnyGetter


public Map<String, Object> getUnknownProperties() {


return map;


}


@JsonAnySetter


public void setUnknownProperty(String key, Object value) {


map.put(key, value);


}


}
Data Evolution - JSON
@JsonInclude(JsonInclude.Include.NON_NULL)


public class Product {


private String sku;


@JsonUnwrapped


private UnmappedProperties unmappedProperties = new UnmappedProperties();


public Product(Sku sku) {


this.sku = sku;


}


}
Data Evolution - JSON
• Risk/Pitfall


• Data type changes can break this approach


• Validates 3rd party inputs


• Implement a clearUnknownProperties()
Data Evolution - Avro
• Evolution…


• part of Avro's library


• leveraged by Con
fl
uent's Schema Registry


Data Evolution - Avro
• FULL


• ability to roll-backup


• streams apps are producers and consumers (forward and backward are harder)


• V1 ⟷ V2 and V2 ⟷ V3


• FULL-TRANSITIVE


• Ability to handle aggregations of older versions inde
fi
nitely


• V1 ⟷ V2 and V2 ⟷ V3 and V1 ⟷ V3


Data Evolution - Protobuf
• Tags numbers are encoded,
fi
eld names are not


• optional ⟷ repeated


• no encoding di
ff
erences: writing a repeated value and reading it as an
optional value has "last one wins"


• Renaming
fi
elds ⟶ full evolution


• Renumber tags ⟶ no evolution
Avoid Schema Registry Serialization for Keys
• A simple addition of a default attribute — breaks partitioning


• Exceptions


• output topics for sink connectors (e.g. JDBC Sink)
Data Evolution


(takeaways)
• Full (Forward and Backwards) - easier to roll-back your applications


• Full Transitive - easier to handle old data in your aggregates


• JSON, Avro, and Protobuf all have their own nuances - understand them
Partitioning
Partitioning
Partitioning
Partitioning
• Plan for growth (but…)


• Strive for even work-loads


• Partition for storage is as important (if not more so) than throughput


• Selecting a Partitioning for your Streams Applications


• 12 partitions better than 10 partitions


• avoid primes, 5


• 24 (but at what cost?)




1,2,3,4,6,12 1,2,5,10
1,2,3,4,6,8,12,24
1,5
Partitioning
• If repartitioning is easy


• 4 partitions


• If repartitioning is hard


• 8 or 12 partitions


• 24 partitions (large state stores)


• consider separation into multiple micro services
Validate partitioning on ingestion
• Peek - Log and Exception




builder.createStream("input-topic")


.peek((key, value) -> {… key != value.getKey() …})


• Filter - Log and Ignore




builder.createStream("input-topic")


.
fi
lter((key, value) -> {… key != value.getKey() …})


Micro Services
products
users products
users
Micro Services
• easier to deploy


• more uniform allocation of work


• minimize downtime during restarts


• easier to understand


• threading


• storage
Backup and Restore
store
-changelog
S3
transformation
Backup and Restore
• Event Sourcing


• "In
fi
nite" retention of Input Events


• Replaying Events could take a lot of time
external process
Backup and Restore
source
source
restore
source
store
aggregate
transform
-values
toStream to sink
-changelog
on/off


fi
lter
Backup and Restore
source
source
restore
source
store
aggregate
transform
-values
toStream to sink
• source & restore in same sub-
topology, because they use the
same store.


• restore's transform-values will not
emit events
store
cache
store
restored version
could be emitted
Backup and Restore
source
source
restore
source
store
aggregate
transform
-values
toStream to sink
merge
• transformValues must be created after
aggregate to access aggregate's store.


• restore's transform-values will emit events
(not cached…)


• cached store — aggregate emits duplicate
This how I thought it had to be done.
Backup and Restore
source
source
restore
source
store
reduce toStream to sink
merge
• reduce is aggregate w/out mapping


• restore logic within reduce


• does not have access to headers
Backup and Restore
• transformValues cannot be created before aggregate/reduce since DSL
requires store to be materialized
fi
rst.


• aggregate and reduce do not have access to headers


• if DSL adopts PAPI updated refactoring, it would then be able to.


• understand how store caching and commit interval works
Backup and Restore
• a set of -changelog topics is not an Event Source based system.
co-partitioning
• partitioning of source and restore topics must match


• co-partitioning validation isn't catching this.


• behavior very confusing when they are not the same


(speaking from experience 🤦)
Materialized caching enabled/disabled
• I highly recommend enabling/disabling just to see behavior within your
applications.
Backup and Restore & Data Evolution
source
source
restore
source
store
aggregate
transform
-values
toStream to sink
-changelog
V1
V2
V2
Repartitioning
Repartitioning
• Leverage Built-in Backup and Restore


• On/O
ff
fi
lters so you can discard while brining the application online


• Version your application


• "foo.v1" ➟ "foo.v2"
Repartitioning
source
source
restore.v2
source.v2
store
aggregate
transform
-values
toStream to sink
app.v1-changelog
fi
lter


on/o
f
fi
lter


on/off
app.v2-changelog
Repartitioning
• Considerations around making restore a separate application


• Downtime


• Cut-over


• Using `application.id` for backup


• Keeping the code up to date
Window Stores
Type Boundary Examples
# records for key


@ point in time
Fixed


Size
Tumbling Epoch
[8:00, 8:30)


[8:30, 9:00)
single Yes
Hopping Epoch
[8:00, 8:30)


[8:15, 8:45)


[8:30, 8:45)


[8:45, 9:00)
constant Yes
Sliding Record
[8:02, 8:32]


[8:20, 8:50]


[8:21, 8:51]
variable Yes
Session Record
[8:02, 8:02]


[8:02, 8:10]


[9:10, 12:56]
single


(by tombstoning)
No
Window Stores
• Fixed Windows do NOT store window size (or end timestamp) in the
message


• Release new version and co-exist with old version


• Wait to use new version until windows are "ready"
Window Stores
• Backups


• Event Sourcing
Window Stores
• New Version Challenges


• Very long windows make it harder to wait for cut-over


• epoch


• hydration


• replay incoming events


• How ("When") to have clients cut over to new version


• earliest, latest, or speci
fi
c timestamp


• circuit breaker — moves burden to streams development team.
application.id & versions
• Versions should be a su
ffi
x on application.id


• ".v1", ".v2"


• Leverage ACLs with pre
fi
x on application.id
Circuit Breakers
api.input stream.input
v2
v1
Circuit Breakers
• Starting and Stopping the Circuit Breaker application controls
fl
ow of
messages


• Unable to stop producers


• Complicated streams application


• in-
fl
ight data needs to be handled by same version


• no duplicate processing between version releases
Circuit Breakers
• Added Complexity


• Extra Application


• Extra Topic


• but can have smaller retention time (original is source-of-truth)


• Extra Deployments
Circuit Breaker handy for ksqlDB
• Placing a Ka
fk
a Streams circuit-breaker application gives control in front of
ksqlDB where consumer group selection is not possible


• KSQL query starts from latest


• KLIP-28 "create or replace" solves many issues (0.12.0)


• KLIP-22 "add consumer group id" (proposal - no traction)
Switches
stream.output output
v2
v1 version=v1
version=v2
v2
v1
v1
v2
Switches
• Burden on our deployment, not down-stream applications


• no o
ff
set management changes
Circuit Breakers & Switches
• Do not adopt these w/out need


• Add-in only if (and when) needed
Topics
1. Name processors


2. Name state stores


3. Minimize rebuilding of state


4. Data evolution


5. Partitioning


6. Microservices




7. Backup & Restore


8. Repartitioning


9. Windowed Stores


10. Circuit Breakers


11. Switches
Takeaways
• Do Right Away


• Name your State Stores


• Name your Processors


• Meaningful Partition Size


• Su
ffi
x based versioning
• Start Planning


• Backup/Restore & Repartitioning


• External Applications & Teams


• Release Scheduling


• Data Evolution Strategy
Thank you


Questions?
@nbuesing nbuesing
5 minutes remaining
Upgrading

More Related Content

What's hot

ksqlDB: A Stream-Relational Database System
ksqlDB: A Stream-Relational Database SystemksqlDB: A Stream-Relational Database System
ksqlDB: A Stream-Relational Database System
confluent
 
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
 
Introducing Kafka's Streams API
Introducing Kafka's Streams APIIntroducing Kafka's Streams API
Introducing Kafka's Streams API
confluent
 
Testing Kafka containers with Testcontainers: There and back again with Vikto...
Testing Kafka containers with Testcontainers: There and back again with Vikto...Testing Kafka containers with Testcontainers: There and back again with Vikto...
Testing Kafka containers with Testcontainers: There and back again with Vikto...
HostedbyConfluent
 
Kafka Retry and DLQ
Kafka Retry and DLQKafka Retry and DLQ
Kafka Retry and DLQ
George Teo
 
Introducing KRaft: Kafka Without Zookeeper With Colin McCabe | Current 2022
Introducing KRaft: Kafka Without Zookeeper With Colin McCabe | Current 2022Introducing KRaft: Kafka Without Zookeeper With Colin McCabe | Current 2022
Introducing KRaft: Kafka Without Zookeeper With Colin McCabe | Current 2022
HostedbyConfluent
 
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
 
Deploying Kafka Streams Applications with Docker and Kubernetes
Deploying Kafka Streams Applications with Docker and KubernetesDeploying Kafka Streams Applications with Docker and Kubernetes
Deploying Kafka Streams Applications with Docker and Kubernetes
confluent
 
Improving fault tolerance and scaling out in Kafka Streams with Bill Bejeck |...
Improving fault tolerance and scaling out in Kafka Streams with Bill Bejeck |...Improving fault tolerance and scaling out in Kafka Streams with Bill Bejeck |...
Improving fault tolerance and scaling out in Kafka Streams with Bill Bejeck |...
HostedbyConfluent
 
Stream Processing with Apache Kafka and .NET
Stream Processing with Apache Kafka and .NETStream Processing with Apache Kafka and .NET
Stream Processing with Apache Kafka and .NET
confluent
 
Kafka Connect and Streams (Concepts, Architecture, Features)
Kafka Connect and Streams (Concepts, Architecture, Features)Kafka Connect and Streams (Concepts, Architecture, Features)
Kafka Connect and Streams (Concepts, Architecture, Features)
Kai Wähner
 
Schema Registry 101 with Bill Bejeck | Kafka Summit London 2022
Schema Registry 101 with Bill Bejeck | Kafka Summit London 2022Schema Registry 101 with Bill Bejeck | Kafka Summit London 2022
Schema Registry 101 with Bill Bejeck | Kafka Summit London 2022
HostedbyConfluent
 
Let’s Make Your CFO Happy; A Practical Guide for Kafka Cost Reduction with El...
Let’s Make Your CFO Happy; A Practical Guide for Kafka Cost Reduction with El...Let’s Make Your CFO Happy; A Practical Guide for Kafka Cost Reduction with El...
Let’s Make Your CFO Happy; A Practical Guide for Kafka Cost Reduction with El...
HostedbyConfluent
 
Temporal-Joins in Kafka Streams and ksqlDB | Matthias Sax, Confluent
Temporal-Joins in Kafka Streams and ksqlDB | Matthias Sax, ConfluentTemporal-Joins in Kafka Streams and ksqlDB | Matthias Sax, Confluent
Temporal-Joins in Kafka Streams and ksqlDB | Matthias Sax, Confluent
HostedbyConfluent
 
Kafka 101 and Developer Best Practices
Kafka 101 and Developer Best PracticesKafka 101 and Developer Best Practices
Kafka 101 and Developer Best Practices
confluent
 
A Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and HudiA Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and Hudi
Databricks
 
From Zero to Hero with Kafka Connect
From Zero to Hero with Kafka ConnectFrom Zero to Hero with Kafka Connect
From Zero to Hero with Kafka Connect
confluent
 
Automate Your Kafka Cluster with Kubernetes Custom Resources
Automate Your Kafka Cluster with Kubernetes Custom Resources Automate Your Kafka Cluster with Kubernetes Custom Resources
Automate Your Kafka Cluster with Kubernetes Custom Resources
confluent
 
Bringing Kafka Without Zookeeper Into Production with Colin McCabe | Kafka Su...
Bringing Kafka Without Zookeeper Into Production with Colin McCabe | Kafka Su...Bringing Kafka Without Zookeeper Into Production with Colin McCabe | Kafka Su...
Bringing Kafka Without Zookeeper Into Production with Colin McCabe | Kafka Su...
HostedbyConfluent
 
Producer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaProducer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache Kafka
Jiangjie Qin
 

What's hot (20)

ksqlDB: A Stream-Relational Database System
ksqlDB: A Stream-Relational Database SystemksqlDB: A Stream-Relational Database System
ksqlDB: A Stream-Relational Database System
 
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...
 
Introducing Kafka's Streams API
Introducing Kafka's Streams APIIntroducing Kafka's Streams API
Introducing Kafka's Streams API
 
Testing Kafka containers with Testcontainers: There and back again with Vikto...
Testing Kafka containers with Testcontainers: There and back again with Vikto...Testing Kafka containers with Testcontainers: There and back again with Vikto...
Testing Kafka containers with Testcontainers: There and back again with Vikto...
 
Kafka Retry and DLQ
Kafka Retry and DLQKafka Retry and DLQ
Kafka Retry and DLQ
 
Introducing KRaft: Kafka Without Zookeeper With Colin McCabe | Current 2022
Introducing KRaft: Kafka Without Zookeeper With Colin McCabe | Current 2022Introducing KRaft: Kafka Without Zookeeper With Colin McCabe | Current 2022
Introducing KRaft: Kafka Without Zookeeper With Colin McCabe | Current 2022
 
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)
 
Deploying Kafka Streams Applications with Docker and Kubernetes
Deploying Kafka Streams Applications with Docker and KubernetesDeploying Kafka Streams Applications with Docker and Kubernetes
Deploying Kafka Streams Applications with Docker and Kubernetes
 
Improving fault tolerance and scaling out in Kafka Streams with Bill Bejeck |...
Improving fault tolerance and scaling out in Kafka Streams with Bill Bejeck |...Improving fault tolerance and scaling out in Kafka Streams with Bill Bejeck |...
Improving fault tolerance and scaling out in Kafka Streams with Bill Bejeck |...
 
Stream Processing with Apache Kafka and .NET
Stream Processing with Apache Kafka and .NETStream Processing with Apache Kafka and .NET
Stream Processing with Apache Kafka and .NET
 
Kafka Connect and Streams (Concepts, Architecture, Features)
Kafka Connect and Streams (Concepts, Architecture, Features)Kafka Connect and Streams (Concepts, Architecture, Features)
Kafka Connect and Streams (Concepts, Architecture, Features)
 
Schema Registry 101 with Bill Bejeck | Kafka Summit London 2022
Schema Registry 101 with Bill Bejeck | Kafka Summit London 2022Schema Registry 101 with Bill Bejeck | Kafka Summit London 2022
Schema Registry 101 with Bill Bejeck | Kafka Summit London 2022
 
Let’s Make Your CFO Happy; A Practical Guide for Kafka Cost Reduction with El...
Let’s Make Your CFO Happy; A Practical Guide for Kafka Cost Reduction with El...Let’s Make Your CFO Happy; A Practical Guide for Kafka Cost Reduction with El...
Let’s Make Your CFO Happy; A Practical Guide for Kafka Cost Reduction with El...
 
Temporal-Joins in Kafka Streams and ksqlDB | Matthias Sax, Confluent
Temporal-Joins in Kafka Streams and ksqlDB | Matthias Sax, ConfluentTemporal-Joins in Kafka Streams and ksqlDB | Matthias Sax, Confluent
Temporal-Joins in Kafka Streams and ksqlDB | Matthias Sax, Confluent
 
Kafka 101 and Developer Best Practices
Kafka 101 and Developer Best PracticesKafka 101 and Developer Best Practices
Kafka 101 and Developer Best Practices
 
A Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and HudiA Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and Hudi
 
From Zero to Hero with Kafka Connect
From Zero to Hero with Kafka ConnectFrom Zero to Hero with Kafka Connect
From Zero to Hero with Kafka Connect
 
Automate Your Kafka Cluster with Kubernetes Custom Resources
Automate Your Kafka Cluster with Kubernetes Custom Resources Automate Your Kafka Cluster with Kubernetes Custom Resources
Automate Your Kafka Cluster with Kubernetes Custom Resources
 
Bringing Kafka Without Zookeeper Into Production with Colin McCabe | Kafka Su...
Bringing Kafka Without Zookeeper Into Production with Colin McCabe | Kafka Su...Bringing Kafka Without Zookeeper Into Production with Colin McCabe | Kafka Su...
Bringing Kafka Without Zookeeper Into Production with Colin McCabe | Kafka Su...
 
Producer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaProducer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache Kafka
 

Similar to Developing Kafka Streams Applications with Upgradability in Mind with Neil Buesing | Kafka Summit London 2022

Sf big analytics_2018_04_18: Evolution of the GoPro's data platform
Sf big analytics_2018_04_18: Evolution of the GoPro's data platformSf big analytics_2018_04_18: Evolution of the GoPro's data platform
Sf big analytics_2018_04_18: Evolution of the GoPro's data platform
Chester Chen
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO DevsWO Community
 
Coherence RoadMap 2018
Coherence RoadMap 2018Coherence RoadMap 2018
Coherence RoadMap 2018
harvraja
 
Top 20 FAQs on the Autonomous Database
Top 20 FAQs on the Autonomous DatabaseTop 20 FAQs on the Autonomous Database
Top 20 FAQs on the Autonomous Database
Sandesh Rao
 
[db tech showcase Tokyo 2018] #dbts2018 #B31 『1,2,3 and Done! 3 easy ways to ...
[db tech showcase Tokyo 2018] #dbts2018 #B31 『1,2,3 and Done! 3 easy ways to ...[db tech showcase Tokyo 2018] #dbts2018 #B31 『1,2,3 and Done! 3 easy ways to ...
[db tech showcase Tokyo 2018] #dbts2018 #B31 『1,2,3 and Done! 3 easy ways to ...
Insight Technology, Inc.
 
Access Data from XPages with the Relational Controls
Access Data from XPages with the Relational ControlsAccess Data from XPages with the Relational Controls
Access Data from XPages with the Relational Controls
Teamstudio
 
Data stage Online Training
Data stage Online TrainingData stage Online Training
Data stage Online Training
Glory IT Technologies Pvt. Ltd.
 
An AMIS Overview of Oracle database 12c (12.1)
An AMIS Overview of Oracle database 12c (12.1)An AMIS Overview of Oracle database 12c (12.1)
An AMIS Overview of Oracle database 12c (12.1)
Marco Gralike
 
Oracle DataGuard Online Training in USA | INDIA
Oracle DataGuard Online Training in USA | INDIAOracle DataGuard Online Training in USA | INDIA
Oracle DataGuard Online Training in USA | INDIA
Xoom Trainings
 
An AMIS overview of database 12c
An AMIS overview of database 12cAn AMIS overview of database 12c
Liquibase – a time machine for your data
Liquibase – a time machine for your dataLiquibase – a time machine for your data
Liquibase – a time machine for your data
Neev Technologies
 
Whats new in Oracle Database 12c release 12.1.0.2
Whats new in Oracle Database 12c release 12.1.0.2Whats new in Oracle Database 12c release 12.1.0.2
Whats new in Oracle Database 12c release 12.1.0.2
Connor McDonald
 
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)
Gabriele Bartolini
 
ZZ BC#7.5 asp.net mvc practice and guideline refresh!
ZZ BC#7.5 asp.net mvc practice  and guideline refresh! ZZ BC#7.5 asp.net mvc practice  and guideline refresh!
ZZ BC#7.5 asp.net mvc practice and guideline refresh!
Chalermpon Areepong
 
Level Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With TestcontainersLevel Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With Testcontainers
VMware Tanzu
 
Business_Continuity_Planning_with_SQL_Server_HADR_options_TechEd_Bangalore_20...
Business_Continuity_Planning_with_SQL_Server_HADR_options_TechEd_Bangalore_20...Business_Continuity_Planning_with_SQL_Server_HADR_options_TechEd_Bangalore_20...
Business_Continuity_Planning_with_SQL_Server_HADR_options_TechEd_Bangalore_20...
LarryZaman
 
Solid fire cloudstack storage overview - CloudStack European User Group
Solid fire cloudstack storage overview - CloudStack European User GroupSolid fire cloudstack storage overview - CloudStack European User Group
Solid fire cloudstack storage overview - CloudStack European User Group
ShapeBlue
 
CloudStack Meetup London - Primary Storage Presentation by SolidFire
CloudStack Meetup London - Primary Storage Presentation by SolidFire CloudStack Meetup London - Primary Storage Presentation by SolidFire
CloudStack Meetup London - Primary Storage Presentation by SolidFire
NetApp
 
AOUG_11Nov2016_Challenges_with_EBS12_2
AOUG_11Nov2016_Challenges_with_EBS12_2AOUG_11Nov2016_Challenges_with_EBS12_2
AOUG_11Nov2016_Challenges_with_EBS12_2Sean Braymen
 

Similar to Developing Kafka Streams Applications with Upgradability in Mind with Neil Buesing | Kafka Summit London 2022 (20)

Sf big analytics_2018_04_18: Evolution of the GoPro's data platform
Sf big analytics_2018_04_18: Evolution of the GoPro's data platformSf big analytics_2018_04_18: Evolution of the GoPro's data platform
Sf big analytics_2018_04_18: Evolution of the GoPro's data platform
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO Devs
 
Coherence RoadMap 2018
Coherence RoadMap 2018Coherence RoadMap 2018
Coherence RoadMap 2018
 
Top 20 FAQs on the Autonomous Database
Top 20 FAQs on the Autonomous DatabaseTop 20 FAQs on the Autonomous Database
Top 20 FAQs on the Autonomous Database
 
[db tech showcase Tokyo 2018] #dbts2018 #B31 『1,2,3 and Done! 3 easy ways to ...
[db tech showcase Tokyo 2018] #dbts2018 #B31 『1,2,3 and Done! 3 easy ways to ...[db tech showcase Tokyo 2018] #dbts2018 #B31 『1,2,3 and Done! 3 easy ways to ...
[db tech showcase Tokyo 2018] #dbts2018 #B31 『1,2,3 and Done! 3 easy ways to ...
 
Access Data from XPages with the Relational Controls
Access Data from XPages with the Relational ControlsAccess Data from XPages with the Relational Controls
Access Data from XPages with the Relational Controls
 
Data stage Online Training
Data stage Online TrainingData stage Online Training
Data stage Online Training
 
An AMIS Overview of Oracle database 12c (12.1)
An AMIS Overview of Oracle database 12c (12.1)An AMIS Overview of Oracle database 12c (12.1)
An AMIS Overview of Oracle database 12c (12.1)
 
Oracle DataGuard Online Training in USA | INDIA
Oracle DataGuard Online Training in USA | INDIAOracle DataGuard Online Training in USA | INDIA
Oracle DataGuard Online Training in USA | INDIA
 
An AMIS overview of database 12c
An AMIS overview of database 12cAn AMIS overview of database 12c
An AMIS overview of database 12c
 
Liquibase – a time machine for your data
Liquibase – a time machine for your dataLiquibase – a time machine for your data
Liquibase – a time machine for your data
 
JS Essence
JS EssenceJS Essence
JS Essence
 
Whats new in Oracle Database 12c release 12.1.0.2
Whats new in Oracle Database 12c release 12.1.0.2Whats new in Oracle Database 12c release 12.1.0.2
Whats new in Oracle Database 12c release 12.1.0.2
 
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)
Agile Oracle to PostgreSQL migrations (PGConf.EU 2013)
 
ZZ BC#7.5 asp.net mvc practice and guideline refresh!
ZZ BC#7.5 asp.net mvc practice  and guideline refresh! ZZ BC#7.5 asp.net mvc practice  and guideline refresh!
ZZ BC#7.5 asp.net mvc practice and guideline refresh!
 
Level Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With TestcontainersLevel Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With Testcontainers
 
Business_Continuity_Planning_with_SQL_Server_HADR_options_TechEd_Bangalore_20...
Business_Continuity_Planning_with_SQL_Server_HADR_options_TechEd_Bangalore_20...Business_Continuity_Planning_with_SQL_Server_HADR_options_TechEd_Bangalore_20...
Business_Continuity_Planning_with_SQL_Server_HADR_options_TechEd_Bangalore_20...
 
Solid fire cloudstack storage overview - CloudStack European User Group
Solid fire cloudstack storage overview - CloudStack European User GroupSolid fire cloudstack storage overview - CloudStack European User Group
Solid fire cloudstack storage overview - CloudStack European User Group
 
CloudStack Meetup London - Primary Storage Presentation by SolidFire
CloudStack Meetup London - Primary Storage Presentation by SolidFire CloudStack Meetup London - Primary Storage Presentation by SolidFire
CloudStack Meetup London - Primary Storage Presentation by SolidFire
 
AOUG_11Nov2016_Challenges_with_EBS12_2
AOUG_11Nov2016_Challenges_with_EBS12_2AOUG_11Nov2016_Challenges_with_EBS12_2
AOUG_11Nov2016_Challenges_with_EBS12_2
 

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

Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
CatarinaPereira64715
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Jeffrey Haguewood
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 

Recently uploaded (20)

Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 

Developing Kafka Streams Applications with Upgradability in Mind with Neil Buesing | Kafka Summit London 2022

  • 1. Designing your Ka fk a Streams Applications with Upgradability In Mind Ka fk a Summit 2022 London Neil Buesing, Rill Data @nbuesing nbuesing
  • 2. Background • Principal Solution Architect, Rill Data, Inc. • Work with clients streaming data into our platform • 5+ years experience with Ka fk a Streams • Speak on topics I'm passionate about with Apache Ka fk a and Ka fk a Streams • Working from home with the best pair-programmer
  • 3. Goals 1. Con fi dence you can upgrade your application 2. Support for Data Recovery • e.g., data corrupted due to bug in upgrade 3. Options • e.g., responsibility 4. Reduce Developer time to achieve upgrade
  • 4. Topics 1. Name processors 2. Name state stores 3. Minimize rebuilding of state 4. Data evolution 5. Partitioning 6. Microservices 
 
 7. Backup & Restore 8. Repartitioning 9. Windowed Stores 10. Circuit Breakers 11. Switches
  • 5. Name Your Processors HELLO My Name Is 0000000001
  • 7. Name Your Processors • Syntax, add naming to existing con fi guration, Named added to those w/out • Produced.as(), Grouped.as(), Joined.as(), Consumed.as(), Name.as() • Gotchas - builders & static construction behavior • Produced.with(Serdes.String(), vSerde).as("name") • Produced.as("name").withKeySerde(Serdes.String()).withValueSerde(vSerde) • Produced.<String,PurchaseOrder>as("name") 
 .withKeySerde(Serdes.String()) 
 .withValueSerde(vSerde)
  • 9. Name Your Processors HELLO My Name Is order-groupBy-id- fi lter
  • 10. Name Your State Stores HELLO My Name Is 0000000027
  • 11. Name Your State Stores
  • 12. Name Your State Stores
  • 13. Name Your State Stores • The most important thing you can do to make upgrades easier 
 • Simple 
 
 KTable<String, User> users = 
 builder.table(options.getUserTopic(), Consumed.as("ktable-users"), Materialized.as("user-table"));
  • 14. Name Your State Stores HELLO My Name Is user-table
  • 15. Topology • Print out topology on application start 
 
 final Topology topology = streamsBuilder(options).build(p); 
 log.info("Topology:n" + topology.describe()); • Visualize with • https://zz85.github.io/ka fk a-streams-viz/
  • 16. Minimize Rebuilding of State Stores -changelog
  • 17. Minimize Rebuilding of State Stores final StreamsBuilder builder = new StreamsBuilder(); GlobalKTable<String, Store> stores = builder.globalTable("store", Consumed.as("gktable-stores"), Materialized.as("store-global-table") ); GlobalKTable<String, Foo> foo = builder.globalTable("foo", Consumed.as("gktable-foo"), Materialized.as("foo-global-table") ); builder.<String, PurchaseOrder>stream( . . . )
  • 18. Minimize Rebuilding of State Stores ./4_1/rocksdb/pickup-order-reduce-store ./4_1/rocksdb/pickup-order-reduce-store/OPTIONS-000013 ./4_1/rocksdb/pickup-order-reduce-store/CURRENT ./4_1/rocksdb/pickup-order-reduce-store/LOG ./4_1/rocksdb/pickup-order-reduce-store/IDENTITY ./4_1/rocksdb/pickup-order-reduce-store/OPTIONS-000011 ./4_1/rocksdb/pickup-order-reduce-store/000009.log ./4_1/rocksdb/pickup-order-reduce-store/MANIFEST-000008 ./4_1/rocksdb/pickup-order-reduce-store/LOCK ./5_1/rocksdb/pickup-order-reduce-store ./5_1/rocksdb/pickup-order-reduce-store/OPTIONS-000013 ./5_1/rocksdb/pickup-order-reduce-store/CURRENT ./5_1/rocksdb/pickup-order-reduce-store/LOG ./5_1/rocksdb/pickup-order-reduce-store/IDENTITY ./5_1/rocksdb/pickup-order-reduce-store/OPTIONS-000011 ./5_1/rocksdb/pickup-order-reduce-store/000009.log ./5_1/rocksdb/pickup-order-reduce-store/MANIFEST-000008 ./5_1/rocksdb/pickup-order-reduce-store/LOCK
  • 20. Data Evolution • Data Modeling • Data Marshaling • Data Versioning
  • 21. Data Evolution - JSON public class UnmappedProperties { private final Map<String, Object> map = new LinkedHashMap < > (); @JsonAnyGetter public Map<String, Object> getUnknownProperties() { return map; } @JsonAnySetter public void setUnknownProperty(String key, Object value) { map.put(key, value); } }
  • 22. Data Evolution - JSON @JsonInclude(JsonInclude.Include.NON_NULL) public class Product { private String sku; @JsonUnwrapped private UnmappedProperties unmappedProperties = new UnmappedProperties(); public Product(Sku sku) { this.sku = sku; } }
  • 23. Data Evolution - JSON • Risk/Pitfall • Data type changes can break this approach • Validates 3rd party inputs • Implement a clearUnknownProperties()
  • 24. Data Evolution - Avro • Evolution… • part of Avro's library • leveraged by Con fl uent's Schema Registry 

  • 25. Data Evolution - Avro • FULL • ability to roll-backup • streams apps are producers and consumers (forward and backward are harder) • V1 ⟷ V2 and V2 ⟷ V3 • FULL-TRANSITIVE • Ability to handle aggregations of older versions inde fi nitely • V1 ⟷ V2 and V2 ⟷ V3 and V1 ⟷ V3 

  • 26. Data Evolution - Protobuf • Tags numbers are encoded, fi eld names are not • optional ⟷ repeated • no encoding di ff erences: writing a repeated value and reading it as an optional value has "last one wins" • Renaming fi elds ⟶ full evolution • Renumber tags ⟶ no evolution
  • 27. Avoid Schema Registry Serialization for Keys • A simple addition of a default attribute — breaks partitioning • Exceptions • output topics for sink connectors (e.g. JDBC Sink)
  • 28. Data Evolution (takeaways) • Full (Forward and Backwards) - easier to roll-back your applications • Full Transitive - easier to handle old data in your aggregates • JSON, Avro, and Protobuf all have their own nuances - understand them
  • 32. Partitioning • Plan for growth (but…) • Strive for even work-loads • Partition for storage is as important (if not more so) than throughput • Selecting a Partitioning for your Streams Applications • 12 partitions better than 10 partitions • avoid primes, 5 • 24 (but at what cost?) 
 
 1,2,3,4,6,12 1,2,5,10 1,2,3,4,6,8,12,24 1,5
  • 33. Partitioning • If repartitioning is easy • 4 partitions • If repartitioning is hard • 8 or 12 partitions • 24 partitions (large state stores) • consider separation into multiple micro services
  • 34. Validate partitioning on ingestion • Peek - Log and Exception 
 
 builder.createStream("input-topic") 
 .peek((key, value) -> {… key != value.getKey() …}) • Filter - Log and Ignore 
 
 builder.createStream("input-topic") 
 . fi lter((key, value) -> {… key != value.getKey() …}) 

  • 36. Micro Services • easier to deploy • more uniform allocation of work • minimize downtime during restarts • easier to understand • threading • storage
  • 38. Backup and Restore • Event Sourcing • "In fi nite" retention of Input Events • Replaying Events could take a lot of time
  • 39. external process Backup and Restore source source restore source store aggregate transform -values toStream to sink -changelog on/off fi lter
  • 40. Backup and Restore source source restore source store aggregate transform -values toStream to sink • source & restore in same sub- topology, because they use the same store. • restore's transform-values will not emit events store cache store restored version could be emitted
  • 41. Backup and Restore source source restore source store aggregate transform -values toStream to sink merge • transformValues must be created after aggregate to access aggregate's store. • restore's transform-values will emit events (not cached…) • cached store — aggregate emits duplicate This how I thought it had to be done.
  • 42. Backup and Restore source source restore source store reduce toStream to sink merge • reduce is aggregate w/out mapping • restore logic within reduce • does not have access to headers
  • 43. Backup and Restore • transformValues cannot be created before aggregate/reduce since DSL requires store to be materialized fi rst. • aggregate and reduce do not have access to headers • if DSL adopts PAPI updated refactoring, it would then be able to. • understand how store caching and commit interval works
  • 44. Backup and Restore • a set of -changelog topics is not an Event Source based system.
  • 45. co-partitioning • partitioning of source and restore topics must match • co-partitioning validation isn't catching this. • behavior very confusing when they are not the same 
 (speaking from experience 🤦)
  • 46. Materialized caching enabled/disabled • I highly recommend enabling/disabling just to see behavior within your applications.
  • 47. Backup and Restore & Data Evolution source source restore source store aggregate transform -values toStream to sink -changelog V1 V2 V2
  • 49. Repartitioning • Leverage Built-in Backup and Restore • On/O ff fi lters so you can discard while brining the application online • Version your application • "foo.v1" ➟ "foo.v2"
  • 51. Repartitioning • Considerations around making restore a separate application • Downtime • Cut-over • Using `application.id` for backup • Keeping the code up to date
  • 52. Window Stores Type Boundary Examples # records for key 
 @ point in time Fixed Size Tumbling Epoch [8:00, 8:30) [8:30, 9:00) single Yes Hopping Epoch [8:00, 8:30) [8:15, 8:45) [8:30, 8:45) [8:45, 9:00) constant Yes Sliding Record [8:02, 8:32] [8:20, 8:50] [8:21, 8:51] variable Yes Session Record [8:02, 8:02] [8:02, 8:10] [9:10, 12:56] single 
 (by tombstoning) No
  • 53. Window Stores • Fixed Windows do NOT store window size (or end timestamp) in the message • Release new version and co-exist with old version • Wait to use new version until windows are "ready"
  • 55. Window Stores • New Version Challenges • Very long windows make it harder to wait for cut-over • epoch • hydration • replay incoming events • How ("When") to have clients cut over to new version • earliest, latest, or speci fi c timestamp • circuit breaker — moves burden to streams development team.
  • 56. application.id & versions • Versions should be a su ffi x on application.id • ".v1", ".v2" • Leverage ACLs with pre fi x on application.id
  • 58. Circuit Breakers • Starting and Stopping the Circuit Breaker application controls fl ow of messages • Unable to stop producers • Complicated streams application • in- fl ight data needs to be handled by same version • no duplicate processing between version releases
  • 59. Circuit Breakers • Added Complexity • Extra Application • Extra Topic • but can have smaller retention time (original is source-of-truth) • Extra Deployments
  • 60. Circuit Breaker handy for ksqlDB • Placing a Ka fk a Streams circuit-breaker application gives control in front of ksqlDB where consumer group selection is not possible • KSQL query starts from latest • KLIP-28 "create or replace" solves many issues (0.12.0) • KLIP-22 "add consumer group id" (proposal - no traction)
  • 62. Switches • Burden on our deployment, not down-stream applications • no o ff set management changes
  • 63. Circuit Breakers & Switches • Do not adopt these w/out need • Add-in only if (and when) needed
  • 64. Topics 1. Name processors 2. Name state stores 3. Minimize rebuilding of state 4. Data evolution 5. Partitioning 6. Microservices 
 
 7. Backup & Restore 8. Repartitioning 9. Windowed Stores 10. Circuit Breakers 11. Switches
  • 65. Takeaways • Do Right Away • Name your State Stores • Name your Processors • Meaningful Partition Size • Su ffi x based versioning • Start Planning • Backup/Restore & Repartitioning • External Applications & Teams • Release Scheduling • Data Evolution Strategy
  • 66. Thank you Questions? @nbuesing nbuesing 5 minutes remaining Upgrading