27
Distributed pub/sub platform github.com/yahoo/pulsar Matteo Merli — [email protected] 11/17/2016

Pulsar - Distributed pub/sub platform

Embed Size (px)

Citation preview

Page 1: Pulsar - Distributed pub/sub platform

Dist r ibuted pub/sub p lat formgithub.com/yahoo/pulsar

Matteo Merli — [email protected] 11/17/2016

Page 2: Pulsar - Distributed pub/sub platform

Agenda

1. Pulsar Overview 2. Common use cases 3. Messaging API 4. Architecture 5. Future 6. Q&A

Page 3: Pulsar - Distributed pub/sub platform

What is Pulsar?

3

▪ Hosted pub-sub messaging ▪ Simple messaging model ▪ Highly scalable › Topics, Message throughput

▪ Ordering, durability & delivery guarantees ▪ Supports multi-tenancy ▪ Geo-replication ▪ Easy to operate (Amin APIs, Add capacity, replace machines)

Pulsar Cluster

BrokerBookie

ZK

GlobalZK

Producer Consumer

Replication

Page 4: Pulsar - Distributed pub/sub platform

Pulsar production usage stats

4

▪ 1.5+ years ▪ 1.4 Million topics ▪ Publishes 100 billion messages/day (delivery 7x) ▪ Average latency < 5ms, 99% 15ms ▪ Zero data loss ▪ 80+ applications ▪ Critical component of major Yahoo systems: › Mail, Finance, Sports, Gemini Ads

▪ Self-Served provisioning ▪ Full-mesh cross-datacenter replication – 8 data centers

Page 5: Pulsar - Distributed pub/sub platform

Why build a new system?

5

▪ No existing solution to satisfy requirements › Multi tenant — 1M topics — Low latency — Durability — Geo replication

▪ Kafka doesn’t scale well with many topics: › Storage model based on individual directory per topic partition › Enabling durability kills the performance

▪ Operations are not very convenient › eg: replacing a server, manual commands to copy the data and involves clients › clients access to ZK clusters not desirable

▪ Ability to manage large backlogs ▪ No scalable support to keep consumer position

Page 6: Pulsar - Distributed pub/sub platform

Common use cases

Page 7: Pulsar - Distributed pub/sub platform

Message queue

7

▪ Decouple online / background ▪ Provide high-availability ▪ Reliable data transport

Onlineevents

Pulsar topic 1

Worker 1

Worker 2

Worker 3

Pulsar topic 2

Low latencypublish

Long running task

Notification

Page 8: Pulsar - Distributed pub/sub platform

Notifications

8

▪ Listeners are frequently different tenants ▪ Quotas needs to ensure producer is not affected

Event Pulsar topic

Component 1

Component 2

Component 3

Listeners

Page 9: Pulsar - Distributed pub/sub platform

Feedback system

9

Externalinputs

Pulsar topic 1

Servingsystem

Servingsystem

Servingsystem

Pulsar topic 2

Controller

Updates

Feedback

▪ Coordinate a large number of machines

▪ Propagate state

Page 10: Pulsar - Distributed pub/sub platform

Geo replication

10

▪ Asynchronous replication ▪ Integrated in the broker message flow ▪ Simple configuration to add/remove regions

Page 11: Pulsar - Distributed pub/sub platform

Platforms

11

▪ Pulsar used to build other platforms ▪ Provide high-level abstraction with strict guarantees

▪ Example: Sherpa distributed key-value store › Massive database powering most of Yahoo’s online data serving applications › Built upon the concept of a common message bus › Pulsar provides: • Durable log • Replication within and across geo-locations

Page 12: Pulsar - Distributed pub/sub platform

Messaging API

Page 13: Pulsar - Distributed pub/sub platform

Messaging Model

13

Consumer-A1 receives all messages published on T; B1, B2, B3 receive one third each

Shared

Exclusive

Consumer-B1

Consumer-B2

Consumer-B3

Topic-T

Subscription-B

Subscription-A Consumer-A1Producer-X

Producer-Y

Page 14: Pulsar - Distributed pub/sub platform

Producer example

14

