SlideShare a Scribd company logo
1 of 175
Download to read offline
The dark and dirty side of
fixing uneven partitions
Olena Kutsenko
Sr. Developer Advocate
Aiven
Olena Babenko
Staff Software Engineer
Aiven
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
It all started well…
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Recommended strategies for partitioning
➔ Select number of partitions based on how data is consumed
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Recommended strategies for partitioning
➔ Select number of partitions based on how data is consumed
➔ Select number of partitioning neither too low nor to high
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Recommended strategies for partitioning
➔ Select number of partitions based on how data is consumed
➔ Select number of partitioning neither too low nor to high
➔ Use keys with the highest cardinality
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Recommended strategies for partitioning
➔ Select number of partitions based on how data is consumed
➔ Select number of partitioning neither too low nor to high
➔ Use keys with the highest cardinality
➔ Be mindful of data distribution over time
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Recommended strategies for partitioning
➔ Select number of partitions based on how data is consumed
➔ Select number of partitioning neither too low nor to high
➔ Use keys with the highest cardinality
➔ Be mindful of data distribution over time
➔ Consider potential edge cases
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
You were pretty happy
about the results
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Nothing predicted the storm
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Or so you thought
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Partition 1 47%
Partition 2 34%
Partition 3 7%
Partition 4 4%
Partition 5 4%
Partition 6 4%
Data balancing gone wild
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
How uneven partitions affect the system
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
How uneven partitions affect the system
➔ Brokers:
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
How uneven partitions affect the system
➔ Brokers:
◆ Heavy load on the file system -> slower brokers
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
How uneven partitions affect the system
➔ Brokers:
◆ Heavy load on the file system -> slower brokers
➔ Consumers:
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
How uneven partitions affect the system
➔ Brokers:
◆ Heavy load on the file system -> slower brokers
➔ Consumers:
◆ Increased consumer lag
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
How uneven partitions affect the system
➔ Brokers:
◆ Heavy load on the file system -> slower brokers
➔ Consumers:
◆ Increased consumer lag
◆ Consumers that are assigned to a hot partition require bigger resources
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
How uneven partitions affect the system
➔ Brokers:
◆ Heavy load on the file system -> slower brokers
➔ Consumers:
◆ Increased consumer lag
◆ Consumers that are assigned to a hot partition require bigger resources
◆ Underutilisation of resources when vertical scaling with k8s
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
How uneven partitions affect the system
➔ Brokers:
◆ Heavy load on the file system -> slower brokers
➔ Consumers:
◆ Increased consumer lag
◆ Consumers that are assigned to a hot partition require bigger resources
◆ Underutilisation of resources when vertical scaling with k8s
◆ Out-of-memory exception cycle
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
What to do now?
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
“Premature optimization
is the root of all evil”
Donald Knuth
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
You can’t avoid the change.
Embrace the inevitable.
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Today you’ll learn
●
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Today you’ll learn
● Different recipes to deal with uneven partitioning
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Today you’ll learn
● Different recipes to deal with uneven partitioning
● From easiest 🌶
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Today you’ll learn
● Different recipes to deal with uneven partitioning
● From easiest 🌶 to more difficult 🌶🌶🌶
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
🌶🌶🌶 The advanced techniques will help you
● Rebalance records across partitions
● Scale your topic up or down
● Be effective at disaster recovery
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Partition 1 47%
Partition 2 34%
Partition 3 7%
Partition 4 4%
Partition 5 4%
Partition 6 4%
15%
12%
13%
11%
13%
11%
Partition 1
Partition 2
Partition 3
Partition 4
Partition 5
Partition 6
14%
12%
Partition 7
Partition 8
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Level 1. Easy🌶
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Level 1. Easy🌶
If you don’t use keys..
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
No keys - increase the number of partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
No keys - increase the number of partitions
- This way you can’t scale down, but you can scale up!
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
No keys - increase the number of partitions
- This way you can’t scale down, but you can scale up!
- Pay attention to
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
No keys - increase the number of partitions
- This way you can’t scale down, but you can scale up!
- Pay attention to
- Data retention period
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
No keys - increase the number of partitions
- This way you can’t scale down, but you can scale up!
- Pay attention to
- Data retention period
- Number of consumers
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
No keys - increase the number of partitions
- This way you can’t scale down, but you can scale up!
- Pay attention to
- Data retention period
- Number of consumers
- Data distribution over time
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
No keys - increase the number of partitions
- This way you can’t scale down, but you can scale up!
- Pay attention to
- Data retention period
- Number of consumers
- Data distribution over time
- Linger_ms and batch_size for sticky partitioning
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Level 2. Moderate🌶🌶
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Level 2. Moderate🌶🌶
One or two keys are hot
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
You still can add new partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
You still can add new partitions…. kinda
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
The key challenge:
github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/
producer/internals/BuiltInPartitioner.java
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
The key challenge:
github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/
producer/internals/BuiltInPartitioner.java
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
You will need
● Calculate which key is hot 🔥
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
You will need
● Calculate which key is hot 🔥
● Keep the state
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
You will need
● Calculate which key is hot 🔥
● Keep the state
● Not mess up old keys
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
You will need
● Calculate which key is hot 🔥
● Keep the state
● Not mess up old keys
● Use custom partitioner
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Example
public static int partitionForKey(final byte[] serializedKey, final int numPartitions) {
if (serializedKey == "bananas🍌🍌") {
... do the dirty magic here ...
} else {
return Utils.toPositive(Utils.murmur2(serializedKey)) % (numPartitions - 1);
}
}
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Example
public static int partitionForKey(final byte[] serializedKey, final int numPartitions) {
if (serializedKey == "bananas🍌🍌") {
... do the dirty magic here ...
} else {
return Utils.toPositive(Utils.murmur2(serializedKey)) % (numPartitions - 1);
}
}
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Example
public static int partitionForKey(final byte[] serializedKey, final int numPartitions) {
if (serializedKey == "bananas🍌🍌") {
... do the dirty magic here ...
} else {
return Utils.toPositive(Utils.murmur2(serializedKey)) % (numPartitions - 1);
}
}
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Level 3. Getting hot🌶🌶🌶
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Level 3. Getting hot🌶🌶🌶
Time to migrate to a new topic
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
The time will come…
when you need to re-create the topic
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
The time will come…
when you need to re-create the topic
➔ Rebalance records across partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
The time will come…
when you need to re-create the topic
➔ Rebalance records across partitions
➔ Scale your topic up or down
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
The time will come…
when you need to re-create the topic
➔ Rebalance records across partitions
➔ Scale your topic up or down
➔ To do disaster recovery
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Let’s re-create the topic
and MIGRATE!
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Three main steps
…
Producers Consumers
P1
P0
Old topic
0 6 12
🗝
🗝 1 7 13
…
Producers Consumers
P1
P0
Old topic
0 6 12
🗝
🗝 1 7 13
P1
P2
P0
P3
0 12
🗝
1 13
🗝
2 14
3 15
🗝
🗝
New topic
…
…
Producers Consumers
P1
P0
P1
P2
P0
P3
Old topic
New topic
0 6 12
🗝
🗝
0 12
🗝
1 13
🗝
1 7 13
2 14
3 15
🗝
🗝
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Our goals when migrating
1. Keep downtime to bare minimum
2. No duplicates
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Partition 1 47%
Partition 2 34%
Partition 3 7%
Partition 4 4%
Partition 5 4%
Partition 6 4%
15%
12%
13%
11%
13%
11%
Partition 1
Partition 2
Partition 3
Partition 4
Partition 5
Partition 6
14%
12%
Partition 7
Partition 8
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Two options
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Two options
(in reality way more, but similar in
essence)
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Option 1: Stop the world producers
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Option 1: Stop the world producers
Sharp cut
…
Producers Consumers
P1
P0
Old topic
0 6 12
🗝
🗝 1 7 13
…
Producers Consumers
P1
P0
Old topic
0 6 12
🗝
🗝 1 7 13
…
Producers Consumers
P1
P0
Old topic
0 6 12
🗝
🗝 1 7 13
…
Producers Consumers
P1
P0
Old topic
0 6 12
🗝
🗝 1 7 13
P1
P2
P0
P3
New topic
0 12
🗝
1 13
🗝
2 14
3 15
🗝
🗝
…
Producers
Consumers
P1
P0
Old topic
0 6 12
🗝
🗝 1 7 13
P1
P2
P0
P3
New topic
0 12
🗝
1 13
🗝
2 14
3 15
🗝
🗝
…
Producers
Consumers
P1
P0 0 6 12
🗝
🗝 1 7 13
P1
P2
P0
P3
New topic
0 12
🗝
1 13
🗝
2 14
3 15
🗝
🗝
Old topic
…
Consumers
P1
P0 0 6 12
🗝
🗝 1 7 13
P1
P2
P0
P3
New topic
0 12
🗝
1 13
🗝
2 14
3 15
🗝
🗝
Producers
Old topic
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Advantages
➔ No skipped messages
➔ Prevention of duplicates
➔ No need for extra compute to replicate data from old to new topic
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Limitations
➔ Downtime
➔ Difficult to test new setup and challenging to roll back
➔ Limited time window for migration
➔ Need for seamless collaboration among teams
➔ All-or-nothing migration
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Our goals when migrating
1. Keep downtime to bare minimum
2. No duplicates
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Option 2: Gradual switch relying on
replicated data
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
ABOVE - Olena K
BELOW - Olena B
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Time for plan B
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Time for plan B
with Olena B
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Strategy
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 1
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 2
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 3
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 3
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 3
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 3
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 4
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 4
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 5
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 1
New topic creation
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 1
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Partition 1 47%
Partition 2 34%
Partition 3 7%
Partition 4 4%
Partition 5 4%
Partition 6 4%
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Partition 1 44%
Partition 2 30%
Partition 3 6%
Partition 4 3%
Partition 5 3%
Partition 6 3%
Partition 7 3%
Partition 8 3%
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Risks
Had to redo whole process
because of too few/many partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 2
Fast and reliable data pump
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 2
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Data pump application requirements
- Simple
- Fast.
- Reliable
Kafka
Streams Java
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Risks
- Require too much resources if not simple enough
- Cannot keep up if it is too complicated
- Data losses if application is not reliable
- Data loss or duplicates because records from from different
partitions get shuffled
WARNING. Records/keys almost certainly will be mixed.
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
New partitions have mix of data from old partitions
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Out of order events
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Out of order events
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Out of order events
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Out of order events
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Out of order events
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Out of order events
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Out of order events
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Out of order events
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Out of order events
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Out of order events
If consumers had stopped when order is not correct.
- Read some records one more time
OR
- Skip some records
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Out of order events
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Out of order events
Be careful
during data pump catch up and
if you use big batches to read data
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Out of order events
Old topic timestamps from metadata
could be used to preserve chronological order
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 3
Gradual consumer switch.
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 3
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Risks
- Spikes
- Too long downtime for consumers
- Data loss or duplicates
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 3
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Consumer groups translations
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Simple Consumer Group Translation
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Simple Consumer Group Translation
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Simple Consumer Group Translation
Old Consumer Group:
Partition 0: offset 13
Partition 2: offset 23
Last consumed event
Partition 0: offset 12
Partition 2: offset 22
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Simple Consumer Group Translation
Timestamps:
Partition 0: 07:01:04
Partition 2: 07:01:03
Earliest timestamp:
07:01:03
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Simple Consumer Group Translation
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Risks
- Spikes
- Too long downtime for consumers
- Data loss or duplicates
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Streaming Consumer Group
Translations
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Streaming Consumer Group Translation
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Streaming Consumer Group Translation
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Streaming Consumer Group Translation
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Streaming Consumer Group Translation
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Streaming Consumer Group Translation
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Risks
- Spikes
- Too long downtime for consumers
- Data loss or duplicates
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Offset Translations
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Offset Translation
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Offset Translation
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Offset Translation
Consumer Group 1:
Partition 0: offset 13
Partition 2: offset 23
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Offset Translation
For r in records:
P = r.metadata.old_partition
If offsets[P] <= r.metadata.offset:
return
Consumer Group 1:
Partition 0: offset 13
Partition 2: offset 23
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Mirror Maker offset translation
Data pump -> MirrorSourceTask
Old + New records metadata -> Records in Offset Sync topics
Offset translation -> MirrorCheckpointTask
Problems:
- Main usecase data transfer between 2 clusters, not a same
- Till version 3.3 offset translation by measuring the 'distance' between
the MM2 offset sync and the upstream consumer group, and then
assuming that the same distance applies in the downstream topic.
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Risks
- Spikes
- Too long downtime for consumers
- Data loss or duplicates
- Poor offsets estimations
- Bad timing for offsets translation
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Bad timing for offset translations
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Bad timing for Offset Translation
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Bad timing for Offset Translation
Either
Start from 32:
duplicate B1, B2
OR
Start from 35:
A2 is lost
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
“Bounded” stream
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Gradual consumer switch
Earliest offset Duplicates guaranteed
Consumer’s earliest timestamp High probability of
duplicates
Offset translation A few duplicates
Offset translation + “late events”
tracking
Almost no duplicates
Offset translation + “late events”
tracking + “Bounded” stream
approach
Rare/no duplicates
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Gradual consumer switch
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
More topics to talk about
- Apache Mirror Maker implementation details
- Stateless vs Stateful consumers
- Idempotence
- Changing schemas
- New key selection strategy
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 4
Gradual producers switch
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Step 4
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Risks
- Data loss or duplicates if data pump is not fast enough
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
To summarize it all
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Key learnings
● No keys - add partitions 🌶
● A few hot keys - you still can add partitions 🌶🌶
● Workarounds are not sufficient? - Migrate the topic 🌶🌶🌶
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Migrate the topic 🌶🌶🌶
● Sharp cut - stop the producers first
○ Exactly once delivery
○ Expect the downtime
○ All-or-nothing migration
● Generic gradual switch
○ Minimal downtime
○ Possibility to test before switching
○ Switch consumer groups gradually
○ Minimize chance of duplicates
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Olena Kutsenko
Sr. Developer Advocate
Olena Babenko
Staff Software Engineer
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Olena Kutsenko
Sr. Developer Advocate
Olena Babenko
Staff Software Engineer
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
Olena Kutsenko
Sr. Developer Advocate
Olena Babenko
Staff Software Engineer
The trusted open source
data platform for everyone
olena@aiven.io
@OlenaKutsenko aiven.io Olena Babenko:
#G8
The trusted open source
data platform for everyone

