SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
Building an
Asynchronous
Application Framework
with Python and Pulsar
FEBRUARY 9 2022 Pulsar Summit
Zac Bentley
Lead Site Reliability Engineer
Boston, MA
2
2022 © Klaviyo Confidential
The Problem
What We Built
Challenges
What Worked Well
What’s Next?
01
02
03
04
05
3
2022 © Klaviyo Confidential
Segmentation
Reviews
Retail POS
Social
Surveys
Referrals
Logistics
Shipping
Customer service
Loyalty
On site
personalization
Forms
Ecommerce
Order confirmation
SMS
Email
Existing Architecture
5
2022 © Klaviyo Confidential
Problems
Reliability Scalability Ownership/Process Architectural
6
2022 © Klaviyo Confidential
Problems
Reliability
RabbitMQ has reliability issues when
pushed too hard.
“Backpressure will find you”
Deep queues behave poorly.
Lots of outages and firefighting.
Scalability Ownership/Process Architectural
7
2022 © Klaviyo Confidential
Problems
Reliability Scalability
Scaling RabbitMQ is intrusive:
application code has to be aware of
topology changes at every level.
Geometry changes are painful.
Scale-out doesn’t bring
reliability/redundancy benefits.
Ownership/Process Architectural
8
2022 © Klaviyo Confidential
Problems
Reliability Scalability Ownership/Process
Individual team ownership is
expensive in:
- Roadmap time.
- Hiring/onboarding capacity.
- Coordination.
Per-team ownership creates
redundant expertise.
Architectural
9
2022 © Klaviyo Confidential
Problems
Reliability Scalability Ownership/Process Architectural
Celery is pretty hostile to SOA.
Ordered consuming: not possible.
Processing more >1 message at a time:
not possible.
Pub/sub: difficult.
Replay/introspection: not possible.
Existing API: Producers
from app.tasks import mytask
# Synchronous call:
mytask("arg1", "arg2", kwarg1=SomeObject())
# Asynchronous call:
mytask.apply_async(args=("arg1", "arg2"), kwargs={"kwarg1": SomeObject()})
@celery.task(acks_late=True)
def mytask(arg1, arg2, kwarg1=None):
...
@celery.task(acks_late=True)
def mytask2(*args, **kwargs):
...
Existing API: Consumer Workload Declaration
11
2022 © Klaviyo Confidential
Problems
Reliability Scalability Ownership/Process Architectural
02 What We Built
1. Platform Services: a team
2. Pulsar: a broker deployment
3. StreamNative: a support relationship
4. Chariot: an asynchronous application framework
ORM for Pulsar Interactions
for tenant in Tenant.search(name="standalone"):
if tenant.allowed_clusters == ["standalone"]:
ns = Namespace(
tenant=tenant,
name="mynamespace",
acknowledged_quota=AcknowledgedMessageQuota(age=timedelta(minutes=10)),
)
ns.create()
topic = Topic(
namespace=ns,
name="mytopic"
)
topic.create()
subscription = Subscription(
topic=topic,
name="mysubscription",
type=SubscriptionType.KeyShared,
)
subscription.create()
assert Subscription.get(name="mysubscription") == subscription
consumer = subscription.consumer(name="myconsumer").connect()
while True:
message = consumer.receive()
consumer.acknowledge(message)
Declarative API for Schema Management & Migrations
from klaviyo_schema.registry.teamname.data.payload_pb2 import PayloadProto
my_topic = ChariotTopic(
name="demo",
durability=Durability.DURABILITY_REDUNDANT,
max_message_size="1kb",
max_producers=100,
max_consumers=10,
publish_rate_limits=(
RateLimit(
messages=1000,
period="1m",
actions=[RateLimitAction.RATE_LIMIT_ACTION_BLOCK],
),
),
thresholds=(
Threshold(
kind=ThresholdKind.THRESHOLD_KIND_UNACKNOWLEDGED,
size="200mb",
actions=[ThresholdAction.THRESHOLD_FAIL_PUBLISH],
),
),
consumer_groups=(ConsumerGroup(name="demo-consumer-group", type=SubscriptionType.KeyShared),),
payload=RegisteredPayloadFromClass(payload_class=PayloadProto),
)
Existing API: Producers
from app.tasks import mytask
# Synchronous call:
mytask("arg1", "arg2", kwarg1=SomeObject())
# Asynchronous call:
mytask.apply_async(args=("arg1", "arg2"), kwargs={"kwarg1": SomeObject()})
@celery.task(acks_late=True)
def mytask(arg1, arg2, kwarg1=None):
...
@celery.task(acks_late=True)
def mytask2(*args, **kwargs):
...
Existing API: Consumer Workload Declaration
New API: Producers
class DemoExecutor(AsynchronousExecutor):
@lifecycle_method(timeout=timedelta(seconds=10))
async def on_executor_shutdown_requested(self): ...
@lifecycle_method(timeout=timedelta(seconds=10))
async def on_executor_shutdown(self): ...
@lifecycle_method(timeout=timedelta(seconds=10))
async def on_executor_startup(self): ...
@lifecycle_method(timeout=timedelta(seconds=10))
async def on_message_batch(self, messages: Sequence[PayloadProto]):
for idx, msg in enumerate(messages):
if idx % 2 == 0:
await self.chariot_ack(msg)
else:
await self.chariot_reject(msg)
from klaviyo_schema.registry.teamname.data.payload_pb2 import PayloadProto
from klaviyo_schema.registry.teamname.topics import my_topic
await my_topic.send(PayloadProto(...))
New API: Consumer Workload Declaration
Back-Of-Queue Retries
class DemoExecutor(AsynchronousExecutor):
@lifecycle_method(timeout=timedelta(seconds=10))
@requeue_retry(
batch_predicate=retry_on_exception_type(
RetryException, retry_log_level=logging.INFO
),
message_predicate=retry_until_approximate_attempt_count(10),
delay=wait_exponential(max=timedelta(seconds=5)) + timedelta(seconds=1),
)
async def on_message_batch(self, messages: Sequence[PayloadProto]):
raise RetryException("Expected retry")
~> chariot worker start --topic demo --consumer-group democg --parallel 10 
--start-executors-lazily --executor-class app.executors.demo:DemoExecutor 
--message-batch-assignment-behavior AnyKeyToAnyExecutor
~> chariot worker start --topic demo --consumer-group democg --parallel 10 
--start-executors-lazily --executor-class app.executors.demo:DemoExecutor 
--message-batch-assignment-behavior NoOverlapBestEffortKeyExecutorAffinity 
--message-batch-flush-after-items 1000 --message-batch-flush-after-time 10sec
Custom Batching and “Steering” for Parallel Execution without Reordering
18
2022 © Klaviyo Confidential
Problems Solutions
Reliability Scalability Ownership/Process Architectural
19
2022 © Klaviyo Confidential
Solutions
Reliability
To become a user is to express the
enforced maximum workload you’ll
run.
Pulsar’s redundancy helps weather
outages.
Deep backlogs are usable because
reads aren’t always writes.
Scalability Ownership/Process Architectural
20
2022 © Klaviyo Confidential
Solutions
Reliability Scalability
The “CEO” (Central Expert Owner)
can scale out pulsar to respond to
demand.
Teams express scalability need in the
form of elevated rate limits or partition
counts.
Consultation with the community and
StreamNative is invaluable.
Ownership/Process Architectural
21
2022 © Klaviyo Confidential
Solutions
Reliability Scalability Ownership/Process
Teams own producers/consumers.
Teams submit their contracts, in the
form of schema PRs, to the broker
owners.
Schema changes and backwards
compatibility aren’t simple but they
are now predictable.
Architectural
22
2022 © Klaviyo Confidential
Solutions
Reliability Scalability Ownership/Process Architectural
Many new patterns are now on the table:
- Pub-sub
- Ordered consume
- Batched consumption +
out-of-order acks
- Deduplication/debouncing
Reading topics at rest improves visibility.
Async interaction with the same stream
from multiple codebases is now possible.
03 Challenges
● Distribution as a library/framework
rather than an application
● Python/C++ Pulsar client maturity
● Combining advanced broker features
surfaced bugs
● Forking consumer daemons +
threaded clients + async/await style
is a costly combination
● Expectation management
● The “gap ledger”
● Management API quality
04 What Worked Well
Process:
● Support from above
● Managed rollout speed
● Solving 2025’s problems, not 2022’s
● “Steel-thread” style focus on specific
use-cases
● Willingness to commit to bring work
in-house and start fresh where it
made sense
Technology:
● Declarative schemas for messages
and dataflows
● Schema registry as code rather than
a SPOF
● Managed Pulsar allows us to learn
with less pain
● Isolating user code from consumer
code improves reliability
05 What’s Next?
Near Term:
● Manage internal adoption
● Scale to meet annual shopping
holidays’ needs
● Start work on a “publish gateway” for
connection pooling, circuit breaking,
etc.
Long Term:
● Online schema changes
● Key-local state
● Complex workflow support
● Make our work available to the
community
klaviyo.com/careers
zac@klaviyo.com

