SlideShare ist ein Scribd-Unternehmen logo
1 von 66
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

When NOT to use Apache Kafka?
When NOT to use Apache Kafka?When NOT to use Apache Kafka?
When NOT to use Apache Kafka?Kai Wähner
 
Delivering: from Kafka to WebSockets | Adam Warski, SoftwareMill
Delivering: from Kafka to WebSockets | Adam Warski, SoftwareMillDelivering: from Kafka to WebSockets | Adam Warski, SoftwareMill
Delivering: from Kafka to WebSockets | Adam Warski, SoftwareMillHostedbyConfluent
 
Event Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQEvent Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQAraf Karsh Hamid
 
Kafka Streams for Java enthusiasts
Kafka Streams for Java enthusiastsKafka Streams for Java enthusiasts
Kafka Streams for Java enthusiastsSlim Baltagi
 
Microservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaMicroservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaAraf Karsh Hamid
 
Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...Claus Ibsen
 
Deep Dive into Building Streaming Applications with Apache Pulsar
Deep Dive into Building Streaming Applications with Apache Pulsar Deep Dive into Building Streaming Applications with Apache Pulsar
Deep Dive into Building Streaming Applications with Apache Pulsar Timothy Spann
 
Apache Kafka Architecture & Fundamentals Explained
Apache Kafka Architecture & Fundamentals ExplainedApache Kafka Architecture & Fundamentals Explained
Apache Kafka Architecture & Fundamentals Explainedconfluent
 
Splunk: Druid on Kubernetes with Druid-operator
Splunk: Druid on Kubernetes with Druid-operatorSplunk: Druid on Kubernetes with Druid-operator
Splunk: Druid on Kubernetes with Druid-operatorImply
 
Spark (Structured) Streaming vs. Kafka Streams
Spark (Structured) Streaming vs. Kafka StreamsSpark (Structured) Streaming vs. Kafka Streams
Spark (Structured) Streaming vs. Kafka StreamsGuido Schmutz
 
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...Flink Forward
 
Building Event Driven (Micro)services with Apache Kafka
Building Event Driven (Micro)services with Apache KafkaBuilding Event Driven (Micro)services with Apache Kafka
Building Event Driven (Micro)services with Apache KafkaGuido Schmutz
 
Producer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaProducer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaJiangjie Qin
 
Presto: Distributed sql query engine
Presto: Distributed sql query engine Presto: Distributed sql query engine
Presto: Distributed sql query engine kiran palaka
 
Hudi: Large-Scale, Near Real-Time Pipelines at Uber with Nishith Agarwal and ...
Hudi: Large-Scale, Near Real-Time Pipelines at Uber with Nishith Agarwal and ...Hudi: Large-Scale, Near Real-Time Pipelines at Uber with Nishith Agarwal and ...
Hudi: Large-Scale, Near Real-Time Pipelines at Uber with Nishith Agarwal and ...Databricks
 
Interactive real time dashboards on data streams using Kafka, Druid, and Supe...
Interactive real time dashboards on data streams using Kafka, Druid, and Supe...Interactive real time dashboards on data streams using Kafka, Druid, and Supe...
Interactive real time dashboards on data streams using Kafka, Druid, and Supe...DataWorks Summit
 
Introduction to Kong API Gateway
Introduction to Kong API GatewayIntroduction to Kong API Gateway
Introduction to Kong API GatewayYohann Ciurlik
 
Event Streaming in Retail with Apache Kafka
Event Streaming in Retail with Apache KafkaEvent Streaming in Retail with Apache Kafka
Event Streaming in Retail with Apache KafkaKai Wähner
 
Microservices Integration Patterns with Kafka
Microservices Integration Patterns with KafkaMicroservices Integration Patterns with Kafka
Microservices Integration Patterns with KafkaKasun Indrasiri
 

Was ist angesagt? (20)