More Related Content

More from 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
 
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
 
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
 
Automating Speed: A Proven Approach to Preventing Performance Regressions in ...
Automating Speed: A Proven Approach to Preventing Performance Regressions in ...Automating Speed: A Proven Approach to Preventing Performance Regressions in ...
Automating Speed: A Proven Approach to Preventing Performance Regressions in ...HostedbyConfluent
 
How to Build an Event-based Control Center for the Electrical Grid
How to Build an Event-based Control Center for the Electrical GridHow to Build an Event-based Control Center for the Electrical Grid
How to Build an Event-based Control Center for the Electrical GridHostedbyConfluent
 
Keep Your Kafka Cloud Costs in Check with Showbacks
Keep Your Kafka Cloud Costs in Check with ShowbacksKeep Your Kafka Cloud Costs in Check with Showbacks
Keep Your Kafka Cloud Costs in Check with ShowbacksHostedbyConfluent
 
When Securing Access to Data is About Life and Death
When Securing Access to Data is About Life and DeathWhen Securing Access to Data is About Life and Death
When Securing Access to Data is About Life and DeathHostedbyConfluent
 
Aggregating Ad Events with Kafka Streams and Interactive Queries at Invidi
Aggregating Ad Events with Kafka Streams and Interactive Queries at InvidiAggregating Ad Events with Kafka Streams and Interactive Queries at Invidi
Aggregating Ad Events with Kafka Streams and Interactive Queries at InvidiHostedbyConfluent
 