Weitere ähnliche Inhalte

Ähnlich wie Building an Asynchronous Application Framework with Python and Pulsar

Cloud world forum talk 062515
Cloud world forum talk 062515Cloud world forum talk 062515
Cloud world forum talk 062515Ajay Dankar
 
Applying Code Customizations to Magento 2
Applying Code Customizations to Magento 2 Applying Code Customizations to Magento 2
Applying Code Customizations to Magento 2 Igor Miniailo
 
Confluent Partner Tech Talk with SVA
Confluent Partner Tech Talk with SVAConfluent Partner Tech Talk with SVA
Confluent Partner Tech Talk with SVAconfluent
 
Cloud 12 08 V2
Cloud 12 08 V2Cloud 12 08 V2
Cloud 12 08 V2Pini Cohen
 
Primatics Financial - Parallel, High Throughput Risk Calculations On The Cloud
Primatics Financial - Parallel, High Throughput Risk Calculations On The CloudPrimatics Financial - Parallel, High Throughput Risk Calculations On The Cloud
Primatics Financial - Parallel, High Throughput Risk Calculations On The CloudAmnon Raviv
 
End User Computing at CloudHesive.pptx
End User Computing at CloudHesive.pptxEnd User Computing at CloudHesive.pptx
End User Computing at CloudHesive.pptxCloudHesive
 