When NOT to use Apache Kafka?
When NOT to use Apache Kafka?When NOT to use Apache Kafka?
When NOT to use Apache Kafka?
 
Delivering: from Kafka to WebSockets | Adam Warski, SoftwareMill
Delivering: from Kafka to WebSockets | Adam Warski, SoftwareMillDelivering: from Kafka to WebSockets | Adam Warski, SoftwareMill
Delivering: from Kafka to WebSockets | Adam Warski, SoftwareMill
 
Event Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQEvent Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQ
 
Kafka Streams for Java enthusiasts
Kafka Streams for Java enthusiastsKafka Streams for Java enthusiasts
Kafka Streams for Java enthusiasts
 
Microservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaMicroservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and Kafka
 
Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...
 
Deep Dive into Building Streaming Applications with Apache Pulsar
Deep Dive into Building Streaming Applications with Apache Pulsar Deep Dive into Building Streaming Applications with Apache Pulsar
Deep Dive into Building Streaming Applications with Apache Pulsar
 
Apache Kafka Architecture & Fundamentals Explained
Apache Kafka Architecture & Fundamentals ExplainedApache Kafka Architecture & Fundamentals Explained
Apache Kafka Architecture & Fundamentals Explained
 
Splunk: Druid on Kubernetes with Druid-operator
Splunk: Druid on Kubernetes with Druid-operatorSplunk: Druid on Kubernetes with Druid-operator
Splunk: Druid on Kubernetes with Druid-operator
 
Spark (Structured) Streaming vs. Kafka Streams
Spark (Structured) Streaming vs. Kafka StreamsSpark (Structured) Streaming vs. Kafka Streams
Spark (Structured) Streaming vs. Kafka Streams
 
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...
 
Building Event Driven (Micro)services with Apache Kafka
Building Event Driven (Micro)services with Apache KafkaBuilding Event Driven (Micro)services with Apache Kafka
Building Event Driven (Micro)services with Apache Kafka
 
Kafka 101
Kafka 101Kafka 101
Kafka 101
 
Producer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaProducer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache Kafka
 
Presto: Distributed sql query engine
Presto: Distributed sql query engine Presto: Distributed sql query engine
Presto: Distributed sql query engine
 
Hudi: Large-Scale, Near Real-Time Pipelines at Uber with Nishith Agarwal and ...
Hudi: Large-Scale, Near Real-Time Pipelines at Uber with Nishith Agarwal and ...Hudi: Large-Scale, Near Real-Time Pipelines at Uber with Nishith Agarwal and ...
Hudi: Large-Scale, Near Real-Time Pipelines at Uber with Nishith Agarwal and ...
 
Interactive real time dashboards on data streams using Kafka, Druid, and Supe...
Interactive real time dashboards on data streams using Kafka, Druid, and Supe...Interactive real time dashboards on data streams using Kafka, Druid, and Supe...
Interactive real time dashboards on data streams using Kafka, Druid, and Supe...
 
Introduction to Kong API Gateway
Introduction to Kong API GatewayIntroduction to Kong API Gateway
Introduction to Kong API Gateway
 
Event Streaming in Retail with Apache Kafka
Event Streaming in Retail with Apache KafkaEvent Streaming in Retail with Apache Kafka
Event Streaming in Retail with Apache Kafka
 
Microservices Integration Patterns with Kafka
Microservices Integration Patterns with KafkaMicroservices Integration Patterns with Kafka
Microservices Integration Patterns with Kafka
 

Ähnlich wie 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 platformChester 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 2018harvraja
 
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 DatabaseSandesh 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 ControlsTeamstudio
 
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 | INDIAXoom Trainings
 
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 dataNeev 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.2Connor 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 TestcontainersVMware 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 GroupShapeBlue
 
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
 

Ähnlich wie 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
 

Mehr von HostedbyConfluent

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

Mehr von HostedbyConfluent (20)

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

KĂźrzlich hochgeladen

Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 

KĂźrzlich hochgeladen (20)

Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 

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