Mastering Kafka Consumer Distribution: A Guide to Efficient Scaling and Resou...
Mastering Kafka Consumer Distribution: A Guide to Efficient Scaling and Resou...Mastering Kafka Consumer Distribution: A Guide to Efficient Scaling and Resou...
Mastering Kafka Consumer Distribution: A Guide to Efficient Scaling and Resou...HostedbyConfluent
 
Flink 2.0: Navigating the Future of Unified Stream and Batch Processing
Flink 2.0: Navigating the Future of Unified Stream and Batch ProcessingFlink 2.0: Navigating the Future of Unified Stream and Batch Processing
Flink 2.0: Navigating the Future of Unified Stream and Batch ProcessingHostedbyConfluent
 
Leveraging Tiered Storage in Strimzi-Operated Kafka for Cost-Effective Stream...
Leveraging Tiered Storage in Strimzi-Operated Kafka for Cost-Effective Stream...Leveraging Tiered Storage in Strimzi-Operated Kafka for Cost-Effective Stream...
Leveraging Tiered Storage in Strimzi-Operated Kafka for Cost-Effective Stream...HostedbyConfluent
 

More from HostedbyConfluent (20)

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
 
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...
 
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
 
Automating Speed: A Proven Approach to Preventing Performance Regressions in ...
Automating Speed: A Proven Approach to Preventing Performance Regressions in ...Automating Speed: A Proven Approach to Preventing Performance Regressions in ...
Automating Speed: A Proven Approach to Preventing Performance Regressions in ...
 