Container Technologies and Transformational value
Container Technologies and Transformational valueContainer Technologies and Transformational value
Container Technologies and Transformational valueMihai Criveti
 
Microservice Builder: A Microservice DevOps Pipeline for Rapid Delivery and P...
Microservice Builder: A Microservice DevOps Pipeline for Rapid Delivery and P...Microservice Builder: A Microservice DevOps Pipeline for Rapid Delivery and P...
Microservice Builder: A Microservice DevOps Pipeline for Rapid Delivery and P...David Currie
 
Cloud Computing Certification
Cloud Computing CertificationCloud Computing Certification
Cloud Computing CertificationVskills
 
5 Years Of Building SaaS On AWS
5 Years Of Building SaaS On AWS5 Years Of Building SaaS On AWS
5 Years Of Building SaaS On AWSChristian Beedgen
 
Cloud_controllers_public_webinar_aug31_v1.pptx
Cloud_controllers_public_webinar_aug31_v1.pptxCloud_controllers_public_webinar_aug31_v1.pptx
Cloud_controllers_public_webinar_aug31_v1.pptxAvi Networks
 
Creating your Hybrid Cloud with AWS -Technical 201
Creating your Hybrid Cloud with AWS -Technical 201Creating your Hybrid Cloud with AWS -Technical 201
Creating your Hybrid Cloud with AWS -Technical 201Amazon Web Services
 
Moving existing apps to the cloud
 Moving existing apps to the cloud Moving existing apps to the cloud
Moving existing apps to the cloudRam Maddali
 
How to move to the cloud, get it right, stay secure and not cost a fortune
How to move to the cloud, get it right, stay secure and not cost a fortuneHow to move to the cloud, get it right, stay secure and not cost a fortune
How to move to the cloud, get it right, stay secure and not cost a fortuneCorecom Consulting
 
System Z Cloud Atlanta
System Z Cloud AtlantaSystem Z Cloud Atlanta
System Z Cloud AtlantaAndrea McManus
 
Should That Be a Microservice ?
Should That Be a Microservice ?Should That Be a Microservice ?
Should That Be a Microservice ?Rohit Kelapure
 
Webinar: Accelerate Your Cloud Business With CloudHealth
Webinar: Accelerate Your Cloud Business With CloudHealthWebinar: Accelerate Your Cloud Business With CloudHealth
Webinar: Accelerate Your Cloud Business With CloudHealthCloudHealth by VMware
 
Accenture: ACIC Rome & Red Hat
Accenture: ACIC Rome & Red HatAccenture: ACIC Rome & Red Hat
Accenture: ACIC Rome & Red HatAccenture Italia
 

Ähnlich wie Building an Asynchronous Application Framework with Python and Pulsar (20)

Damodar_TIBCO
Damodar_TIBCODamodar_TIBCO
Damodar_TIBCO
 
Cloud world forum talk 062515
Cloud world forum talk 062515Cloud world forum talk 062515
Cloud world forum talk 062515
 
Applying Code Customizations to Magento 2
Applying Code Customizations to Magento 2 Applying Code Customizations to Magento 2
Applying Code Customizations to Magento 2
 
Confluent Partner Tech Talk with SVA
Confluent Partner Tech Talk with SVAConfluent Partner Tech Talk with SVA
Confluent Partner Tech Talk with SVA
 
Cloud 12 08 V2
Cloud 12 08 V2Cloud 12 08 V2
Cloud 12 08 V2
 
Primatics Financial - Parallel, High Throughput Risk Calculations On The Cloud
Primatics Financial - Parallel, High Throughput Risk Calculations On The CloudPrimatics Financial - Parallel, High Throughput Risk Calculations On The Cloud
Primatics Financial - Parallel, High Throughput Risk Calculations On The Cloud
 
End User Computing at CloudHesive.pptx
End User Computing at CloudHesive.pptxEnd User Computing at CloudHesive.pptx
End User Computing at CloudHesive.pptx
 
Container Technologies and Transformational value
Container Technologies and Transformational valueContainer Technologies and Transformational value
Container Technologies and Transformational value
 