PulsarClient client = PulsarClient.create( “http://broker.usw.example.com:8080”);

Producer producer = client.createProducer( “persistent://my-property/us-west/my-namespace/my-topic”);

// handles retries in case of failure producer.send("my-message".getBytes());

// Async version: producer.sendAsync("my-message".getBytes()).thenRun(() -> { // Message was persisted });

Page 15: Pulsar - Distributed pub/sub platform

Consumer example

15

PulsarClient client = PulsarClient.create( "http://broker.usw.example.com:8080");

Consumer consumer = client.subscribe( "persistent://my-property/us-west/my-namespace/my-topic", "my-subscription-name");

while (true) { // Wait for a message Message msg = consumer.receive();

System.out.println("Received message: " + msg.getData());

// Acknowledge the message so that it can be deleted by broker consumer.acknowledge(msg); }

Page 16: Pulsar - Distributed pub/sub platform

Additional client library features

16

▪ Partitioned topics ▪ Transparent batching of messages ▪ Compression ▪ End-to-end checksum ▪ TLS encryption ▪ Individual and cumulative acknowledgment ▪ Client side stats

Page 17: Pulsar - Distributed pub/sub platform

Archi tecture

Page 18: Pulsar - Distributed pub/sub platform

Architecture / 1

18

Broker ‣ Clients interacts only

with brokers ‣ No durable state

Bookie ‣ Apache BookKeeper

storage nodes ‣ Distributed write-ahead

log ‣ Each machine stores

data from many topicsPulsar Cluster

ZK

Producer Consumer

Broker 1 Broker 3

Bookie 1

Bookie 2

Bookie 3

Bookie 4

Bookie 5

Broker 2

Page 19: Pulsar - Distributed pub/sub platform

Architecture / 2

19

Separate layers between brokers bookies ‣ Broker and bookies can

be added independently

‣ Traffic can be shifted very quickly across brokers

‣ New bookies will ramp up on traffic quickly

Pulsar Cluster

ZK

Producer Consumer

Broker 1 Broker 3

Bookie 1

Bookie 2

Bookie 3

Bookie 4

Bookie 5

Broker 2

Page 20: Pulsar - Distributed pub/sub platform

Architecture / 3

20

Pulsar Cluster

Broker

Bookie

ZK

GlobalZK

Servicediscovery

Producer AppPulsar

lib

Replication

ManagedLedger

BK Client

Globalreplicators

Cache

Dispatcher

Consumer AppPulsar

lib

LoadBalancer

Client library ‣ Lookup correct broker

through service discovery

‣ Direct connection to broker

‣ When connection is established, authentication and authorization are enforced

‣ Reconnect with back off strategy

Page 21: Pulsar - Distributed pub/sub platform

Architecture / 4

21

Pulsar Cluster

Broker

Bookie

ZK

GlobalZK

Servicediscovery

Producer AppPulsar

lib

Replication

ManagedLedger

BK Client

Globalreplicators

Cache

Dispatcher

Consumer AppPulsar

lib

LoadBalancer

Dispatcher ‣ End-to-end async

message processing ‣ Messages are relayed

across producers, bookies and consumers with no copies

‣ Pooled ref-counted buffers

Managed Ledger ‣ Abstraction for single

topic storage ‣ Cache recent

messages

Page 22: Pulsar - Distributed pub/sub platform

BookKeeper

22

▪ Replicated log service ▪ Offer consistency and durability ▪ Restores replication factor after node failures ▪ Why is it a good choice for Pulsar? › Very efficient storage for sequential data › Very good distribution of IO across all bookies • For each topic we are creating multiple ledgers over time

› Isolation of write and reads › Flexible model for quorum writes with different tradeoffs

Page 23: Pulsar - Distributed pub/sub platform

BookKeeper - Storage

23

▪ A single bookie can serve and store thousands of ledgers

▪ Write and read paths are separated: › Avoid read activity to impact

write latency › Writes are added to in-

memory write-cache and committed to journal

› Write cache is flushed in background to separated device

▪ Entries are sorted to allow for mostly sequential reads

Page 24: Pulsar - Distributed pub/sub platform

Single topic — Throughput and latency

24

Throughput and 99pct publish latency — 1 Topic — 1 Producer

Late

ncy

(ms)

0

1

2

3

4

5

6

Throughput (msg/s)1,000 10,000 100,000 1,000,000 10,000,000

1,800,000

10 Bytes100 Bytes1KB

Page 25: Pulsar - Distributed pub/sub platform

Future

Page 26: Pulsar - Distributed pub/sub platform

Future

26

▪ WebSocket API › More language bindings based on top of it

▪ C++ API › Existing C++ client library is being prepared for OSS release

▪ End-to-End data encryption › Use symmetric/asymmetric encryption from producer to consumer › Data encrypted in flight and at rest › Don’t need to trust the service for security

▪ Globally consistent topics › Store the data in multiple regions › Can migrate across regions with consistency

Page 27: Pulsar - Distributed pub/sub platform

Final Remarks

• Check out the code and docs at github.com/yahoo/pulsar

• Give feedback or ask for more details on mailing lists: • Pulsar-Users • Pulsar-Dev