How to Build an Event-based Control Center for the Electrical Grid
How to Build an Event-based Control Center for the Electrical GridHow to Build an Event-based Control Center for the Electrical Grid
How to Build an Event-based Control Center for the Electrical Grid
 
Keep Your Kafka Cloud Costs in Check with Showbacks
Keep Your Kafka Cloud Costs in Check with ShowbacksKeep Your Kafka Cloud Costs in Check with Showbacks
Keep Your Kafka Cloud Costs in Check with Showbacks
 
When Securing Access to Data is About Life and Death
When Securing Access to Data is About Life and DeathWhen Securing Access to Data is About Life and Death
When Securing Access to Data is About Life and Death
 
Aggregating Ad Events with Kafka Streams and Interactive Queries at Invidi
Aggregating Ad Events with Kafka Streams and Interactive Queries at InvidiAggregating Ad Events with Kafka Streams and Interactive Queries at Invidi
Aggregating Ad Events with Kafka Streams and Interactive Queries at Invidi
 
Mastering Kafka Consumer Distribution: A Guide to Efficient Scaling and Resou...
Mastering Kafka Consumer Distribution: A Guide to Efficient Scaling and Resou...Mastering Kafka Consumer Distribution: A Guide to Efficient Scaling and Resou...
Mastering Kafka Consumer Distribution: A Guide to Efficient Scaling and Resou...
 
Flink 2.0: Navigating the Future of Unified Stream and Batch Processing
Flink 2.0: Navigating the Future of Unified Stream and Batch ProcessingFlink 2.0: Navigating the Future of Unified Stream and Batch Processing
Flink 2.0: Navigating the Future of Unified Stream and Batch Processing
 
Leveraging Tiered Storage in Strimzi-Operated Kafka for Cost-Effective Stream...
Leveraging Tiered Storage in Strimzi-Operated Kafka for Cost-Effective Stream...Leveraging Tiered Storage in Strimzi-Operated Kafka for Cost-Effective Stream...
Leveraging Tiered Storage in Strimzi-Operated Kafka for Cost-Effective Stream...
 

Recently uploaded

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 

Recently uploaded (20)

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 

The Dark and Dirty Side of Fixing Uneven Partitions with Olena Babenko & Olena Kutsenko