Microservice Builder: A Microservice DevOps Pipeline for Rapid Delivery and P...
Microservice Builder: A Microservice DevOps Pipeline for Rapid Delivery and P...Microservice Builder: A Microservice DevOps Pipeline for Rapid Delivery and P...
Microservice Builder: A Microservice DevOps Pipeline for Rapid Delivery and P...
 
Cloud Computing Certification
Cloud Computing CertificationCloud Computing Certification
Cloud Computing Certification
 
5 Years Of Building SaaS On AWS
5 Years Of Building SaaS On AWS5 Years Of Building SaaS On AWS
5 Years Of Building SaaS On AWS
 
Cloud_controllers_public_webinar_aug31_v1.pptx
Cloud_controllers_public_webinar_aug31_v1.pptxCloud_controllers_public_webinar_aug31_v1.pptx
Cloud_controllers_public_webinar_aug31_v1.pptx
 
Creating your Hybrid Cloud with AWS -Technical 201
Creating your Hybrid Cloud with AWS -Technical 201Creating your Hybrid Cloud with AWS -Technical 201
Creating your Hybrid Cloud with AWS -Technical 201
 
Moving existing apps to the cloud
 Moving existing apps to the cloud Moving existing apps to the cloud
Moving existing apps to the cloud
 
How to move to the cloud, get it right, stay secure and not cost a fortune
How to move to the cloud, get it right, stay secure and not cost a fortuneHow to move to the cloud, get it right, stay secure and not cost a fortune
How to move to the cloud, get it right, stay secure and not cost a fortune
 
System Z Cloud Atlanta
System Z Cloud AtlantaSystem Z Cloud Atlanta
System Z Cloud Atlanta
 
Should That Be a Microservice ?
Should That Be a Microservice ?Should That Be a Microservice ?
Should That Be a Microservice ?
 
The Best IBM Bluemix Training From myTectra in Bangalore
The Best IBM Bluemix Training From myTectra in BangaloreThe Best IBM Bluemix Training From myTectra in Bangalore
The Best IBM Bluemix Training From myTectra in Bangalore
 
Webinar: Accelerate Your Cloud Business With CloudHealth
Webinar: Accelerate Your Cloud Business With CloudHealthWebinar: Accelerate Your Cloud Business With CloudHealth
Webinar: Accelerate Your Cloud Business With CloudHealth
 
Accenture: ACIC Rome & Red Hat
Accenture: ACIC Rome & Red HatAccenture: ACIC Rome & Red Hat
Accenture: ACIC Rome & Red Hat
 

Mehr von StreamNative

Is Using KoP (Kafka-on-Pulsar) a Good Idea? - Pulsar Summit SF 2022
Is Using KoP (Kafka-on-Pulsar) a Good Idea? - Pulsar Summit SF 2022Is Using KoP (Kafka-on-Pulsar) a Good Idea? - Pulsar Summit SF 2022
Is Using KoP (Kafka-on-Pulsar) a Good Idea? - Pulsar Summit SF 2022StreamNative
 
Building an Asynchronous Application Framework with Python and Pulsar - Pulsa...
Building an Asynchronous Application Framework with Python and Pulsar - Pulsa...Building an Asynchronous Application Framework with Python and Pulsar - Pulsa...
Building an Asynchronous Application Framework with Python and Pulsar - Pulsa...StreamNative
 
Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...
Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...
Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...StreamNative
 
Distributed Database Design Decisions to Support High Performance Event Strea...
Distributed Database Design Decisions to Support High Performance Event Strea...Distributed Database Design Decisions to Support High Performance Event Strea...
Distributed Database Design Decisions to Support High Performance Event Strea...StreamNative
 
Simplify Pulsar Functions Development with SQL - Pulsar Summit SF 2022
Simplify Pulsar Functions Development with SQL - Pulsar Summit SF 2022Simplify Pulsar Functions Development with SQL - Pulsar Summit SF 2022
Simplify Pulsar Functions Development with SQL - Pulsar Summit SF 2022StreamNative
 
Towards a ZooKeeper-less Pulsar, etcd, etcd, etcd. - Pulsar Summit SF 2022
Towards a ZooKeeper-less Pulsar, etcd, etcd, etcd. - Pulsar Summit SF 2022Towards a ZooKeeper-less Pulsar, etcd, etcd, etcd. - Pulsar Summit SF 2022
Towards a ZooKeeper-less Pulsar, etcd, etcd, etcd. - Pulsar Summit SF 2022StreamNative
 
Validating Apache Pulsar’s Behavior under Failure Conditions - Pulsar Summit ...
Validating Apache Pulsar’s Behavior under Failure Conditions - Pulsar Summit ...Validating Apache Pulsar’s Behavior under Failure Conditions - Pulsar Summit ...
Validating Apache Pulsar’s Behavior under Failure Conditions - Pulsar Summit ...StreamNative
 
