You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by ju...@apache.org on 2022/09/16 04:58:52 UTC
[pulsar] branch master updated: Update cookbooks-message-queue.md (#17278)
This is an automated email from the ASF dual-hosted git repository.
junma pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new c6edd75317f Update cookbooks-message-queue.md (#17278)
c6edd75317f is described below
commit c6edd75317fb50f206a067b3ef761abbb4a2828b
Author: momo-jun <60...@users.noreply.github.com>
AuthorDate: Fri Sep 16 12:58:42 2022 +0800
Update cookbooks-message-queue.md (#17278)
---
site2/docs/cookbooks-message-queue.md | 59 ++++++++++++++++++++++++-----------
1 file changed, 40 insertions(+), 19 deletions(-)
diff --git a/site2/docs/cookbooks-message-queue.md b/site2/docs/cookbooks-message-queue.md
index 50d1b67eabd..fca9b7218e2 100644
--- a/site2/docs/cookbooks-message-queue.md
+++ b/site2/docs/cookbooks-message-queue.md
@@ -1,31 +1,52 @@
---
id: cookbooks-message-queue
-title: Using Pulsar as a message queue
+title: Use Pulsar as a message queue
sidebar_label: "Message queue"
---
-Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely *must* be processed despite the slowness or downright failure of this or that system component, there's a good chance that you'll need a message queue to step in and ensure that unprocessed data is retained---with correct ordering---until the required actions are taken.
+````mdx-code-block
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+````
+
+Message queues are essential components of many large-scale data architectures. If every single work object that passes through your system absolutely *must* be processed in spite of the slowness or downright failure of this or that system component, there's a good chance that you'll need a message queue to step in and ensure that unprocessed data is retained---with correct ordering---until the required actions are taken.
Pulsar is a great choice for a message queue because:
* it was built with [persistent message storage](concepts-architecture-overview.md#persistent-storage) in mind
* it offers automatic load balancing across [consumers](reference-terminology.md#consumer) for messages on a topic (or custom load balancing if you wish)
-> You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).
+:::tip
+
+You can use the same Pulsar installation to act as a real-time message bus and as a message queue if you wish (or just one or the other). You can set aside some topics for real-time purposes and other topics for message queue purposes (or use specific namespaces for either purpose if you wish).
+
+:::
+
+## Client configuration changes
+
+To use a Pulsar [topic](reference-terminology.md#topic) as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers depends on the load).
+Each consumer must establish a [shared subscription](concepts-messaging.md#shared) and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble).
-# Client configuration changes
+If you'd like to have tight control over message dispatching across consumers, set the consumers' **receiver queue** size very low (potentially even to 0 if necessary). Each consumer has a receiver queue that determines how many messages the consumer attempts to fetch at a time. For example, a receiver queue of 1000 (the default) means that the consumer attempts to process 1000 messages from the topic's backlog upon connection. Setting the receiver queue to 0 essentially means ensuring t [...]
-To use a Pulsar [topic](reference-terminology.md#topic) as a message queue, you should distribute the receiver load on that topic across several consumers (the optimal number of consumers will depend on the load). Each consumer must:
+:::tip
-* Establish a [shared subscription](concepts-messaging.md#shared) and use the same subscription name as the other consumers (otherwise the subscription is not shared and the consumers can't act as a processing ensemble)
-* If you'd like to have tight control over message dispatching across consumers, set the consumers' **receiver queue** size very low (potentially even to 0 if necessary). Each Pulsar [consumer](reference-terminology.md#consumer) has a receiver queue that determines how many messages the consumer will attempt to fetch at a time. A receiver queue of 1000 (the default), for example, means that the consumer will attempt to process 1000 messages from the topic's backlog upon connection. Setti [...]
+The receiver queue size of a partitioned topic consumer adopts the minimum one of the following two values:
+* `receiver_queue_size`
+* `max_total_receiver_queue_size_across_partitions`/`NumPartitions`
- The downside to restricting the receiver queue size of consumers is that that limits the potential throughput of those consumers and cannot be used with [partitioned topics](reference-terminology.md#partitioned-topic). Whether the performance/control trade-off is worthwhile will depend on your use case.
+:::
-## Java clients
+## Example
-Here's an example Java consumer configuration that uses a shared subscription:
+Here's an example that uses a shared subscription.
+
+````mdx-code-block
+<Tabs groupId="lang-choice"
+ defaultValue="Java"
+ values={[{"label":"Java","value":"Java"},{"label":"Python","value":"Python"},{"label":"C++","value":"C++"},{"label":"Go","value":"Go"}]}>
+<TabItem value="Java">
```java
import org.apache.pulsar.client.api.Consumer;
@@ -49,9 +70,8 @@ Consumer consumer = client.newConsumer()
.subscribe();
```
-## Python clients
-
-Here's an example Python consumer configuration that uses a shared subscription:
+</TabItem>
+<TabItem value="Python">
```python
from pulsar import Client, ConsumerType
@@ -69,9 +89,8 @@ consumer = client.subscribe(
consumer_type=ConsumerType.Shared)
```
-## C++ clients
-
-Here's an example C++ consumer configuration that uses a shared subscription:
+</TabItem>
+<TabItem value="C++">
```cpp
#include <pulsar/Client.h>
@@ -92,9 +111,8 @@ Consumer consumer;
Result result = client.subscribe(topic, subscription, consumerConfig, consumer);
```
-## Go clients
-
-Here is an example of a Go consumer configuration that uses a shared subscription:
+</TabItem>
+<TabItem value="Go">
```go
import "github.com/apache/pulsar-client-go/pulsar"
@@ -116,3 +134,6 @@ if err != nil {
}
```
+</TabItem>
+</Tabs>
+````
\ No newline at end of file