Cross the Streams! Creating Streaming Data Pipelines with Apache Flink + Apac...
Cross the Streams! Creating Streaming Data Pipelines with Apache Flink + Apac...Cross the Streams! Creating Streaming Data Pipelines with Apache Flink + Apac...
Cross the Streams! Creating Streaming Data Pipelines with Apache Flink + Apac...StreamNative
 
Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022
Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022
Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022StreamNative
 
Unlocking the Power of Lakehouse Architectures with Apache Pulsar and Apache ...
Unlocking the Power of Lakehouse Architectures with Apache Pulsar and Apache ...Unlocking the Power of Lakehouse Architectures with Apache Pulsar and Apache ...
Unlocking the Power of Lakehouse Architectures with Apache Pulsar and Apache ...StreamNative
 
Understanding Broker Load Balancing - Pulsar Summit SF 2022
Understanding Broker Load Balancing - Pulsar Summit SF 2022Understanding Broker Load Balancing - Pulsar Summit SF 2022
Understanding Broker Load Balancing - Pulsar Summit SF 2022StreamNative
 
Pulsar's Journey in Yahoo!: On-prem, Cloud and Hybrid - Pulsar Summit SF 2022
Pulsar's Journey in Yahoo!: On-prem, Cloud and Hybrid - Pulsar Summit SF 2022Pulsar's Journey in Yahoo!: On-prem, Cloud and Hybrid - Pulsar Summit SF 2022
Pulsar's Journey in Yahoo!: On-prem, Cloud and Hybrid - Pulsar Summit SF 2022StreamNative
 
Event-Driven Applications Done Right - Pulsar Summit SF 2022
Event-Driven Applications Done Right - Pulsar Summit SF 2022Event-Driven Applications Done Right - Pulsar Summit SF 2022
Event-Driven Applications Done Right - Pulsar Summit SF 2022StreamNative
 
Pulsar @ Scale. 200M RPM and 1K instances - Pulsar Summit SF 2022
Pulsar @ Scale. 200M RPM and 1K instances - Pulsar Summit SF 2022Pulsar @ Scale. 200M RPM and 1K instances - Pulsar Summit SF 2022
Pulsar @ Scale. 200M RPM and 1K instances - Pulsar Summit SF 2022StreamNative
 
Data Democracy: Journey to User-Facing Analytics - Pulsar Summit SF 2022
Data Democracy: Journey to User-Facing Analytics - Pulsar Summit SF 2022Data Democracy: Journey to User-Facing Analytics - Pulsar Summit SF 2022
Data Democracy: Journey to User-Facing Analytics - Pulsar Summit SF 2022StreamNative
 
Beam + Pulsar: Powerful Stream Processing at Scale - Pulsar Summit SF 2022
Beam + Pulsar: Powerful Stream Processing at Scale - Pulsar Summit SF 2022Beam + Pulsar: Powerful Stream Processing at Scale - Pulsar Summit SF 2022
Beam + Pulsar: Powerful Stream Processing at Scale - Pulsar Summit SF 2022StreamNative
 
Welcome and Opening Remarks - Pulsar Summit SF 2022
Welcome and Opening Remarks - Pulsar Summit SF 2022Welcome and Opening Remarks - Pulsar Summit SF 2022
Welcome and Opening Remarks - Pulsar Summit SF 2022StreamNative
 
Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...
Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...
Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...StreamNative
 
MoP(MQTT on Pulsar) - a Powerful Tool for Apache Pulsar in IoT - Pulsar Summi...
MoP(MQTT on Pulsar) - a Powerful Tool for Apache Pulsar in IoT - Pulsar Summi...MoP(MQTT on Pulsar) - a Powerful Tool for Apache Pulsar in IoT - Pulsar Summi...
MoP(MQTT on Pulsar) - a Powerful Tool for Apache Pulsar in IoT - Pulsar Summi...StreamNative
 
Improvements Made in KoP 2.9.0 - Pulsar Summit Asia 2021
Improvements Made in KoP 2.9.0  - Pulsar Summit Asia 2021Improvements Made in KoP 2.9.0  - Pulsar Summit Asia 2021
Improvements Made in KoP 2.9.0 - Pulsar Summit Asia 2021StreamNative
 

Mehr von StreamNative (20)

Is Using KoP (Kafka-on-Pulsar) a Good Idea? - Pulsar Summit SF 2022
Is Using KoP (Kafka-on-Pulsar) a Good Idea? - Pulsar Summit SF 2022Is Using KoP (Kafka-on-Pulsar) a Good Idea? - Pulsar Summit SF 2022
Is Using KoP (Kafka-on-Pulsar) a Good Idea? - Pulsar Summit SF 2022
 
Building an Asynchronous Application Framework with Python and Pulsar - Pulsa...
Building an Asynchronous Application Framework with Python and Pulsar - Pulsa...Building an Asynchronous Application Framework with Python and Pulsar - Pulsa...
Building an Asynchronous Application Framework with Python and Pulsar - Pulsa...
 
Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...
Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...
Blue-green deploys with Pulsar & Envoy in an event-driven microservice ecosys...
 
Distributed Database Design Decisions to Support High Performance Event Strea...
Distributed Database Design Decisions to Support High Performance Event Strea...Distributed Database Design Decisions to Support High Performance Event Strea...
Distributed Database Design Decisions to Support High Performance Event Strea...
 
Simplify Pulsar Functions Development with SQL - Pulsar Summit SF 2022
Simplify Pulsar Functions Development with SQL - Pulsar Summit SF 2022Simplify Pulsar Functions Development with SQL - Pulsar Summit SF 2022
Simplify Pulsar Functions Development with SQL - Pulsar Summit SF 2022
 
Towards a ZooKeeper-less Pulsar, etcd, etcd, etcd. - Pulsar Summit SF 2022
Towards a ZooKeeper-less Pulsar, etcd, etcd, etcd. - Pulsar Summit SF 2022Towards a ZooKeeper-less Pulsar, etcd, etcd, etcd. - Pulsar Summit SF 2022
Towards a ZooKeeper-less Pulsar, etcd, etcd, etcd. - Pulsar Summit SF 2022
 
Validating Apache Pulsar’s Behavior under Failure Conditions - Pulsar Summit ...
Validating Apache Pulsar’s Behavior under Failure Conditions - Pulsar Summit ...Validating Apache Pulsar’s Behavior under Failure Conditions - Pulsar Summit ...
Validating Apache Pulsar’s Behavior under Failure Conditions - Pulsar Summit ...
 
Cross the Streams! Creating Streaming Data Pipelines with Apache Flink + Apac...
Cross the Streams! Creating Streaming Data Pipelines with Apache Flink + Apac...Cross the Streams! Creating Streaming Data Pipelines with Apache Flink + Apac...
Cross the Streams! Creating Streaming Data Pipelines with Apache Flink + Apac...
 
Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022
Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022
Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022
 
Unlocking the Power of Lakehouse Architectures with Apache Pulsar and Apache ...
Unlocking the Power of Lakehouse Architectures with Apache Pulsar and Apache ...Unlocking the Power of Lakehouse Architectures with Apache Pulsar and Apache ...
Unlocking the Power of Lakehouse Architectures with Apache Pulsar and Apache ...
 
Understanding Broker Load Balancing - Pulsar Summit SF 2022
Understanding Broker Load Balancing - Pulsar Summit SF 2022Understanding Broker Load Balancing - Pulsar Summit SF 2022
Understanding Broker Load Balancing - Pulsar Summit SF 2022
 
Pulsar's Journey in Yahoo!: On-prem, Cloud and Hybrid - Pulsar Summit SF 2022
Pulsar's Journey in Yahoo!: On-prem, Cloud and Hybrid - Pulsar Summit SF 2022Pulsar's Journey in Yahoo!: On-prem, Cloud and Hybrid - Pulsar Summit SF 2022
Pulsar's Journey in Yahoo!: On-prem, Cloud and Hybrid - Pulsar Summit SF 2022
 
Event-Driven Applications Done Right - Pulsar Summit SF 2022
Event-Driven Applications Done Right - Pulsar Summit SF 2022Event-Driven Applications Done Right - Pulsar Summit SF 2022
Event-Driven Applications Done Right - Pulsar Summit SF 2022
 
Pulsar @ Scale. 200M RPM and 1K instances - Pulsar Summit SF 2022
Pulsar @ Scale. 200M RPM and 1K instances - Pulsar Summit SF 2022Pulsar @ Scale. 200M RPM and 1K instances - Pulsar Summit SF 2022
Pulsar @ Scale. 200M RPM and 1K instances - Pulsar Summit SF 2022
 
Data Democracy: Journey to User-Facing Analytics - Pulsar Summit SF 2022
Data Democracy: Journey to User-Facing Analytics - Pulsar Summit SF 2022Data Democracy: Journey to User-Facing Analytics - Pulsar Summit SF 2022
Data Democracy: Journey to User-Facing Analytics - Pulsar Summit SF 2022
 
Beam + Pulsar: Powerful Stream Processing at Scale - Pulsar Summit SF 2022
Beam + Pulsar: Powerful Stream Processing at Scale - Pulsar Summit SF 2022Beam + Pulsar: Powerful Stream Processing at Scale - Pulsar Summit SF 2022
Beam + Pulsar: Powerful Stream Processing at Scale - Pulsar Summit SF 2022
 
Welcome and Opening Remarks - Pulsar Summit SF 2022
Welcome and Opening Remarks - Pulsar Summit SF 2022Welcome and Opening Remarks - Pulsar Summit SF 2022
Welcome and Opening Remarks - Pulsar Summit SF 2022
 
Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...
Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...
Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...
 
MoP(MQTT on Pulsar) - a Powerful Tool for Apache Pulsar in IoT - Pulsar Summi...
MoP(MQTT on Pulsar) - a Powerful Tool for Apache Pulsar in IoT - Pulsar Summi...MoP(MQTT on Pulsar) - a Powerful Tool for Apache Pulsar in IoT - Pulsar Summi...
MoP(MQTT on Pulsar) - a Powerful Tool for Apache Pulsar in IoT - Pulsar Summi...
 
Improvements Made in KoP 2.9.0 - Pulsar Summit Asia 2021
Improvements Made in KoP 2.9.0  - Pulsar Summit Asia 2021Improvements Made in KoP 2.9.0  - Pulsar Summit Asia 2021
Improvements Made in KoP 2.9.0 - Pulsar Summit Asia 2021
 

Kürzlich hochgeladen

Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
[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
 
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
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
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
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
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
 
#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
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 

Kürzlich hochgeladen (20)

Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
[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
 
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...
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
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
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
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...
 
#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
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 

Building an Asynchronous Application Framework with Python and Pulsar

  • 1. Building an Asynchronous Application Framework with Python and Pulsar FEBRUARY 9 2022 Pulsar Summit Zac Bentley Lead Site Reliability Engineer Boston, MA
  • 2. 2 2022 © Klaviyo Confidential The Problem What We Built Challenges What Worked Well What’s Next? 01 02 03 04 05
  • 3. 3 2022 © Klaviyo Confidential Segmentation Reviews Retail POS Social Surveys Referrals Logistics Shipping Customer service Loyalty On site personalization Forms Ecommerce Order confirmation SMS Email
  • 5. 5 2022 © Klaviyo Confidential Problems Reliability Scalability Ownership/Process Architectural
  • 6. 6 2022 © Klaviyo Confidential Problems Reliability RabbitMQ has reliability issues when pushed too hard. “Backpressure will find you” Deep queues behave poorly. Lots of outages and firefighting. Scalability Ownership/Process Architectural
  • 7. 7 2022 © Klaviyo Confidential Problems Reliability Scalability Scaling RabbitMQ is intrusive: application code has to be aware of topology changes at every level. Geometry changes are painful. Scale-out doesn’t bring reliability/redundancy benefits. Ownership/Process Architectural
  • 8. 8 2022 © Klaviyo Confidential Problems Reliability Scalability Ownership/Process Individual team ownership is expensive in: - Roadmap time. - Hiring/onboarding capacity. - Coordination. Per-team ownership creates redundant expertise. Architectural
  • 9. 9 2022 © Klaviyo Confidential Problems Reliability Scalability Ownership/Process Architectural Celery is pretty hostile to SOA. Ordered consuming: not possible. Processing more >1 message at a time: not possible. Pub/sub: difficult. Replay/introspection: not possible.
  • 10. Existing API: Producers from app.tasks import mytask # Synchronous call: mytask("arg1", "arg2", kwarg1=SomeObject()) # Asynchronous call: mytask.apply_async(args=("arg1", "arg2"), kwargs={"kwarg1": SomeObject()}) @celery.task(acks_late=True) def mytask(arg1, arg2, kwarg1=None): ... @celery.task(acks_late=True) def mytask2(*args, **kwargs): ... Existing API: Consumer Workload Declaration
  • 11. 11 2022 © Klaviyo Confidential Problems Reliability Scalability Ownership/Process Architectural
  • 12. 02 What We Built 1. Platform Services: a team 2. Pulsar: a broker deployment 3. StreamNative: a support relationship 4. Chariot: an asynchronous application framework
  • 13. ORM for Pulsar Interactions for tenant in Tenant.search(name="standalone"): if tenant.allowed_clusters == ["standalone"]: ns = Namespace( tenant=tenant, name="mynamespace", acknowledged_quota=AcknowledgedMessageQuota(age=timedelta(minutes=10)), ) ns.create() topic = Topic( namespace=ns, name="mytopic" ) topic.create() subscription = Subscription( topic=topic, name="mysubscription", type=SubscriptionType.KeyShared, ) subscription.create() assert Subscription.get(name="mysubscription") == subscription consumer = subscription.consumer(name="myconsumer").connect() while True: message = consumer.receive() consumer.acknowledge(message)
  • 14. Declarative API for Schema Management & Migrations from klaviyo_schema.registry.teamname.data.payload_pb2 import PayloadProto my_topic = ChariotTopic( name="demo", durability=Durability.DURABILITY_REDUNDANT, max_message_size="1kb", max_producers=100, max_consumers=10, publish_rate_limits=( RateLimit( messages=1000, period="1m", actions=[RateLimitAction.RATE_LIMIT_ACTION_BLOCK], ), ), thresholds=( Threshold( kind=ThresholdKind.THRESHOLD_KIND_UNACKNOWLEDGED, size="200mb", actions=[ThresholdAction.THRESHOLD_FAIL_PUBLISH], ), ), consumer_groups=(ConsumerGroup(name="demo-consumer-group", type=SubscriptionType.KeyShared),), payload=RegisteredPayloadFromClass(payload_class=PayloadProto), )
  • 15. Existing API: Producers from app.tasks import mytask # Synchronous call: mytask("arg1", "arg2", kwarg1=SomeObject()) # Asynchronous call: mytask.apply_async(args=("arg1", "arg2"), kwargs={"kwarg1": SomeObject()}) @celery.task(acks_late=True) def mytask(arg1, arg2, kwarg1=None): ... @celery.task(acks_late=True) def mytask2(*args, **kwargs): ... Existing API: Consumer Workload Declaration
  • 16. New API: Producers class DemoExecutor(AsynchronousExecutor): @lifecycle_method(timeout=timedelta(seconds=10)) async def on_executor_shutdown_requested(self): ... @lifecycle_method(timeout=timedelta(seconds=10)) async def on_executor_shutdown(self): ... @lifecycle_method(timeout=timedelta(seconds=10)) async def on_executor_startup(self): ... @lifecycle_method(timeout=timedelta(seconds=10)) async def on_message_batch(self, messages: Sequence[PayloadProto]): for idx, msg in enumerate(messages): if idx % 2 == 0: await self.chariot_ack(msg) else: await self.chariot_reject(msg) from klaviyo_schema.registry.teamname.data.payload_pb2 import PayloadProto from klaviyo_schema.registry.teamname.topics import my_topic await my_topic.send(PayloadProto(...)) New API: Consumer Workload Declaration
  • 17. Back-Of-Queue Retries class DemoExecutor(AsynchronousExecutor): @lifecycle_method(timeout=timedelta(seconds=10)) @requeue_retry( batch_predicate=retry_on_exception_type( RetryException, retry_log_level=logging.INFO ), message_predicate=retry_until_approximate_attempt_count(10), delay=wait_exponential(max=timedelta(seconds=5)) + timedelta(seconds=1), ) async def on_message_batch(self, messages: Sequence[PayloadProto]): raise RetryException("Expected retry") ~> chariot worker start --topic demo --consumer-group democg --parallel 10 --start-executors-lazily --executor-class app.executors.demo:DemoExecutor --message-batch-assignment-behavior AnyKeyToAnyExecutor ~> chariot worker start --topic demo --consumer-group democg --parallel 10 --start-executors-lazily --executor-class app.executors.demo:DemoExecutor --message-batch-assignment-behavior NoOverlapBestEffortKeyExecutorAffinity --message-batch-flush-after-items 1000 --message-batch-flush-after-time 10sec Custom Batching and “Steering” for Parallel Execution without Reordering
  • 18. 18 2022 © Klaviyo Confidential Problems Solutions Reliability Scalability Ownership/Process Architectural
  • 19. 19 2022 © Klaviyo Confidential Solutions Reliability To become a user is to express the enforced maximum workload you’ll run. Pulsar’s redundancy helps weather outages. Deep backlogs are usable because reads aren’t always writes. Scalability Ownership/Process Architectural
  • 20. 20 2022 © Klaviyo Confidential Solutions Reliability Scalability The “CEO” (Central Expert Owner) can scale out pulsar to respond to demand. Teams express scalability need in the form of elevated rate limits or partition counts. Consultation with the community and StreamNative is invaluable. Ownership/Process Architectural
  • 21. 21 2022 © Klaviyo Confidential Solutions Reliability Scalability Ownership/Process Teams own producers/consumers. Teams submit their contracts, in the form of schema PRs, to the broker owners. Schema changes and backwards compatibility aren’t simple but they are now predictable. Architectural
  • 22. 22 2022 © Klaviyo Confidential Solutions Reliability Scalability Ownership/Process Architectural Many new patterns are now on the table: - Pub-sub - Ordered consume - Batched consumption + out-of-order acks - Deduplication/debouncing Reading topics at rest improves visibility. Async interaction with the same stream from multiple codebases is now possible.
  • 23. 03 Challenges ● Distribution as a library/framework rather than an application ● Python/C++ Pulsar client maturity ● Combining advanced broker features surfaced bugs ● Forking consumer daemons + threaded clients + async/await style is a costly combination ● Expectation management ● The “gap ledger” ● Management API quality
  • 24. 04 What Worked Well Process: ● Support from above ● Managed rollout speed ● Solving 2025’s problems, not 2022’s ● “Steel-thread” style focus on specific use-cases ● Willingness to commit to bring work in-house and start fresh where it made sense Technology: ● Declarative schemas for messages and dataflows ● Schema registry as code rather than a SPOF ● Managed Pulsar allows us to learn with less pain ● Isolating user code from consumer code improves reliability
  • 25. 05 What’s Next? Near Term: ● Manage internal adoption ● Scale to meet annual shopping holidays’ needs ● Start work on a “publish gateway” for connection pooling, circuit breaking, etc. Long Term: ● Online schema changes ● Key-local state ● Complex workflow support ● Make our work available to the community