You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2019/10/05 09:13:35 UTC
[pulsar] branch asf-site updated: Updated site at revision 8e95f43
This is an automated email from the ASF dual-hosted git repository.
mmerli pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 7a416ae Updated site at revision 8e95f43
7a416ae is described below
commit 7a416ae65e989d1c1e788cfa1f3528d7cdb7fed5
Author: jenkins <bu...@apache.org>
AuthorDate: Sat Oct 5 09:13:25 2019 +0000
Updated site at revision 8e95f43
---
content/docs/en/2.3.2/io-connectors.html | 2 +-
content/docs/en/2.3.2/io-connectors/index.html | 2 +-
content/docs/en/2.4.0/io-connectors.html | 2 +-
content/docs/en/2.4.0/io-connectors/index.html | 2 +-
content/docs/en/io-connectors.html | 2 +-
content/docs/en/io-connectors/index.html | 2 +-
.../docs/en/next/cookbooks-retention-expiry.html | 37 +++---
.../en/next/cookbooks-retention-expiry/index.html | 37 +++---
content/docs/en/next/io-connectors.html | 2 +-
content/docs/en/next/io-connectors/index.html | 2 +-
content/docs/en/next/io-redis-sink.html | 126 +++++++++++++++++++++
content/docs/en/next/io-redis-sink/index.html | 126 +++++++++++++++++++++
content/docs/fr/2.3.2/io-connectors.html | 2 +-
content/docs/fr/2.3.2/io-connectors/index.html | 2 +-
content/docs/fr/2.4.0/io-connectors.html | 2 +-
content/docs/fr/2.4.0/io-connectors/index.html | 2 +-
content/docs/fr/io-connectors.html | 2 +-
content/docs/fr/io-connectors/index.html | 2 +-
.../docs/fr/next/cookbooks-retention-expiry.html | 36 +++---
.../fr/next/cookbooks-retention-expiry/index.html | 36 +++---
content/docs/fr/next/io-connectors.html | 2 +-
content/docs/fr/next/io-connectors/index.html | 2 +-
content/docs/fr/next/io-redis-sink.html | 125 ++++++++++++++++++++
content/docs/fr/next/io-redis-sink/index.html | 125 ++++++++++++++++++++
content/docs/ja/2.3.2/io-connectors.html | 2 +-
content/docs/ja/2.3.2/io-connectors/index.html | 2 +-
content/docs/ja/2.4.0/io-connectors.html | 2 +-
content/docs/ja/2.4.0/io-connectors/index.html | 2 +-
content/docs/ja/io-connectors.html | 2 +-
content/docs/ja/io-connectors/index.html | 2 +-
.../docs/ja/next/cookbooks-retention-expiry.html | 36 +++---
.../ja/next/cookbooks-retention-expiry/index.html | 36 +++---
content/docs/ja/next/io-connectors.html | 2 +-
content/docs/ja/next/io-connectors/index.html | 2 +-
content/docs/ja/next/io-redis-sink.html | 125 ++++++++++++++++++++
content/docs/ja/next/io-redis-sink/index.html | 125 ++++++++++++++++++++
content/docs/next/io-redis-sink.html | 13 +++
content/docs/next/io-redis-sink/index.html | 13 +++
content/docs/zh-CN/2.3.2/io-connectors.html | 2 +-
content/docs/zh-CN/2.3.2/io-connectors/index.html | 2 +-
content/docs/zh-CN/2.4.0/io-connectors.html | 2 +-
content/docs/zh-CN/2.4.0/io-connectors/index.html | 2 +-
content/docs/zh-CN/io-connectors.html | 2 +-
content/docs/zh-CN/io-connectors/index.html | 2 +-
.../zh-CN/next/cookbooks-retention-expiry.html | 36 +++---
.../next/cookbooks-retention-expiry/index.html | 36 +++---
content/docs/zh-CN/next/io-connectors.html | 2 +-
content/docs/zh-CN/next/io-connectors/index.html | 2 +-
content/docs/zh-CN/next/io-redis-sink.html | 125 ++++++++++++++++++++
content/docs/zh-CN/next/io-redis-sink/index.html | 125 ++++++++++++++++++++
content/sitemap.xml | 2 +-
content/swagger/2.5.0-SNAPSHOT/swagger.json | 28 ++---
.../swagger/2.5.0-SNAPSHOT/swaggerfunctions.json | 54 ++++-----
content/swagger/master/swagger.json | 28 ++---
content/swagger/master/swaggerfunctions.json | 54 ++++-----
55 files changed, 1295 insertions(+), 253 deletions(-)
diff --git a/content/docs/en/2.3.2/io-connectors.html b/content/docs/en/2.3.2/io-connectors.html
index ab48883..7cf01a2 100644
--- a/content/docs/en/2.3.2/io-connectors.html
+++ b/content/docs/en/2.3.2/io-connectors.html
@@ -94,7 +94,7 @@ Pulsar Functions cluster.</p>
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/en/2.3.2/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/en/2.3.2/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/en/2.3.2/io-connectors/index.html b/content/docs/en/2.3.2/io-connectors/index.html
index ab48883..7cf01a2 100644
--- a/content/docs/en/2.3.2/io-connectors/index.html
+++ b/content/docs/en/2.3.2/io-connectors/index.html
@@ -94,7 +94,7 @@ Pulsar Functions cluster.</p>
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/en/2.3.2/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/en/2.3.2/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/en/2.4.0/io-connectors.html b/content/docs/en/2.4.0/io-connectors.html
index a81f8d8..2602030 100644
--- a/content/docs/en/2.4.0/io-connectors.html
+++ b/content/docs/en/2.4.0/io-connectors.html
@@ -94,7 +94,7 @@ Pulsar Functions cluster.</p>
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/en/2.4.0/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/en/2.4.0/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/en/2.4.0/io-connectors/index.html b/content/docs/en/2.4.0/io-connectors/index.html
index a81f8d8..2602030 100644
--- a/content/docs/en/2.4.0/io-connectors/index.html
+++ b/content/docs/en/2.4.0/io-connectors/index.html
@@ -94,7 +94,7 @@ Pulsar Functions cluster.</p>
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/en/2.4.0/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/en/2.4.0/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/en/io-connectors.html b/content/docs/en/io-connectors.html
index 628e587..6cf6d7f 100644
--- a/content/docs/en/io-connectors.html
+++ b/content/docs/en/io-connectors.html
@@ -94,7 +94,7 @@ Pulsar Functions cluster.</p>
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/en/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/en/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
<li><a href="io-jdbc.md">JDBC Sink Connector</a></li>
diff --git a/content/docs/en/io-connectors/index.html b/content/docs/en/io-connectors/index.html
index 628e587..6cf6d7f 100644
--- a/content/docs/en/io-connectors/index.html
+++ b/content/docs/en/io-connectors/index.html
@@ -94,7 +94,7 @@ Pulsar Functions cluster.</p>
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/en/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/en/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
<li><a href="io-jdbc.md">JDBC Sink Connector</a></li>
diff --git a/content/docs/en/next/cookbooks-retention-expiry.html b/content/docs/en/next/cookbooks-retention-expiry.html
index 97fbaa8..475109f 100644
--- a/content/docs/en/next/cookbooks-retention-expiry.html
+++ b/content/docs/en/next/cookbooks-retention-expiry.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers are responsible for handling messages that pass through Pulsar, including [persistent storage](/docs/en/next/concepts-architecture-overview#persistent-storage) of messages. [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers are responsible for handling messages that pass through Pulsar, including [persistent storage](/docs/en/next/concepts-architecture-overview#persistent-storage) of messages. [...]
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,30 +74,30 @@
};
}
});
- </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/cookbooks-retention-expiry.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 class="postHeaderTitle">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, in [...]
+ </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/cookbooks-retention-expiry.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 class="postHeaderTitle">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, in [...]
+<p>As a consequence, no messages are retained (by default) on a topic that has not had any subscriptions created for it.</p>
+<p>(Note that messages that are no longer being stored are not necessarily immediately deleted, and may in fact still be accessible until the next ledger rollover. Because clients cannot predict when rollovers may happen, it is not wise to rely on a rollover not happening at an inconvenient point in time.)</p>
+<p>In Pulsar, you can modify this behavior, with namespace granularity, in two ways:</p>
<ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>You can persistently store messages that are not within a backlog (because they've been acknowledged by on every existing subscription, or because there are no subscriptions) by setting <a href="#retention-policies">retention policies</a>.</li>
+<li>Messages that are not acknowledged within a specified timeframe can be automatically acknowledged, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
</ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
-<ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
-</ul>
-<p>Pulsar's <a href="/docs/en/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/en/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
+<p>Pulsar's <a href="/docs/en/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL with namespace granularity (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/en/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
<blockquote>
-<h4><a class="anchor" aria-hidden="true" id="retention-and-ttl-are-solving-two-different-problems"></a><a href="#retention-and-ttl-are-solving-two-different-problems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S [...]
+<h4><a class="anchor" aria-hidden="true" id="retention-and-ttl-solve-two-different-problems"></a><a href="#retention-and-ttl-solve-two-different-problems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3 [...]
<ul>
<li>Message retention: Keep the data for at least X hours (even if acknowledged)</li>
<li>Time-to-live: Discard data after some time (by automatically acknowledging)</li>
</ul>
-<p>In most cases, applications will want to use either one or the other (or none).</p>
+<p>Most applications will want to use at most one of these.</p>
</blockquote>
<h2><a class="anchor" aria-hidden="true" id="retention-policies"></a><a href="#retention-policies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
-<p>By default, when a Pulsar message arrives at a broker it will be stored until it has been acknowledged by a consumer, at which point it will be deleted. You can override this behavior and retain even messages that have already been acknowledged by setting a <em>retention policy</em> on all the topics in a given namespace. When you set a retention policy you can set either a <em>size limit</em> or a <em>time limit</em>.</p>
+<p>By default, when a Pulsar message arrives at a broker it will be stored until it has been acknowledged on all subscriptions, at which point it will be marked for deletion. You can override this behavior and retain even messages that have already been acknowledged on all subscriptions by setting a <em>retention policy</em> for all topics in a given namespace. Retention policies are either a <em>size limit</em> or a <em>time limit</em>.</p>
+<p>Retention policies are particularly useful if you intend to exclusively use the Reader interface. Because the Reader interface does not use acknowledgements, messages will never exist within backlogs. Most realistic Reader-only use cases require that retention be configured.</p>
<p>When you set a size limit of, say, 10 gigabytes, then messages in all topics in the namespace, <em>even acknowledged messages</em>, will be retained until the size limit for the topic is reached; if you set a time limit of, say, 1 day, then messages for all topics in the namespace will be retained for 24 hours.</p>
-<p>It is also possible to set <em>infinite</em> retention time or size, by setting <code>-1</code> for either time or
-size retention.</p>
+<p>TODO: Confirm this behavior?</p>
+<p>When a retention limit is exceeded, the oldest message is marked for deletion until the set of retained messages falls within the specified limits again.</p>
+<p>It is also possible to set <em>unlimited</em> retention time or size by setting <code>-1</code> for either time or size retention.</p>
<h3><a class="anchor" aria-hidden="true" id="defaults"></a><a href="#defaults" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 [...]
<p>There are two configuration parameters that you can use to set <a href="/docs/en/next/reference-terminology#instance">instance</a>-wide defaults for message retention: <a href="/docs/en/next/reference-configuration#broker-defaultRetentionTimeInMinutes"><code>defaultRetentionTimeInMinutes=0</code></a> and <a href="/docs/en/next/reference-configuration#broker-defaultRetentionSizeInMB"><code>defaultRetentionSizeInMB=0</code></a>.</p>
<p>Both of these parameters are in the <a href="/docs/en/next/reference-configuration#broker"><code>broker.conf</code></a> configuration file.</p>
@@ -111,12 +111,12 @@ size retention.</p>
--size 10G \
--time 3h
</code></pre>
-<p>To set retention with infinite time and a size limit:</p>
+<p>To set retention with a size limit but without a time limit:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size 1T \
--time -1
</code></pre>
-<p>Similarly, even the size can be to unlimited:</p>
+<p>Retention can be configured to be unlimited both in size and time:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size -1 \
--time -1
@@ -150,6 +150,7 @@ admin.namespaces().setRetention(namespace, policies);
<h2><a class="anchor" aria-hidden="true" id="backlog-quotas"></a><a href="#backlog-quotas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
<p><em>Backlogs</em> are sets of unacknowledged messages for a topic that have been stored by bookies. Pulsar stores all unacknowledged messages in backlogs until they are processed and acknowledged.</p>
<p>You can control the allowable size of backlogs, at the namespace level, using <em>backlog quotas</em>. Setting a backlog quota involves setting:</p>
+<p>TODO: Expand on is this per backlog or per topic?</p>
<ul>
<li>an allowable <em>size threshold</em> for each topic in the namespace</li>
<li>a <em>retention policy</em> that determines which action the <a href="/docs/en/next/reference-terminology#broker">broker</a> takes if the threshold is exceeded.</li>
@@ -167,7 +168,7 @@ admin.namespaces().setRetention(namespace, policies);
</table>
<blockquote>
<h4><a class="anchor" aria-hidden="true" id="beware-the-distinction-between-retention-policy-types"></a><a href="#beware-the-distinction-between-retention-policy-types" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2. [...]
-<p>As you may have noticed, there are two definitions of the term "retention policy" in Pulsar, one that applies to persistent storage of already-acknowledged messages and one that applies to backlogs.</p>
+<p>As you may have noticed, there are two definitions of the term "retention policy" in Pulsar, one that applies to persistent storage of messages not in backlogs, and one that applies to messages within backlogs.</p>
</blockquote>
<p>Backlog quotas are handled at the namespace level. They can be managed via:</p>
<h3><a class="anchor" aria-hidden="true" id="set-size-thresholds-and-backlog-retention-policies"></a><a href="#set-size-thresholds-and-backlog-retention-policies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 [...]
diff --git a/content/docs/en/next/cookbooks-retention-expiry/index.html b/content/docs/en/next/cookbooks-retention-expiry/index.html
index 97fbaa8..475109f 100644
--- a/content/docs/en/next/cookbooks-retention-expiry/index.html
+++ b/content/docs/en/next/cookbooks-retention-expiry/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers are responsible for handling messages that pass through Pulsar, including [persistent storage](/docs/en/next/concepts-architecture-overview#persistent-storage) of messages. [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers are responsible for handling messages that pass through Pulsar, including [persistent storage](/docs/en/next/concepts-architecture-overview#persistent-storage) of messages. [...]
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,30 +74,30 @@
};
}
});
- </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/cookbooks-retention-expiry.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 class="postHeaderTitle">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, in [...]
+ </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/cookbooks-retention-expiry.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 class="postHeaderTitle">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, in [...]
+<p>As a consequence, no messages are retained (by default) on a topic that has not had any subscriptions created for it.</p>
+<p>(Note that messages that are no longer being stored are not necessarily immediately deleted, and may in fact still be accessible until the next ledger rollover. Because clients cannot predict when rollovers may happen, it is not wise to rely on a rollover not happening at an inconvenient point in time.)</p>
+<p>In Pulsar, you can modify this behavior, with namespace granularity, in two ways:</p>
<ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>You can persistently store messages that are not within a backlog (because they've been acknowledged by on every existing subscription, or because there are no subscriptions) by setting <a href="#retention-policies">retention policies</a>.</li>
+<li>Messages that are not acknowledged within a specified timeframe can be automatically acknowledged, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
</ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
-<ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
-</ul>
-<p>Pulsar's <a href="/docs/en/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/en/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
+<p>Pulsar's <a href="/docs/en/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL with namespace granularity (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/en/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
<blockquote>
-<h4><a class="anchor" aria-hidden="true" id="retention-and-ttl-are-solving-two-different-problems"></a><a href="#retention-and-ttl-are-solving-two-different-problems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S [...]
+<h4><a class="anchor" aria-hidden="true" id="retention-and-ttl-solve-two-different-problems"></a><a href="#retention-and-ttl-solve-two-different-problems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3 [...]
<ul>
<li>Message retention: Keep the data for at least X hours (even if acknowledged)</li>
<li>Time-to-live: Discard data after some time (by automatically acknowledging)</li>
</ul>
-<p>In most cases, applications will want to use either one or the other (or none).</p>
+<p>Most applications will want to use at most one of these.</p>
</blockquote>
<h2><a class="anchor" aria-hidden="true" id="retention-policies"></a><a href="#retention-policies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
-<p>By default, when a Pulsar message arrives at a broker it will be stored until it has been acknowledged by a consumer, at which point it will be deleted. You can override this behavior and retain even messages that have already been acknowledged by setting a <em>retention policy</em> on all the topics in a given namespace. When you set a retention policy you can set either a <em>size limit</em> or a <em>time limit</em>.</p>
+<p>By default, when a Pulsar message arrives at a broker it will be stored until it has been acknowledged on all subscriptions, at which point it will be marked for deletion. You can override this behavior and retain even messages that have already been acknowledged on all subscriptions by setting a <em>retention policy</em> for all topics in a given namespace. Retention policies are either a <em>size limit</em> or a <em>time limit</em>.</p>
+<p>Retention policies are particularly useful if you intend to exclusively use the Reader interface. Because the Reader interface does not use acknowledgements, messages will never exist within backlogs. Most realistic Reader-only use cases require that retention be configured.</p>
<p>When you set a size limit of, say, 10 gigabytes, then messages in all topics in the namespace, <em>even acknowledged messages</em>, will be retained until the size limit for the topic is reached; if you set a time limit of, say, 1 day, then messages for all topics in the namespace will be retained for 24 hours.</p>
-<p>It is also possible to set <em>infinite</em> retention time or size, by setting <code>-1</code> for either time or
-size retention.</p>
+<p>TODO: Confirm this behavior?</p>
+<p>When a retention limit is exceeded, the oldest message is marked for deletion until the set of retained messages falls within the specified limits again.</p>
+<p>It is also possible to set <em>unlimited</em> retention time or size by setting <code>-1</code> for either time or size retention.</p>
<h3><a class="anchor" aria-hidden="true" id="defaults"></a><a href="#defaults" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 [...]
<p>There are two configuration parameters that you can use to set <a href="/docs/en/next/reference-terminology#instance">instance</a>-wide defaults for message retention: <a href="/docs/en/next/reference-configuration#broker-defaultRetentionTimeInMinutes"><code>defaultRetentionTimeInMinutes=0</code></a> and <a href="/docs/en/next/reference-configuration#broker-defaultRetentionSizeInMB"><code>defaultRetentionSizeInMB=0</code></a>.</p>
<p>Both of these parameters are in the <a href="/docs/en/next/reference-configuration#broker"><code>broker.conf</code></a> configuration file.</p>
@@ -111,12 +111,12 @@ size retention.</p>
--size 10G \
--time 3h
</code></pre>
-<p>To set retention with infinite time and a size limit:</p>
+<p>To set retention with a size limit but without a time limit:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size 1T \
--time -1
</code></pre>
-<p>Similarly, even the size can be to unlimited:</p>
+<p>Retention can be configured to be unlimited both in size and time:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size -1 \
--time -1
@@ -150,6 +150,7 @@ admin.namespaces().setRetention(namespace, policies);
<h2><a class="anchor" aria-hidden="true" id="backlog-quotas"></a><a href="#backlog-quotas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
<p><em>Backlogs</em> are sets of unacknowledged messages for a topic that have been stored by bookies. Pulsar stores all unacknowledged messages in backlogs until they are processed and acknowledged.</p>
<p>You can control the allowable size of backlogs, at the namespace level, using <em>backlog quotas</em>. Setting a backlog quota involves setting:</p>
+<p>TODO: Expand on is this per backlog or per topic?</p>
<ul>
<li>an allowable <em>size threshold</em> for each topic in the namespace</li>
<li>a <em>retention policy</em> that determines which action the <a href="/docs/en/next/reference-terminology#broker">broker</a> takes if the threshold is exceeded.</li>
@@ -167,7 +168,7 @@ admin.namespaces().setRetention(namespace, policies);
</table>
<blockquote>
<h4><a class="anchor" aria-hidden="true" id="beware-the-distinction-between-retention-policy-types"></a><a href="#beware-the-distinction-between-retention-policy-types" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2. [...]
-<p>As you may have noticed, there are two definitions of the term "retention policy" in Pulsar, one that applies to persistent storage of already-acknowledged messages and one that applies to backlogs.</p>
+<p>As you may have noticed, there are two definitions of the term "retention policy" in Pulsar, one that applies to persistent storage of messages not in backlogs, and one that applies to messages within backlogs.</p>
</blockquote>
<p>Backlog quotas are handled at the namespace level. They can be managed via:</p>
<h3><a class="anchor" aria-hidden="true" id="set-size-thresholds-and-backlog-retention-policies"></a><a href="#set-size-thresholds-and-backlog-retention-policies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 [...]
diff --git a/content/docs/en/next/io-connectors.html b/content/docs/en/next/io-connectors.html
index ac5d1f4..4b7576e 100644
--- a/content/docs/en/next/io-connectors.html
+++ b/content/docs/en/next/io-connectors.html
@@ -108,7 +108,7 @@
<li><p><a href="/docs/en/next/io-kinesis-sink">Kinesis sink connector</a></p></li>
<li><p><a href="/docs/en/next/io-mongo-sink">MongoDB sink connector</a></p></li>
<li><p><a href="io-rabbitmq-sink.md">RabbitMQ sink connector</a></p></li>
-<li><p><a href="/docs/en/next/io-redis">Redis sink connector</a></p></li>
+<li><p><a href="/docs/en/next/io-redis-sink">Redis sink connector</a></p></li>
<li><p><a href="/docs/en/next/io-solr-sink">Solr sink connector</a></p></li>
</ul>
</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/io-debug"><span class="arrow-prev">← </span><span>Debug</span></a><a class="docs-next button" href="/docs/en/next/io-cdc"><span>CDC connector</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source-connector">Source connector</a></li><li><a href="#sink-connector">Sink connector</a></li></ul></nav></div><footer c [...]
diff --git a/content/docs/en/next/io-connectors/index.html b/content/docs/en/next/io-connectors/index.html
index ac5d1f4..4b7576e 100644
--- a/content/docs/en/next/io-connectors/index.html
+++ b/content/docs/en/next/io-connectors/index.html
@@ -108,7 +108,7 @@
<li><p><a href="/docs/en/next/io-kinesis-sink">Kinesis sink connector</a></p></li>
<li><p><a href="/docs/en/next/io-mongo-sink">MongoDB sink connector</a></p></li>
<li><p><a href="io-rabbitmq-sink.md">RabbitMQ sink connector</a></p></li>
-<li><p><a href="/docs/en/next/io-redis">Redis sink connector</a></p></li>
+<li><p><a href="/docs/en/next/io-redis-sink">Redis sink connector</a></p></li>
<li><p><a href="/docs/en/next/io-solr-sink">Solr sink connector</a></p></li>
</ul>
</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/en/next/io-debug"><span class="arrow-prev">← </span><span>Debug</span></a><a class="docs-next button" href="/docs/en/next/io-cdc"><span>CDC connector</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source-connector">Source connector</a></li><li><a href="#sink-connector">Sink connector</a></li></ul></nav></div><footer c [...]
diff --git a/content/docs/en/next/io-redis-sink.html b/content/docs/en/next/io-redis-sink.html
new file mode 100644
index 0000000..b961632
--- /dev/null
+++ b/content/docs/en/next/io-redis-sink.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Redis sink connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The Redis sink connector pulls messages from Pulsar topics "/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Redis [...]
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-102219959-1', 'auto');
+ ga('send', 'pageview');
+ </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sid [...]
+ const languagesMenuItem = document.getElementById("languages-menu");
+ const languagesDropDown = document.getElementById("languages-dropdown");
+ languagesMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (languagesDropDown.className == "hide") {
+ languagesDropDown.className = "visible";
+ } else {
+ languagesDropDown.className = "hide";
+ }
+ });
+ </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-redis-sink.md" target="_bl [...]
+and persists the messages to a Redis database.</p>
+<h2><a class="anchor" aria-hidden="true" id="configuration"></a><a href="#configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The configuration of the Redis sink connector has the following properties.</p>
+<h3><a class="anchor" aria-hidden="true" id="property"></a><a href="#property" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 [...]
+<table>
+<thead>
+<tr><th>Name</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>redisHosts</code></td><td>String</td><td>true</td><td>" " (empty string)</td><td>A comma-separated list of Redis hosts to connect to.</td></tr>
+<tr><td><code>redisPassword</code></td><td>String</td><td>false</td><td>" " (empty string)</td><td>The password used to connect to Redis.</td></tr>
+<tr><td><code>redisDatabase</code></td><td>int</td><td>true</td><td>0</td><td>The Redis database to connect to.</td></tr>
+<tr><td><code>clientMode</code></td><td>String</td><td>false</td><td>Standalone</td><td>The client mode when interacting with Redis cluster. <br><br>Below are the available options: <br><li>Standalone<br><li>Cluster</td></tr>
+<tr><td><code>autoReconnect</code></td><td>boolean</td><td>false</td><td>true</td><td>Whether the Redis client automatically reconnect or not.</td></tr>
+<tr><td><code>requestQueue</code></td><td>int</td><td>false</td><td>2147483647</td><td>The maximum number of queued requests to Redis.</td></tr>
+<tr><td><code>tcpNoDelay</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable TCP with no delay or not.</td></tr>
+<tr><td><code>keepAlive</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable a keepalive to Redis or not.</td></tr>
+<tr><td><code>connectTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time to wait before timing out when connecting in milliseconds.</td></tr>
+<tr><td><code>operationTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time before an operation is marked as timed out in milliseconds .</td></tr>
+<tr><td><code>batchTimeMs</code></td><td>int</td><td>false</td><td>1000</td><td>The Redis operation time in milliseconds.</td></tr>
+<tr><td><code>batchSize</code></td><td>int</td><td>false</td><td>200</td><td>The batch size of writing to Redis database.</td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>Before using the Redis sink connector, you need to create a configuration file through one of the following methods.</p>
+<ul>
+<li><p>JSON</p>
+<pre><code class="hljs css language-json">{
+ <span class="hljs-attr">"redisHosts"</span>: <span class="hljs-string">"localhost:6379"</span>,
+ <span class="hljs-attr">"redisPassword"</span>: <span class="hljs-string">"fake@123"</span>,
+ <span class="hljs-attr">"redisDatabase"</span>: <span class="hljs-string">"1"</span>,
+ <span class="hljs-attr">"clientMode"</span>: <span class="hljs-string">"Standalone"</span>,
+ <span class="hljs-attr">"operationTimeout"</span>: <span class="hljs-string">"2000"</span>,
+ <span class="hljs-attr">"batchSize"</span>: <span class="hljs-string">"100"</span>,
+ <span class="hljs-attr">"batchTimeMs"</span>: <span class="hljs-string">"1000"</span>,
+ <span class="hljs-attr">"connectTimeout"</span>: <span class="hljs-string">"3000"</span>
+}
+</code></pre></li>
+<li><p>YAML</p>
+<pre><code class="hljs css language-yaml"><span class="hljs-string">{</span>
+<span class="hljs-attr"> redisHosts:</span> <span class="hljs-string">"localhost:6379"</span>
+<span class="hljs-attr"> redisPassword:</span> <span class="hljs-string">"fake@123"</span>
+<span class="hljs-attr"> redisDatabase:</span> <span class="hljs-number">1</span>
+<span class="hljs-attr"> clientMode:</span> <span class="hljs-string">"Standalone"</span>
+<span class="hljs-attr"> operationTimeout:</span> <span class="hljs-number">2000</span>
+<span class="hljs-attr"> batchSize:</span> <span class="hljs-number">100</span>
+<span class="hljs-attr"> batchTimeMs:</span> <span class="hljs-number">1000</span>
+<span class="hljs-attr"> connectTimeout:</span> <span class="hljs-number">3000</span>
+<span class="hljs-string">}</span>
+</code></pre></li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configuration">Configuration</a><ul class="toc-headings"><li><a href="#property">Property</a></li><li><a href="#example">Example</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are tr [...]
+ const community = document.querySelector("a[href='#community']").parentNode;
+ const communityMenu =
+ '<li>' +
+ '<a id="community-menu" href="#">Community <span style="font-size: 0.75em"> ▼</span></a>' +
+ '<div id="community-dropdown" class="hide">' +
+ '<ul id="community-dropdown-items">' +
+ '<li><a href="/en/contact">Contact</a></li>' +
+ '<li><a href="/en/contributing">Contributing</a></li>' +
+ '<li><a href="/en/events">Events</a></li>' +
+ '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking ❐</a></li>' +
+ '<li> </li>' +
+ '<li><a href="/en/resources">Resources</a></li>' +
+ '<li><a href="/en/team">Team</a></li>' +
+ '<li><a href="/en/powered-by">Powered By</a></li>' +
+ '</ul>' +
+ '</div>' +
+ '</li>';
+
+ community.innerHTML = communityMenu;
+
+ const communityMenuItem = document.getElementById("community-menu");
+ const communityDropDown = document.getElementById("community-dropdown");
+ communityMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (communityDropDown.className == 'hide') {
+ communityDropDown.className = 'visible';
+ } else {
+ communityDropDown.className = 'hide';
+ }
+ });
+ </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script><script>
+ document.addEventListener('keyup', function(e) {
+ if (e.target !== document.body) {
+ return;
+ }
+ // keyCode for '/' (slash)
+ if (e.keyCode === 191) {
+ const search = document.getElementById('search_input_react');
+ search && search.focus();
+ }
+ });
+ </script><script>
+ var search = docsearch({
+
+ apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+ indexName: 'apache_pulsar',
+ inputSelector: '#search_input_react',
+ algoliaOptions: {"facetFilters":["language:en","version:next"]}
+ });
+ </script></body></html>
\ No newline at end of file
diff --git a/content/docs/en/next/io-redis-sink/index.html b/content/docs/en/next/io-redis-sink/index.html
new file mode 100644
index 0000000..b961632
--- /dev/null
+++ b/content/docs/en/next/io-redis-sink/index.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Redis sink connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The Redis sink connector pulls messages from Pulsar topics "/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Redis [...]
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-102219959-1', 'auto');
+ ga('send', 'pageview');
+ </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sid [...]
+ const languagesMenuItem = document.getElementById("languages-menu");
+ const languagesDropDown = document.getElementById("languages-dropdown");
+ languagesMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (languagesDropDown.className == "hide") {
+ languagesDropDown.className = "visible";
+ } else {
+ languagesDropDown.className = "hide";
+ }
+ });
+ </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/incubator-pulsar/edit/master/site2/docs/io-redis-sink.md" target="_bl [...]
+and persists the messages to a Redis database.</p>
+<h2><a class="anchor" aria-hidden="true" id="configuration"></a><a href="#configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The configuration of the Redis sink connector has the following properties.</p>
+<h3><a class="anchor" aria-hidden="true" id="property"></a><a href="#property" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 [...]
+<table>
+<thead>
+<tr><th>Name</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>redisHosts</code></td><td>String</td><td>true</td><td>" " (empty string)</td><td>A comma-separated list of Redis hosts to connect to.</td></tr>
+<tr><td><code>redisPassword</code></td><td>String</td><td>false</td><td>" " (empty string)</td><td>The password used to connect to Redis.</td></tr>
+<tr><td><code>redisDatabase</code></td><td>int</td><td>true</td><td>0</td><td>The Redis database to connect to.</td></tr>
+<tr><td><code>clientMode</code></td><td>String</td><td>false</td><td>Standalone</td><td>The client mode when interacting with Redis cluster. <br><br>Below are the available options: <br><li>Standalone<br><li>Cluster</td></tr>
+<tr><td><code>autoReconnect</code></td><td>boolean</td><td>false</td><td>true</td><td>Whether the Redis client automatically reconnect or not.</td></tr>
+<tr><td><code>requestQueue</code></td><td>int</td><td>false</td><td>2147483647</td><td>The maximum number of queued requests to Redis.</td></tr>
+<tr><td><code>tcpNoDelay</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable TCP with no delay or not.</td></tr>
+<tr><td><code>keepAlive</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable a keepalive to Redis or not.</td></tr>
+<tr><td><code>connectTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time to wait before timing out when connecting in milliseconds.</td></tr>
+<tr><td><code>operationTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time before an operation is marked as timed out in milliseconds .</td></tr>
+<tr><td><code>batchTimeMs</code></td><td>int</td><td>false</td><td>1000</td><td>The Redis operation time in milliseconds.</td></tr>
+<tr><td><code>batchSize</code></td><td>int</td><td>false</td><td>200</td><td>The batch size of writing to Redis database.</td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>Before using the Redis sink connector, you need to create a configuration file through one of the following methods.</p>
+<ul>
+<li><p>JSON</p>
+<pre><code class="hljs css language-json">{
+ <span class="hljs-attr">"redisHosts"</span>: <span class="hljs-string">"localhost:6379"</span>,
+ <span class="hljs-attr">"redisPassword"</span>: <span class="hljs-string">"fake@123"</span>,
+ <span class="hljs-attr">"redisDatabase"</span>: <span class="hljs-string">"1"</span>,
+ <span class="hljs-attr">"clientMode"</span>: <span class="hljs-string">"Standalone"</span>,
+ <span class="hljs-attr">"operationTimeout"</span>: <span class="hljs-string">"2000"</span>,
+ <span class="hljs-attr">"batchSize"</span>: <span class="hljs-string">"100"</span>,
+ <span class="hljs-attr">"batchTimeMs"</span>: <span class="hljs-string">"1000"</span>,
+ <span class="hljs-attr">"connectTimeout"</span>: <span class="hljs-string">"3000"</span>
+}
+</code></pre></li>
+<li><p>YAML</p>
+<pre><code class="hljs css language-yaml"><span class="hljs-string">{</span>
+<span class="hljs-attr"> redisHosts:</span> <span class="hljs-string">"localhost:6379"</span>
+<span class="hljs-attr"> redisPassword:</span> <span class="hljs-string">"fake@123"</span>
+<span class="hljs-attr"> redisDatabase:</span> <span class="hljs-number">1</span>
+<span class="hljs-attr"> clientMode:</span> <span class="hljs-string">"Standalone"</span>
+<span class="hljs-attr"> operationTimeout:</span> <span class="hljs-number">2000</span>
+<span class="hljs-attr"> batchSize:</span> <span class="hljs-number">100</span>
+<span class="hljs-attr"> batchTimeMs:</span> <span class="hljs-number">1000</span>
+<span class="hljs-attr"> connectTimeout:</span> <span class="hljs-number">3000</span>
+<span class="hljs-string">}</span>
+</code></pre></li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configuration">Configuration</a><ul class="toc-headings"><li><a href="#property">Property</a></li><li><a href="#example">Example</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are tr [...]
+ const community = document.querySelector("a[href='#community']").parentNode;
+ const communityMenu =
+ '<li>' +
+ '<a id="community-menu" href="#">Community <span style="font-size: 0.75em"> ▼</span></a>' +
+ '<div id="community-dropdown" class="hide">' +
+ '<ul id="community-dropdown-items">' +
+ '<li><a href="/en/contact">Contact</a></li>' +
+ '<li><a href="/en/contributing">Contributing</a></li>' +
+ '<li><a href="/en/events">Events</a></li>' +
+ '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking ❐</a></li>' +
+ '<li> </li>' +
+ '<li><a href="/en/resources">Resources</a></li>' +
+ '<li><a href="/en/team">Team</a></li>' +
+ '<li><a href="/en/powered-by">Powered By</a></li>' +
+ '</ul>' +
+ '</div>' +
+ '</li>';
+
+ community.innerHTML = communityMenu;
+
+ const communityMenuItem = document.getElementById("community-menu");
+ const communityDropDown = document.getElementById("community-dropdown");
+ communityMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (communityDropDown.className == 'hide') {
+ communityDropDown.className = 'visible';
+ } else {
+ communityDropDown.className = 'hide';
+ }
+ });
+ </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script><script>
+ document.addEventListener('keyup', function(e) {
+ if (e.target !== document.body) {
+ return;
+ }
+ // keyCode for '/' (slash)
+ if (e.keyCode === 191) {
+ const search = document.getElementById('search_input_react');
+ search && search.focus();
+ }
+ });
+ </script><script>
+ var search = docsearch({
+
+ apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+ indexName: 'apache_pulsar',
+ inputSelector: '#search_input_react',
+ algoliaOptions: {"facetFilters":["language:en","version:next"]}
+ });
+ </script></body></html>
\ No newline at end of file
diff --git a/content/docs/fr/2.3.2/io-connectors.html b/content/docs/fr/2.3.2/io-connectors.html
index 280cebd..60dc020 100644
--- a/content/docs/fr/2.3.2/io-connectors.html
+++ b/content/docs/fr/2.3.2/io-connectors.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/fr/2.3.2/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/fr/2.3.2/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/fr/2.3.2/io-connectors/index.html b/content/docs/fr/2.3.2/io-connectors/index.html
index 280cebd..60dc020 100644
--- a/content/docs/fr/2.3.2/io-connectors/index.html
+++ b/content/docs/fr/2.3.2/io-connectors/index.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/fr/2.3.2/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/fr/2.3.2/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/fr/2.4.0/io-connectors.html b/content/docs/fr/2.4.0/io-connectors.html
index 4539036..484f7d8 100644
--- a/content/docs/fr/2.4.0/io-connectors.html
+++ b/content/docs/fr/2.4.0/io-connectors.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/fr/2.4.0/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/fr/2.4.0/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/fr/2.4.0/io-connectors/index.html b/content/docs/fr/2.4.0/io-connectors/index.html
index 4539036..484f7d8 100644
--- a/content/docs/fr/2.4.0/io-connectors/index.html
+++ b/content/docs/fr/2.4.0/io-connectors/index.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/fr/2.4.0/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/fr/2.4.0/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/fr/io-connectors.html b/content/docs/fr/io-connectors.html
index b55c55d..49fb225 100644
--- a/content/docs/fr/io-connectors.html
+++ b/content/docs/fr/io-connectors.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/fr/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/fr/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
<li><a href="io-jdbc.md">JDBC Sink Connector</a></li>
diff --git a/content/docs/fr/io-connectors/index.html b/content/docs/fr/io-connectors/index.html
index b55c55d..49fb225 100644
--- a/content/docs/fr/io-connectors/index.html
+++ b/content/docs/fr/io-connectors/index.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/fr/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/fr/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
<li><a href="io-jdbc.md">JDBC Sink Connector</a></li>
diff --git a/content/docs/fr/next/cookbooks-retention-expiry.html b/content/docs/fr/next/cookbooks-retention-expiry.html
index 32c9fca..17feb53 100644
--- a/content/docs/fr/next/cookbooks-retention-expiry.html
+++ b/content/docs/fr/next/cookbooks-retention-expiry.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers are responsible for handling messages that pass through Pulsar, including [persistent storage](/docs/fr/next/concepts-architecture-overview#persistent-storage) of messages. [...]
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers are responsible for handling messages that pass through Pulsar, including [persistent storage](/docs/fr/next/concepts-architecture-overview#persistent-storage) of messages. [...]
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,29 +74,30 @@
};
}
});
- </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/fr/next/concepts-archit [...]
+ </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/fr/next/concepts-archit [...]
+<p>As a consequence, no messages are retained (by default) on a topic that has not had any subscriptions created for it.</p>
+<p>(Note that messages that are no longer being stored are not necessarily immediately deleted, and may in fact still be accessible until the next ledger rollover. Because clients cannot predict when rollovers may happen, it is not wise to rely on a rollover not happening at an inconvenient point in time.)</p>
+<p>In Pulsar, you can modify this behavior, with namespace granularity, in two ways:</p>
<ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>You can persistently store messages that are not within a backlog (because they've been acknowledged by on every existing subscription, or because there are no subscriptions) by setting <a href="#retention-policies">retention policies</a>.</li>
+<li>Messages that are not acknowledged within a specified timeframe can be automatically acknowledged, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
</ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
-<ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
-</ul>
-<p>Pulsar's <a href="/docs/fr/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/fr/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
+<p>Pulsar's <a href="/docs/fr/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL with namespace granularity (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/fr/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
<blockquote>
-<h4><a class="anchor" aria-hidden="true" id="retention-and-ttl-are-solving-two-different-problems"></a><a href="#retention-and-ttl-are-solving-two-different-problems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S [...]
+<h4><a class="anchor" aria-hidden="true" id="retention-and-ttl-solve-two-different-problems"></a><a href="#retention-and-ttl-solve-two-different-problems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3 [...]
<ul>
<li>Message retention: Keep the data for at least X hours (even if acknowledged)</li>
<li>Time-to-live: Discard data after some time (by automatically acknowledging)</li>
</ul>
-<p>In most cases, applications will want to use either one or the other (or none).</p>
+<p>Most applications will want to use at most one of these.</p>
</blockquote>
<h2><a class="anchor" aria-hidden="true" id="retention-policies"></a><a href="#retention-policies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
-<p>By default, when a Pulsar message arrives at a broker it will be stored until it has been acknowledged by a consumer, at which point it will be deleted. You can override this behavior and retain even messages that have already been acknowledged by setting a <em>retention policy</em> on all the topics in a given namespace. When you set a retention policy you can set either a <em>size limit</em> or a <em>time limit</em>.</p>
+<p>By default, when a Pulsar message arrives at a broker it will be stored until it has been acknowledged on all subscriptions, at which point it will be marked for deletion. You can override this behavior and retain even messages that have already been acknowledged on all subscriptions by setting a <em>retention policy</em> for all topics in a given namespace. Retention policies are either a <em>size limit</em> or a <em>time limit</em>.</p>
+<p>Retention policies are particularly useful if you intend to exclusively use the Reader interface. Because the Reader interface does not use acknowledgements, messages will never exist within backlogs. Most realistic Reader-only use cases require that retention be configured.</p>
<p>When you set a size limit of, say, 10 gigabytes, then messages in all topics in the namespace, <em>even acknowledged messages</em>, will be retained until the size limit for the topic is reached; if you set a time limit of, say, 1 day, then messages for all topics in the namespace will be retained for 24 hours.</p>
-<p>It is also possible to set <em>infinite</em> retention time or size, by setting <code>-1</code> for either time or size retention.</p>
+<p>TODO: Confirm this behavior?</p>
+<p>When a retention limit is exceeded, the oldest message is marked for deletion until the set of retained messages falls within the specified limits again.</p>
+<p>It is also possible to set <em>unlimited</em> retention time or size by setting <code>-1</code> for either time or size retention.</p>
<h3><a class="anchor" aria-hidden="true" id="defaults"></a><a href="#defaults" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 [...]
<p>There are two configuration parameters that you can use to set <a href="/docs/fr/next/reference-terminology#instance">instance</a>-wide defaults for message retention: <a href="/docs/fr/next/reference-configuration#broker-defaultRetentionTimeInMinutes"><code>defaultRetentionTimeInMinutes=0</code></a> and <a href="/docs/fr/next/reference-configuration#broker-defaultRetentionSizeInMB"><code>defaultRetentionSizeInMB=0</code></a>.</p>
<p>Both of these parameters are in the <a href="/docs/fr/next/reference-configuration#broker"><code>broker.conf</code></a> configuration file.</p>
@@ -110,12 +111,12 @@
--size 10G \
--time 3h
</code></pre>
-<p>To set retention with infinite time and a size limit:</p>
+<p>To set retention with a size limit but without a time limit:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size 1T \
--time -1
</code></pre>
-<p>Similarly, even the size can be to unlimited:</p>
+<p>Retention can be configured to be unlimited both in size and time:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size -1 \
--time -1
@@ -149,6 +150,7 @@ admin.namespaces().setRetention(namespace, policies);
<h2><a class="anchor" aria-hidden="true" id="backlog-quotas"></a><a href="#backlog-quotas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
<p><em>Backlogs</em> are sets of unacknowledged messages for a topic that have been stored by bookies. Pulsar stores all unacknowledged messages in backlogs until they are processed and acknowledged.</p>
<p>You can control the allowable size of backlogs, at the namespace level, using <em>backlog quotas</em>. Setting a backlog quota involves setting:</p>
+<p>TODO: Expand on is this per backlog or per topic?</p>
<ul>
<li>an allowable <em>size threshold</em> for each topic in the namespace</li>
<li>a <em>retention policy</em> that determines which action the <a href="/docs/fr/next/reference-terminology#broker">broker</a> takes if the threshold is exceeded.</li>
@@ -166,7 +168,7 @@ admin.namespaces().setRetention(namespace, policies);
</table>
<blockquote>
<h4><a class="anchor" aria-hidden="true" id="beware-the-distinction-between-retention-policy-types"></a><a href="#beware-the-distinction-between-retention-policy-types" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2. [...]
-<p>As you may have noticed, there are two definitions of the term "retention policy" in Pulsar, one that applies to persistent storage of already-acknowledged messages and one that applies to backlogs.</p>
+<p>As you may have noticed, there are two definitions of the term "retention policy" in Pulsar, one that applies to persistent storage of messages not in backlogs, and one that applies to messages within backlogs.</p>
</blockquote>
<p>Backlog quotas are handled at the namespace level. They can be managed via:</p>
<h3><a class="anchor" aria-hidden="true" id="set-size-thresholds-and-backlog-retention-policies"></a><a href="#set-size-thresholds-and-backlog-retention-policies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 [...]
diff --git a/content/docs/fr/next/cookbooks-retention-expiry/index.html b/content/docs/fr/next/cookbooks-retention-expiry/index.html
index 32c9fca..17feb53 100644
--- a/content/docs/fr/next/cookbooks-retention-expiry/index.html
+++ b/content/docs/fr/next/cookbooks-retention-expiry/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers are responsible for handling messages that pass through Pulsar, including [persistent storage](/docs/fr/next/concepts-architecture-overview#persistent-storage) of messages. [...]
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers are responsible for handling messages that pass through Pulsar, including [persistent storage](/docs/fr/next/concepts-architecture-overview#persistent-storage) of messages. [...]
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,29 +74,30 @@
};
}
});
- </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/fr/next/concepts-archit [...]
+ </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/fr/next/concepts-archit [...]
+<p>As a consequence, no messages are retained (by default) on a topic that has not had any subscriptions created for it.</p>
+<p>(Note that messages that are no longer being stored are not necessarily immediately deleted, and may in fact still be accessible until the next ledger rollover. Because clients cannot predict when rollovers may happen, it is not wise to rely on a rollover not happening at an inconvenient point in time.)</p>
+<p>In Pulsar, you can modify this behavior, with namespace granularity, in two ways:</p>
<ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>You can persistently store messages that are not within a backlog (because they've been acknowledged by on every existing subscription, or because there are no subscriptions) by setting <a href="#retention-policies">retention policies</a>.</li>
+<li>Messages that are not acknowledged within a specified timeframe can be automatically acknowledged, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
</ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
-<ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
-</ul>
-<p>Pulsar's <a href="/docs/fr/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/fr/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
+<p>Pulsar's <a href="/docs/fr/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL with namespace granularity (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/fr/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
<blockquote>
-<h4><a class="anchor" aria-hidden="true" id="retention-and-ttl-are-solving-two-different-problems"></a><a href="#retention-and-ttl-are-solving-two-different-problems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S [...]
+<h4><a class="anchor" aria-hidden="true" id="retention-and-ttl-solve-two-different-problems"></a><a href="#retention-and-ttl-solve-two-different-problems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3 [...]
<ul>
<li>Message retention: Keep the data for at least X hours (even if acknowledged)</li>
<li>Time-to-live: Discard data after some time (by automatically acknowledging)</li>
</ul>
-<p>In most cases, applications will want to use either one or the other (or none).</p>
+<p>Most applications will want to use at most one of these.</p>
</blockquote>
<h2><a class="anchor" aria-hidden="true" id="retention-policies"></a><a href="#retention-policies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
-<p>By default, when a Pulsar message arrives at a broker it will be stored until it has been acknowledged by a consumer, at which point it will be deleted. You can override this behavior and retain even messages that have already been acknowledged by setting a <em>retention policy</em> on all the topics in a given namespace. When you set a retention policy you can set either a <em>size limit</em> or a <em>time limit</em>.</p>
+<p>By default, when a Pulsar message arrives at a broker it will be stored until it has been acknowledged on all subscriptions, at which point it will be marked for deletion. You can override this behavior and retain even messages that have already been acknowledged on all subscriptions by setting a <em>retention policy</em> for all topics in a given namespace. Retention policies are either a <em>size limit</em> or a <em>time limit</em>.</p>
+<p>Retention policies are particularly useful if you intend to exclusively use the Reader interface. Because the Reader interface does not use acknowledgements, messages will never exist within backlogs. Most realistic Reader-only use cases require that retention be configured.</p>
<p>When you set a size limit of, say, 10 gigabytes, then messages in all topics in the namespace, <em>even acknowledged messages</em>, will be retained until the size limit for the topic is reached; if you set a time limit of, say, 1 day, then messages for all topics in the namespace will be retained for 24 hours.</p>
-<p>It is also possible to set <em>infinite</em> retention time or size, by setting <code>-1</code> for either time or size retention.</p>
+<p>TODO: Confirm this behavior?</p>
+<p>When a retention limit is exceeded, the oldest message is marked for deletion until the set of retained messages falls within the specified limits again.</p>
+<p>It is also possible to set <em>unlimited</em> retention time or size by setting <code>-1</code> for either time or size retention.</p>
<h3><a class="anchor" aria-hidden="true" id="defaults"></a><a href="#defaults" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 [...]
<p>There are two configuration parameters that you can use to set <a href="/docs/fr/next/reference-terminology#instance">instance</a>-wide defaults for message retention: <a href="/docs/fr/next/reference-configuration#broker-defaultRetentionTimeInMinutes"><code>defaultRetentionTimeInMinutes=0</code></a> and <a href="/docs/fr/next/reference-configuration#broker-defaultRetentionSizeInMB"><code>defaultRetentionSizeInMB=0</code></a>.</p>
<p>Both of these parameters are in the <a href="/docs/fr/next/reference-configuration#broker"><code>broker.conf</code></a> configuration file.</p>
@@ -110,12 +111,12 @@
--size 10G \
--time 3h
</code></pre>
-<p>To set retention with infinite time and a size limit:</p>
+<p>To set retention with a size limit but without a time limit:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size 1T \
--time -1
</code></pre>
-<p>Similarly, even the size can be to unlimited:</p>
+<p>Retention can be configured to be unlimited both in size and time:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size -1 \
--time -1
@@ -149,6 +150,7 @@ admin.namespaces().setRetention(namespace, policies);
<h2><a class="anchor" aria-hidden="true" id="backlog-quotas"></a><a href="#backlog-quotas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
<p><em>Backlogs</em> are sets of unacknowledged messages for a topic that have been stored by bookies. Pulsar stores all unacknowledged messages in backlogs until they are processed and acknowledged.</p>
<p>You can control the allowable size of backlogs, at the namespace level, using <em>backlog quotas</em>. Setting a backlog quota involves setting:</p>
+<p>TODO: Expand on is this per backlog or per topic?</p>
<ul>
<li>an allowable <em>size threshold</em> for each topic in the namespace</li>
<li>a <em>retention policy</em> that determines which action the <a href="/docs/fr/next/reference-terminology#broker">broker</a> takes if the threshold is exceeded.</li>
@@ -166,7 +168,7 @@ admin.namespaces().setRetention(namespace, policies);
</table>
<blockquote>
<h4><a class="anchor" aria-hidden="true" id="beware-the-distinction-between-retention-policy-types"></a><a href="#beware-the-distinction-between-retention-policy-types" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2. [...]
-<p>As you may have noticed, there are two definitions of the term "retention policy" in Pulsar, one that applies to persistent storage of already-acknowledged messages and one that applies to backlogs.</p>
+<p>As you may have noticed, there are two definitions of the term "retention policy" in Pulsar, one that applies to persistent storage of messages not in backlogs, and one that applies to messages within backlogs.</p>
</blockquote>
<p>Backlog quotas are handled at the namespace level. They can be managed via:</p>
<h3><a class="anchor" aria-hidden="true" id="set-size-thresholds-and-backlog-retention-policies"></a><a href="#set-size-thresholds-and-backlog-retention-policies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 [...]
diff --git a/content/docs/fr/next/io-connectors.html b/content/docs/fr/next/io-connectors.html
index 31e4e9a..23b86cb 100644
--- a/content/docs/fr/next/io-connectors.html
+++ b/content/docs/fr/next/io-connectors.html
@@ -108,7 +108,7 @@
<li><p><a href="/docs/fr/next/io-kinesis-sink">Kinesis sink connector</a></p></li>
<li><p><a href="/docs/fr/next/io-mongo-sink">MongoDB sink connector</a></p></li>
<li><p><a href="io-rabbitmq-sink.md">RabbitMQ sink connector</a></p></li>
-<li><p><a href="/docs/fr/next/io-redis">Redis sink connector</a></p></li>
+<li><p><a href="/docs/fr/next/io-redis-sink">Redis sink connector</a></p></li>
<li><p><a href="/docs/fr/next/io-solr-sink">Solr sink connector</a></p></li>
</ul>
</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/io-debug"><span class="arrow-prev">← </span><span>Debug</span></a><a class="docs-next button" href="/docs/fr/next/io-cdc"><span>CDC connector</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source-connector">Source connector</a></li><li><a href="#sink-connector">Sink connector</a></li></ul></nav></div><footer c [...]
diff --git a/content/docs/fr/next/io-connectors/index.html b/content/docs/fr/next/io-connectors/index.html
index 31e4e9a..23b86cb 100644
--- a/content/docs/fr/next/io-connectors/index.html
+++ b/content/docs/fr/next/io-connectors/index.html
@@ -108,7 +108,7 @@
<li><p><a href="/docs/fr/next/io-kinesis-sink">Kinesis sink connector</a></p></li>
<li><p><a href="/docs/fr/next/io-mongo-sink">MongoDB sink connector</a></p></li>
<li><p><a href="io-rabbitmq-sink.md">RabbitMQ sink connector</a></p></li>
-<li><p><a href="/docs/fr/next/io-redis">Redis sink connector</a></p></li>
+<li><p><a href="/docs/fr/next/io-redis-sink">Redis sink connector</a></p></li>
<li><p><a href="/docs/fr/next/io-solr-sink">Solr sink connector</a></p></li>
</ul>
</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/fr/next/io-debug"><span class="arrow-prev">← </span><span>Debug</span></a><a class="docs-next button" href="/docs/fr/next/io-cdc"><span>CDC connector</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source-connector">Source connector</a></li><li><a href="#sink-connector">Sink connector</a></li></ul></nav></div><footer c [...]
diff --git a/content/docs/fr/next/io-redis-sink.html b/content/docs/fr/next/io-redis-sink.html
new file mode 100644
index 0000000..b84fd38
--- /dev/null
+++ b/content/docs/fr/next/io-redis-sink.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Redis sink connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The Redis sink connector pulls messages from Pulsar topics and persists the messages to a Redis database."/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content= [...]
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-102219959-1', 'auto');
+ ga('send', 'pageview');
+ </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sid [...]
+ const languagesMenuItem = document.getElementById("languages-menu");
+ const languagesDropDown = document.getElementById("languages-dropdown");
+ languagesMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (languagesDropDown.className == "hide") {
+ languagesDropDown.className = "visible";
+ } else {
+ languagesDropDown.className = "hide";
+ }
+ });
+ </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Transla [...]
+<h2><a class="anchor" aria-hidden="true" id="configuration"></a><a href="#configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The configuration of the Redis sink connector has the following properties.</p>
+<h3><a class="anchor" aria-hidden="true" id="property"></a><a href="#property" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 [...]
+<table>
+<thead>
+<tr><th>Name</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>redisHosts</code></td><td>String</td><td>true</td><td>" " (empty string)</td><td>A comma-separated list of Redis hosts to connect to.</td></tr>
+<tr><td><code>redisPassword</code></td><td>String</td><td>false</td><td>" " (empty string)</td><td>The password used to connect to Redis.</td></tr>
+<tr><td><code>redisDatabase</code></td><td>int</td><td>true</td><td>0</td><td>The Redis database to connect to.</td></tr>
+<tr><td><code>clientMode</code></td><td>String</td><td>false</td><td>Standalone</td><td>The client mode when interacting with Redis cluster. <br><br>Below are the available options: <br><li>Standalone<br><li>Cluster</td></tr>
+<tr><td><code>autoReconnect</code></td><td>boolean</td><td>false</td><td>true</td><td>Whether the Redis client automatically reconnect or not.</td></tr>
+<tr><td><code>requestQueue</code></td><td>int</td><td>false</td><td>2147483647</td><td>The maximum number of queued requests to Redis.</td></tr>
+<tr><td><code>tcpNoDelay</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable TCP with no delay or not.</td></tr>
+<tr><td><code>keepAlive</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable a keepalive to Redis or not.</td></tr>
+<tr><td><code>connectTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time to wait before timing out when connecting in milliseconds.</td></tr>
+<tr><td><code>operationTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time before an operation is marked as timed out in milliseconds .</td></tr>
+<tr><td><code>batchTimeMs</code></td><td>int</td><td>false</td><td>1000</td><td>The Redis operation time in milliseconds.</td></tr>
+<tr><td><code>batchSize</code></td><td>int</td><td>false</td><td>200</td><td>The batch size of writing to Redis database.</td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>Before using the Redis sink connector, you need to create a configuration file through one of the following methods.</p>
+<ul>
+<li><p>JSON</p>
+<pre><code class="hljs css language-json">{
+ <span class="hljs-attr">"redisHosts"</span>: <span class="hljs-string">"localhost:6379"</span>,
+ <span class="hljs-attr">"redisPassword"</span>: <span class="hljs-string">"fake@123"</span>,
+ <span class="hljs-attr">"redisDatabase"</span>: <span class="hljs-string">"1"</span>,
+ <span class="hljs-attr">"clientMode"</span>: <span class="hljs-string">"Standalone"</span>,
+ <span class="hljs-attr">"operationTimeout"</span>: <span class="hljs-string">"2000"</span>,
+ <span class="hljs-attr">"batchSize"</span>: <span class="hljs-string">"100"</span>,
+ <span class="hljs-attr">"batchTimeMs"</span>: <span class="hljs-string">"1000"</span>,
+ <span class="hljs-attr">"connectTimeout"</span>: <span class="hljs-string">"3000"</span>
+}
+</code></pre></li>
+<li><p>YAML</p>
+<pre><code class="hljs css language-yaml"><span class="hljs-string">{</span>
+<span class="hljs-attr"> redisHosts:</span> <span class="hljs-string">"localhost:6379"</span>
+<span class="hljs-attr"> redisPassword:</span> <span class="hljs-string">"fake@123"</span>
+<span class="hljs-attr"> redisDatabase:</span> <span class="hljs-number">1</span>
+<span class="hljs-attr"> clientMode:</span> <span class="hljs-string">"Standalone"</span>
+<span class="hljs-attr"> operationTimeout:</span> <span class="hljs-number">2000</span>
+<span class="hljs-attr"> batchSize:</span> <span class="hljs-number">100</span>
+<span class="hljs-attr"> batchTimeMs:</span> <span class="hljs-number">1000</span>
+<span class="hljs-attr"> connectTimeout:</span> <span class="hljs-number">3000</span>
+<span class="hljs-string">}</span>
+</code></pre></li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configuration">Configuration</a><ul class="toc-headings"><li><a href="#property">Property</a></li><li><a href="#example">Example</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are tr [...]
+ const community = document.querySelector("a[href='#community']").parentNode;
+ const communityMenu =
+ '<li>' +
+ '<a id="community-menu" href="#">Community <span style="font-size: 0.75em"> ▼</span></a>' +
+ '<div id="community-dropdown" class="hide">' +
+ '<ul id="community-dropdown-items">' +
+ '<li><a href="/fr/contact">Contact</a></li>' +
+ '<li><a href="/fr/contributing">Contributing</a></li>' +
+ '<li><a href="/fr/events">Events</a></li>' +
+ '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking ❐</a></li>' +
+ '<li> </li>' +
+ '<li><a href="/fr/resources">Resources</a></li>' +
+ '<li><a href="/fr/team">Team</a></li>' +
+ '<li><a href="/fr/powered-by">Powered By</a></li>' +
+ '</ul>' +
+ '</div>' +
+ '</li>';
+
+ community.innerHTML = communityMenu;
+
+ const communityMenuItem = document.getElementById("community-menu");
+ const communityDropDown = document.getElementById("community-dropdown");
+ communityMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (communityDropDown.className == 'hide') {
+ communityDropDown.className = 'visible';
+ } else {
+ communityDropDown.className = 'hide';
+ }
+ });
+ </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script><script>
+ document.addEventListener('keyup', function(e) {
+ if (e.target !== document.body) {
+ return;
+ }
+ // keyCode for '/' (slash)
+ if (e.keyCode === 191) {
+ const search = document.getElementById('search_input_react');
+ search && search.focus();
+ }
+ });
+ </script><script>
+ var search = docsearch({
+
+ apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+ indexName: 'apache_pulsar',
+ inputSelector: '#search_input_react',
+ algoliaOptions: {"facetFilters":["language:fr","version:next"]}
+ });
+ </script></body></html>
\ No newline at end of file
diff --git a/content/docs/fr/next/io-redis-sink/index.html b/content/docs/fr/next/io-redis-sink/index.html
new file mode 100644
index 0000000..b84fd38
--- /dev/null
+++ b/content/docs/fr/next/io-redis-sink/index.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Redis sink connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The Redis sink connector pulls messages from Pulsar topics and persists the messages to a Redis database."/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content= [...]
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-102219959-1', 'auto');
+ ga('send', 'pageview');
+ </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sid [...]
+ const languagesMenuItem = document.getElementById("languages-menu");
+ const languagesDropDown = document.getElementById("languages-dropdown");
+ languagesMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (languagesDropDown.className == "hide") {
+ languagesDropDown.className = "visible";
+ } else {
+ languagesDropDown.className = "hide";
+ }
+ });
+ </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/fr" target="_blank" rel="noreferrer noopener">Transla [...]
+<h2><a class="anchor" aria-hidden="true" id="configuration"></a><a href="#configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The configuration of the Redis sink connector has the following properties.</p>
+<h3><a class="anchor" aria-hidden="true" id="property"></a><a href="#property" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 [...]
+<table>
+<thead>
+<tr><th>Name</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>redisHosts</code></td><td>String</td><td>true</td><td>" " (empty string)</td><td>A comma-separated list of Redis hosts to connect to.</td></tr>
+<tr><td><code>redisPassword</code></td><td>String</td><td>false</td><td>" " (empty string)</td><td>The password used to connect to Redis.</td></tr>
+<tr><td><code>redisDatabase</code></td><td>int</td><td>true</td><td>0</td><td>The Redis database to connect to.</td></tr>
+<tr><td><code>clientMode</code></td><td>String</td><td>false</td><td>Standalone</td><td>The client mode when interacting with Redis cluster. <br><br>Below are the available options: <br><li>Standalone<br><li>Cluster</td></tr>
+<tr><td><code>autoReconnect</code></td><td>boolean</td><td>false</td><td>true</td><td>Whether the Redis client automatically reconnect or not.</td></tr>
+<tr><td><code>requestQueue</code></td><td>int</td><td>false</td><td>2147483647</td><td>The maximum number of queued requests to Redis.</td></tr>
+<tr><td><code>tcpNoDelay</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable TCP with no delay or not.</td></tr>
+<tr><td><code>keepAlive</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable a keepalive to Redis or not.</td></tr>
+<tr><td><code>connectTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time to wait before timing out when connecting in milliseconds.</td></tr>
+<tr><td><code>operationTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time before an operation is marked as timed out in milliseconds .</td></tr>
+<tr><td><code>batchTimeMs</code></td><td>int</td><td>false</td><td>1000</td><td>The Redis operation time in milliseconds.</td></tr>
+<tr><td><code>batchSize</code></td><td>int</td><td>false</td><td>200</td><td>The batch size of writing to Redis database.</td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>Before using the Redis sink connector, you need to create a configuration file through one of the following methods.</p>
+<ul>
+<li><p>JSON</p>
+<pre><code class="hljs css language-json">{
+ <span class="hljs-attr">"redisHosts"</span>: <span class="hljs-string">"localhost:6379"</span>,
+ <span class="hljs-attr">"redisPassword"</span>: <span class="hljs-string">"fake@123"</span>,
+ <span class="hljs-attr">"redisDatabase"</span>: <span class="hljs-string">"1"</span>,
+ <span class="hljs-attr">"clientMode"</span>: <span class="hljs-string">"Standalone"</span>,
+ <span class="hljs-attr">"operationTimeout"</span>: <span class="hljs-string">"2000"</span>,
+ <span class="hljs-attr">"batchSize"</span>: <span class="hljs-string">"100"</span>,
+ <span class="hljs-attr">"batchTimeMs"</span>: <span class="hljs-string">"1000"</span>,
+ <span class="hljs-attr">"connectTimeout"</span>: <span class="hljs-string">"3000"</span>
+}
+</code></pre></li>
+<li><p>YAML</p>
+<pre><code class="hljs css language-yaml"><span class="hljs-string">{</span>
+<span class="hljs-attr"> redisHosts:</span> <span class="hljs-string">"localhost:6379"</span>
+<span class="hljs-attr"> redisPassword:</span> <span class="hljs-string">"fake@123"</span>
+<span class="hljs-attr"> redisDatabase:</span> <span class="hljs-number">1</span>
+<span class="hljs-attr"> clientMode:</span> <span class="hljs-string">"Standalone"</span>
+<span class="hljs-attr"> operationTimeout:</span> <span class="hljs-number">2000</span>
+<span class="hljs-attr"> batchSize:</span> <span class="hljs-number">100</span>
+<span class="hljs-attr"> batchTimeMs:</span> <span class="hljs-number">1000</span>
+<span class="hljs-attr"> connectTimeout:</span> <span class="hljs-number">3000</span>
+<span class="hljs-string">}</span>
+</code></pre></li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configuration">Configuration</a><ul class="toc-headings"><li><a href="#property">Property</a></li><li><a href="#example">Example</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are tr [...]
+ const community = document.querySelector("a[href='#community']").parentNode;
+ const communityMenu =
+ '<li>' +
+ '<a id="community-menu" href="#">Community <span style="font-size: 0.75em"> ▼</span></a>' +
+ '<div id="community-dropdown" class="hide">' +
+ '<ul id="community-dropdown-items">' +
+ '<li><a href="/fr/contact">Contact</a></li>' +
+ '<li><a href="/fr/contributing">Contributing</a></li>' +
+ '<li><a href="/fr/events">Events</a></li>' +
+ '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking ❐</a></li>' +
+ '<li> </li>' +
+ '<li><a href="/fr/resources">Resources</a></li>' +
+ '<li><a href="/fr/team">Team</a></li>' +
+ '<li><a href="/fr/powered-by">Powered By</a></li>' +
+ '</ul>' +
+ '</div>' +
+ '</li>';
+
+ community.innerHTML = communityMenu;
+
+ const communityMenuItem = document.getElementById("community-menu");
+ const communityDropDown = document.getElementById("community-dropdown");
+ communityMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (communityDropDown.className == 'hide') {
+ communityDropDown.className = 'visible';
+ } else {
+ communityDropDown.className = 'hide';
+ }
+ });
+ </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script><script>
+ document.addEventListener('keyup', function(e) {
+ if (e.target !== document.body) {
+ return;
+ }
+ // keyCode for '/' (slash)
+ if (e.keyCode === 191) {
+ const search = document.getElementById('search_input_react');
+ search && search.focus();
+ }
+ });
+ </script><script>
+ var search = docsearch({
+
+ apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+ indexName: 'apache_pulsar',
+ inputSelector: '#search_input_react',
+ algoliaOptions: {"facetFilters":["language:fr","version:next"]}
+ });
+ </script></body></html>
\ No newline at end of file
diff --git a/content/docs/ja/2.3.2/io-connectors.html b/content/docs/ja/2.3.2/io-connectors.html
index 5ac1f24..80cfc20 100644
--- a/content/docs/ja/2.3.2/io-connectors.html
+++ b/content/docs/ja/2.3.2/io-connectors.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/ja/2.3.2/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/ja/2.3.2/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/ja/2.3.2/io-connectors/index.html b/content/docs/ja/2.3.2/io-connectors/index.html
index 5ac1f24..80cfc20 100644
--- a/content/docs/ja/2.3.2/io-connectors/index.html
+++ b/content/docs/ja/2.3.2/io-connectors/index.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/ja/2.3.2/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/ja/2.3.2/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/ja/2.4.0/io-connectors.html b/content/docs/ja/2.4.0/io-connectors.html
index 5455828..38baaee 100644
--- a/content/docs/ja/2.4.0/io-connectors.html
+++ b/content/docs/ja/2.4.0/io-connectors.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/ja/2.4.0/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/ja/2.4.0/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/ja/2.4.0/io-connectors/index.html b/content/docs/ja/2.4.0/io-connectors/index.html
index 5455828..38baaee 100644
--- a/content/docs/ja/2.4.0/io-connectors/index.html
+++ b/content/docs/ja/2.4.0/io-connectors/index.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/ja/2.4.0/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/ja/2.4.0/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/ja/io-connectors.html b/content/docs/ja/io-connectors.html
index f81f831..cb2c3cd 100644
--- a/content/docs/ja/io-connectors.html
+++ b/content/docs/ja/io-connectors.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/ja/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/ja/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
<li><a href="io-jdbc.md">JDBC Sink Connector</a></li>
diff --git a/content/docs/ja/io-connectors/index.html b/content/docs/ja/io-connectors/index.html
index f81f831..cb2c3cd 100644
--- a/content/docs/ja/io-connectors/index.html
+++ b/content/docs/ja/io-connectors/index.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/ja/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/ja/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
<li><a href="io-jdbc.md">JDBC Sink Connector</a></li>
diff --git a/content/docs/ja/next/cookbooks-retention-expiry.html b/content/docs/ja/next/cookbooks-retention-expiry.html
index c0bfdc6..7359012 100644
--- a/content/docs/ja/next/cookbooks-retention-expiry.html
+++ b/content/docs/ja/next/cookbooks-retention-expiry.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers are responsible for handling messages that pass through Pulsar, including [persistent storage](/docs/ja/next/concepts-architecture-overview#persistent-storage) of messages. [...]
+<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers are responsible for handling messages that pass through Pulsar, including [persistent storage](/docs/ja/next/concepts-architecture-overview#persistent-storage) of messages. [...]
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,29 +74,30 @@
};
}
});
- </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/ja/next/concepts-archit [...]
+ </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/ja/next/concepts-archit [...]
+<p>As a consequence, no messages are retained (by default) on a topic that has not had any subscriptions created for it.</p>
+<p>(Note that messages that are no longer being stored are not necessarily immediately deleted, and may in fact still be accessible until the next ledger rollover. Because clients cannot predict when rollovers may happen, it is not wise to rely on a rollover not happening at an inconvenient point in time.)</p>
+<p>In Pulsar, you can modify this behavior, with namespace granularity, in two ways:</p>
<ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>You can persistently store messages that are not within a backlog (because they've been acknowledged by on every existing subscription, or because there are no subscriptions) by setting <a href="#retention-policies">retention policies</a>.</li>
+<li>Messages that are not acknowledged within a specified timeframe can be automatically acknowledged, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
</ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
-<ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
-</ul>
-<p>Pulsar's <a href="/docs/ja/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/ja/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
+<p>Pulsar's <a href="/docs/ja/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL with namespace granularity (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/ja/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
<blockquote>
-<h4><a class="anchor" aria-hidden="true" id="retention-and-ttl-are-solving-two-different-problems"></a><a href="#retention-and-ttl-are-solving-two-different-problems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S [...]
+<h4><a class="anchor" aria-hidden="true" id="retention-and-ttl-solve-two-different-problems"></a><a href="#retention-and-ttl-solve-two-different-problems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3 [...]
<ul>
<li>Message retention: Keep the data for at least X hours (even if acknowledged)</li>
<li>Time-to-live: Discard data after some time (by automatically acknowledging)</li>
</ul>
-<p>In most cases, applications will want to use either one or the other (or none).</p>
+<p>Most applications will want to use at most one of these.</p>
</blockquote>
<h2><a class="anchor" aria-hidden="true" id="retention-policies"></a><a href="#retention-policies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
-<p>By default, when a Pulsar message arrives at a broker it will be stored until it has been acknowledged by a consumer, at which point it will be deleted. You can override this behavior and retain even messages that have already been acknowledged by setting a <em>retention policy</em> on all the topics in a given namespace. When you set a retention policy you can set either a <em>size limit</em> or a <em>time limit</em>.</p>
+<p>By default, when a Pulsar message arrives at a broker it will be stored until it has been acknowledged on all subscriptions, at which point it will be marked for deletion. You can override this behavior and retain even messages that have already been acknowledged on all subscriptions by setting a <em>retention policy</em> for all topics in a given namespace. Retention policies are either a <em>size limit</em> or a <em>time limit</em>.</p>
+<p>Retention policies are particularly useful if you intend to exclusively use the Reader interface. Because the Reader interface does not use acknowledgements, messages will never exist within backlogs. Most realistic Reader-only use cases require that retention be configured.</p>
<p>When you set a size limit of, say, 10 gigabytes, then messages in all topics in the namespace, <em>even acknowledged messages</em>, will be retained until the size limit for the topic is reached; if you set a time limit of, say, 1 day, then messages for all topics in the namespace will be retained for 24 hours.</p>
-<p>It is also possible to set <em>infinite</em> retention time or size, by setting <code>-1</code> for either time or size retention.</p>
+<p>TODO: Confirm this behavior?</p>
+<p>When a retention limit is exceeded, the oldest message is marked for deletion until the set of retained messages falls within the specified limits again.</p>
+<p>It is also possible to set <em>unlimited</em> retention time or size by setting <code>-1</code> for either time or size retention.</p>
<h3><a class="anchor" aria-hidden="true" id="defaults"></a><a href="#defaults" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 [...]
<p>There are two configuration parameters that you can use to set <a href="/docs/ja/next/reference-terminology#instance">instance</a>-wide defaults for message retention: <a href="/docs/ja/next/reference-configuration#broker-defaultRetentionTimeInMinutes"><code>defaultRetentionTimeInMinutes=0</code></a> and <a href="/docs/ja/next/reference-configuration#broker-defaultRetentionSizeInMB"><code>defaultRetentionSizeInMB=0</code></a>.</p>
<p>Both of these parameters are in the <a href="/docs/ja/next/reference-configuration#broker"><code>broker.conf</code></a> configuration file.</p>
@@ -110,12 +111,12 @@
--size 10G \
--time 3h
</code></pre>
-<p>To set retention with infinite time and a size limit:</p>
+<p>To set retention with a size limit but without a time limit:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size 1T \
--time -1
</code></pre>
-<p>Similarly, even the size can be to unlimited:</p>
+<p>Retention can be configured to be unlimited both in size and time:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size -1 \
--time -1
@@ -149,6 +150,7 @@ admin.namespaces().setRetention(namespace, policies);
<h2><a class="anchor" aria-hidden="true" id="backlog-quotas"></a><a href="#backlog-quotas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
<p><em>Backlogs</em> are sets of unacknowledged messages for a topic that have been stored by bookies. Pulsar stores all unacknowledged messages in backlogs until they are processed and acknowledged.</p>
<p>You can control the allowable size of backlogs, at the namespace level, using <em>backlog quotas</em>. Setting a backlog quota involves setting:</p>
+<p>TODO: Expand on is this per backlog or per topic?</p>
<ul>
<li>an allowable <em>size threshold</em> for each topic in the namespace</li>
<li>a <em>retention policy</em> that determines which action the <a href="/docs/ja/next/reference-terminology#broker">broker</a> takes if the threshold is exceeded.</li>
@@ -166,7 +168,7 @@ admin.namespaces().setRetention(namespace, policies);
</table>
<blockquote>
<h4><a class="anchor" aria-hidden="true" id="beware-the-distinction-between-retention-policy-types"></a><a href="#beware-the-distinction-between-retention-policy-types" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2. [...]
-<p>As you may have noticed, there are two definitions of the term "retention policy" in Pulsar, one that applies to persistent storage of already-acknowledged messages and one that applies to backlogs.</p>
+<p>As you may have noticed, there are two definitions of the term "retention policy" in Pulsar, one that applies to persistent storage of messages not in backlogs, and one that applies to messages within backlogs.</p>
</blockquote>
<p>Backlog quotas are handled at the namespace level. They can be managed via:</p>
<h3><a class="anchor" aria-hidden="true" id="set-size-thresholds-and-backlog-retention-policies"></a><a href="#set-size-thresholds-and-backlog-retention-policies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 [...]
diff --git a/content/docs/ja/next/cookbooks-retention-expiry/index.html b/content/docs/ja/next/cookbooks-retention-expiry/index.html
index c0bfdc6..7359012 100644
--- a/content/docs/ja/next/cookbooks-retention-expiry/index.html
+++ b/content/docs/ja/next/cookbooks-retention-expiry/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers are responsible for handling messages that pass through Pulsar, including [persistent storage](/docs/ja/next/concepts-architecture-overview#persistent-storage) of messages. [...]
+<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Message retention and expiry · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers are responsible for handling messages that pass through Pulsar, including [persistent storage](/docs/ja/next/concepts-architecture-overview#persistent-storage) of messages. [...]
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -74,29 +74,30 @@
};
}
});
- </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/ja/next/concepts-archit [...]
+ </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">Message retention and expiry</h1></header><article><div><span><p>Pulsar brokers are responsible for handling messages that pass through Pulsar, including <a href="/docs/ja/next/concepts-archit [...]
+<p>As a consequence, no messages are retained (by default) on a topic that has not had any subscriptions created for it.</p>
+<p>(Note that messages that are no longer being stored are not necessarily immediately deleted, and may in fact still be accessible until the next ledger rollover. Because clients cannot predict when rollovers may happen, it is not wise to rely on a rollover not happening at an inconvenient point in time.)</p>
+<p>In Pulsar, you can modify this behavior, with namespace granularity, in two ways:</p>
<ul>
-<li>immediately delete all messages that have been acknowledged on every subscription, and</li>
-<li>persistently store all unacknowledged messages in a <a href="#backlog-quotas">backlog</a>.</li>
+<li>You can persistently store messages that are not within a backlog (because they've been acknowledged by on every existing subscription, or because there are no subscriptions) by setting <a href="#retention-policies">retention policies</a>.</li>
+<li>Messages that are not acknowledged within a specified timeframe can be automatically acknowledged, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
</ul>
-<p>In Pulsar, you can override both of these default behaviors, at the namespace level, in two ways:</p>
-<ul>
-<li>You can persistently store messages that have already been consumed and acknowledged for a minimum time by setting <a href="#retention-policies">retention policies</a>.</li>
-<li>Messages that are not acknowledged within a specified timeframe, can be automatically marked as consumed, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
-</ul>
-<p>Pulsar's <a href="/docs/ja/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL at the namespace level (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/ja/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
+<p>Pulsar's <a href="/docs/ja/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL with namespace granularity (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/ja/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
<blockquote>
-<h4><a class="anchor" aria-hidden="true" id="retention-and-ttl-are-solving-two-different-problems"></a><a href="#retention-and-ttl-are-solving-two-different-problems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S [...]
+<h4><a class="anchor" aria-hidden="true" id="retention-and-ttl-solve-two-different-problems"></a><a href="#retention-and-ttl-solve-two-different-problems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3 [...]
<ul>
<li>Message retention: Keep the data for at least X hours (even if acknowledged)</li>
<li>Time-to-live: Discard data after some time (by automatically acknowledging)</li>
</ul>
-<p>In most cases, applications will want to use either one or the other (or none).</p>
+<p>Most applications will want to use at most one of these.</p>
</blockquote>
<h2><a class="anchor" aria-hidden="true" id="retention-policies"></a><a href="#retention-policies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22- [...]
-<p>By default, when a Pulsar message arrives at a broker it will be stored until it has been acknowledged by a consumer, at which point it will be deleted. You can override this behavior and retain even messages that have already been acknowledged by setting a <em>retention policy</em> on all the topics in a given namespace. When you set a retention policy you can set either a <em>size limit</em> or a <em>time limit</em>.</p>
+<p>By default, when a Pulsar message arrives at a broker it will be stored until it has been acknowledged on all subscriptions, at which point it will be marked for deletion. You can override this behavior and retain even messages that have already been acknowledged on all subscriptions by setting a <em>retention policy</em> for all topics in a given namespace. Retention policies are either a <em>size limit</em> or a <em>time limit</em>.</p>
+<p>Retention policies are particularly useful if you intend to exclusively use the Reader interface. Because the Reader interface does not use acknowledgements, messages will never exist within backlogs. Most realistic Reader-only use cases require that retention be configured.</p>
<p>When you set a size limit of, say, 10 gigabytes, then messages in all topics in the namespace, <em>even acknowledged messages</em>, will be retained until the size limit for the topic is reached; if you set a time limit of, say, 1 day, then messages for all topics in the namespace will be retained for 24 hours.</p>
-<p>It is also possible to set <em>infinite</em> retention time or size, by setting <code>-1</code> for either time or size retention.</p>
+<p>TODO: Confirm this behavior?</p>
+<p>When a retention limit is exceeded, the oldest message is marked for deletion until the set of retained messages falls within the specified limits again.</p>
+<p>It is also possible to set <em>unlimited</em> retention time or size by setting <code>-1</code> for either time or size retention.</p>
<h3><a class="anchor" aria-hidden="true" id="defaults"></a><a href="#defaults" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 [...]
<p>There are two configuration parameters that you can use to set <a href="/docs/ja/next/reference-terminology#instance">instance</a>-wide defaults for message retention: <a href="/docs/ja/next/reference-configuration#broker-defaultRetentionTimeInMinutes"><code>defaultRetentionTimeInMinutes=0</code></a> and <a href="/docs/ja/next/reference-configuration#broker-defaultRetentionSizeInMB"><code>defaultRetentionSizeInMB=0</code></a>.</p>
<p>Both of these parameters are in the <a href="/docs/ja/next/reference-configuration#broker"><code>broker.conf</code></a> configuration file.</p>
@@ -110,12 +111,12 @@
--size 10G \
--time 3h
</code></pre>
-<p>To set retention with infinite time and a size limit:</p>
+<p>To set retention with a size limit but without a time limit:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size 1T \
--time -1
</code></pre>
-<p>Similarly, even the size can be to unlimited:</p>
+<p>Retention can be configured to be unlimited both in size and time:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size -1 \
--time -1
@@ -149,6 +150,7 @@ admin.namespaces().setRetention(namespace, policies);
<h2><a class="anchor" aria-hidden="true" id="backlog-quotas"></a><a href="#backlog-quotas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
<p><em>Backlogs</em> are sets of unacknowledged messages for a topic that have been stored by bookies. Pulsar stores all unacknowledged messages in backlogs until they are processed and acknowledged.</p>
<p>You can control the allowable size of backlogs, at the namespace level, using <em>backlog quotas</em>. Setting a backlog quota involves setting:</p>
+<p>TODO: Expand on is this per backlog or per topic?</p>
<ul>
<li>an allowable <em>size threshold</em> for each topic in the namespace</li>
<li>a <em>retention policy</em> that determines which action the <a href="/docs/ja/next/reference-terminology#broker">broker</a> takes if the threshold is exceeded.</li>
@@ -166,7 +168,7 @@ admin.namespaces().setRetention(namespace, policies);
</table>
<blockquote>
<h4><a class="anchor" aria-hidden="true" id="beware-the-distinction-between-retention-policy-types"></a><a href="#beware-the-distinction-between-retention-policy-types" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2. [...]
-<p>As you may have noticed, there are two definitions of the term "retention policy" in Pulsar, one that applies to persistent storage of already-acknowledged messages and one that applies to backlogs.</p>
+<p>As you may have noticed, there are two definitions of the term "retention policy" in Pulsar, one that applies to persistent storage of messages not in backlogs, and one that applies to messages within backlogs.</p>
</blockquote>
<p>Backlog quotas are handled at the namespace level. They can be managed via:</p>
<h3><a class="anchor" aria-hidden="true" id="set-size-thresholds-and-backlog-retention-policies"></a><a href="#set-size-thresholds-and-backlog-retention-policies" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 [...]
diff --git a/content/docs/ja/next/io-connectors.html b/content/docs/ja/next/io-connectors.html
index a9c6e8b..6bd9d91 100644
--- a/content/docs/ja/next/io-connectors.html
+++ b/content/docs/ja/next/io-connectors.html
@@ -108,7 +108,7 @@
<li><p><a href="/docs/ja/next/io-kinesis-sink">Kinesis sink connector</a></p></li>
<li><p><a href="/docs/ja/next/io-mongo-sink">MongoDB sink connector</a></p></li>
<li><p><a href="io-rabbitmq-sink.md">RabbitMQ sink connector</a></p></li>
-<li><p><a href="/docs/ja/next/io-redis">Redis sink connector</a></p></li>
+<li><p><a href="/docs/ja/next/io-redis-sink">Redis sink connector</a></p></li>
<li><p><a href="/docs/ja/next/io-solr-sink">Solr sink connector</a></p></li>
</ul>
</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/io-debug"><span class="arrow-prev">← </span><span>Debug</span></a><a class="docs-next button" href="/docs/ja/next/io-cdc"><span>CDC connector</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source-connector">Source connector</a></li><li><a href="#sink-connector">Sink connector</a></li></ul></nav></div><footer c [...]
diff --git a/content/docs/ja/next/io-connectors/index.html b/content/docs/ja/next/io-connectors/index.html
index a9c6e8b..6bd9d91 100644
--- a/content/docs/ja/next/io-connectors/index.html
+++ b/content/docs/ja/next/io-connectors/index.html
@@ -108,7 +108,7 @@
<li><p><a href="/docs/ja/next/io-kinesis-sink">Kinesis sink connector</a></p></li>
<li><p><a href="/docs/ja/next/io-mongo-sink">MongoDB sink connector</a></p></li>
<li><p><a href="io-rabbitmq-sink.md">RabbitMQ sink connector</a></p></li>
-<li><p><a href="/docs/ja/next/io-redis">Redis sink connector</a></p></li>
+<li><p><a href="/docs/ja/next/io-redis-sink">Redis sink connector</a></p></li>
<li><p><a href="/docs/ja/next/io-solr-sink">Solr sink connector</a></p></li>
</ul>
</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/ja/next/io-debug"><span class="arrow-prev">← </span><span>Debug</span></a><a class="docs-next button" href="/docs/ja/next/io-cdc"><span>CDC connector</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source-connector">Source connector</a></li><li><a href="#sink-connector">Sink connector</a></li></ul></nav></div><footer c [...]
diff --git a/content/docs/ja/next/io-redis-sink.html b/content/docs/ja/next/io-redis-sink.html
new file mode 100644
index 0000000..8eb3f99
--- /dev/null
+++ b/content/docs/ja/next/io-redis-sink.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Redis sink connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The Redis sink connector pulls messages from Pulsar topics and persists the messages to a Redis database."/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content= [...]
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-102219959-1', 'auto');
+ ga('send', 'pageview');
+ </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sid [...]
+ const languagesMenuItem = document.getElementById("languages-menu");
+ const languagesDropDown = document.getElementById("languages-dropdown");
+ languagesMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (languagesDropDown.className == "hide") {
+ languagesDropDown.className = "visible";
+ } else {
+ languagesDropDown.className = "hide";
+ }
+ });
+ </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Transla [...]
+<h2><a class="anchor" aria-hidden="true" id="configuration"></a><a href="#configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The configuration of the Redis sink connector has the following properties.</p>
+<h3><a class="anchor" aria-hidden="true" id="property"></a><a href="#property" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 [...]
+<table>
+<thead>
+<tr><th>Name</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>redisHosts</code></td><td>String</td><td>true</td><td>" " (empty string)</td><td>A comma-separated list of Redis hosts to connect to.</td></tr>
+<tr><td><code>redisPassword</code></td><td>String</td><td>false</td><td>" " (empty string)</td><td>The password used to connect to Redis.</td></tr>
+<tr><td><code>redisDatabase</code></td><td>int</td><td>true</td><td>0</td><td>The Redis database to connect to.</td></tr>
+<tr><td><code>clientMode</code></td><td>String</td><td>false</td><td>Standalone</td><td>The client mode when interacting with Redis cluster. <br><br>Below are the available options: <br><li>Standalone<br><li>Cluster</td></tr>
+<tr><td><code>autoReconnect</code></td><td>boolean</td><td>false</td><td>true</td><td>Whether the Redis client automatically reconnect or not.</td></tr>
+<tr><td><code>requestQueue</code></td><td>int</td><td>false</td><td>2147483647</td><td>The maximum number of queued requests to Redis.</td></tr>
+<tr><td><code>tcpNoDelay</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable TCP with no delay or not.</td></tr>
+<tr><td><code>keepAlive</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable a keepalive to Redis or not.</td></tr>
+<tr><td><code>connectTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time to wait before timing out when connecting in milliseconds.</td></tr>
+<tr><td><code>operationTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time before an operation is marked as timed out in milliseconds .</td></tr>
+<tr><td><code>batchTimeMs</code></td><td>int</td><td>false</td><td>1000</td><td>The Redis operation time in milliseconds.</td></tr>
+<tr><td><code>batchSize</code></td><td>int</td><td>false</td><td>200</td><td>The batch size of writing to Redis database.</td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>Before using the Redis sink connector, you need to create a configuration file through one of the following methods.</p>
+<ul>
+<li><p>JSON</p>
+<pre><code class="hljs css language-json">{
+ <span class="hljs-attr">"redisHosts"</span>: <span class="hljs-string">"localhost:6379"</span>,
+ <span class="hljs-attr">"redisPassword"</span>: <span class="hljs-string">"fake@123"</span>,
+ <span class="hljs-attr">"redisDatabase"</span>: <span class="hljs-string">"1"</span>,
+ <span class="hljs-attr">"clientMode"</span>: <span class="hljs-string">"Standalone"</span>,
+ <span class="hljs-attr">"operationTimeout"</span>: <span class="hljs-string">"2000"</span>,
+ <span class="hljs-attr">"batchSize"</span>: <span class="hljs-string">"100"</span>,
+ <span class="hljs-attr">"batchTimeMs"</span>: <span class="hljs-string">"1000"</span>,
+ <span class="hljs-attr">"connectTimeout"</span>: <span class="hljs-string">"3000"</span>
+}
+</code></pre></li>
+<li><p>YAML</p>
+<pre><code class="hljs css language-yaml"><span class="hljs-string">{</span>
+<span class="hljs-attr"> redisHosts:</span> <span class="hljs-string">"localhost:6379"</span>
+<span class="hljs-attr"> redisPassword:</span> <span class="hljs-string">"fake@123"</span>
+<span class="hljs-attr"> redisDatabase:</span> <span class="hljs-number">1</span>
+<span class="hljs-attr"> clientMode:</span> <span class="hljs-string">"Standalone"</span>
+<span class="hljs-attr"> operationTimeout:</span> <span class="hljs-number">2000</span>
+<span class="hljs-attr"> batchSize:</span> <span class="hljs-number">100</span>
+<span class="hljs-attr"> batchTimeMs:</span> <span class="hljs-number">1000</span>
+<span class="hljs-attr"> connectTimeout:</span> <span class="hljs-number">3000</span>
+<span class="hljs-string">}</span>
+</code></pre></li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configuration">Configuration</a><ul class="toc-headings"><li><a href="#property">Property</a></li><li><a href="#example">Example</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are tr [...]
+ const community = document.querySelector("a[href='#community']").parentNode;
+ const communityMenu =
+ '<li>' +
+ '<a id="community-menu" href="#">Community <span style="font-size: 0.75em"> ▼</span></a>' +
+ '<div id="community-dropdown" class="hide">' +
+ '<ul id="community-dropdown-items">' +
+ '<li><a href="/ja/contact">Contact</a></li>' +
+ '<li><a href="/ja/contributing">Contributing</a></li>' +
+ '<li><a href="/ja/events">Events</a></li>' +
+ '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking ❐</a></li>' +
+ '<li> </li>' +
+ '<li><a href="/ja/resources">Resources</a></li>' +
+ '<li><a href="/ja/team">Team</a></li>' +
+ '<li><a href="/ja/powered-by">Powered By</a></li>' +
+ '</ul>' +
+ '</div>' +
+ '</li>';
+
+ community.innerHTML = communityMenu;
+
+ const communityMenuItem = document.getElementById("community-menu");
+ const communityDropDown = document.getElementById("community-dropdown");
+ communityMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (communityDropDown.className == 'hide') {
+ communityDropDown.className = 'visible';
+ } else {
+ communityDropDown.className = 'hide';
+ }
+ });
+ </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script><script>
+ document.addEventListener('keyup', function(e) {
+ if (e.target !== document.body) {
+ return;
+ }
+ // keyCode for '/' (slash)
+ if (e.keyCode === 191) {
+ const search = document.getElementById('search_input_react');
+ search && search.focus();
+ }
+ });
+ </script><script>
+ var search = docsearch({
+
+ apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+ indexName: 'apache_pulsar',
+ inputSelector: '#search_input_react',
+ algoliaOptions: {"facetFilters":["language:ja","version:next"]}
+ });
+ </script></body></html>
\ No newline at end of file
diff --git a/content/docs/ja/next/io-redis-sink/index.html b/content/docs/ja/next/io-redis-sink/index.html
new file mode 100644
index 0000000..8eb3f99
--- /dev/null
+++ b/content/docs/ja/next/io-redis-sink/index.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Redis sink connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The Redis sink connector pulls messages from Pulsar topics and persists the messages to a Redis database."/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" content= [...]
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-102219959-1', 'auto');
+ ga('send', 'pageview');
+ </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sid [...]
+ const languagesMenuItem = document.getElementById("languages-menu");
+ const languagesDropDown = document.getElementById("languages-dropdown");
+ languagesMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (languagesDropDown.className == "hide") {
+ languagesDropDown.className = "visible";
+ } else {
+ languagesDropDown.className = "hide";
+ }
+ });
+ </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/ja" target="_blank" rel="noreferrer noopener">Transla [...]
+<h2><a class="anchor" aria-hidden="true" id="configuration"></a><a href="#configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The configuration of the Redis sink connector has the following properties.</p>
+<h3><a class="anchor" aria-hidden="true" id="property"></a><a href="#property" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 [...]
+<table>
+<thead>
+<tr><th>Name</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th></tr>
+</thead>
+<tbody>
+<tr><td><code>redisHosts</code></td><td>String</td><td>true</td><td>" " (empty string)</td><td>A comma-separated list of Redis hosts to connect to.</td></tr>
+<tr><td><code>redisPassword</code></td><td>String</td><td>false</td><td>" " (empty string)</td><td>The password used to connect to Redis.</td></tr>
+<tr><td><code>redisDatabase</code></td><td>int</td><td>true</td><td>0</td><td>The Redis database to connect to.</td></tr>
+<tr><td><code>clientMode</code></td><td>String</td><td>false</td><td>Standalone</td><td>The client mode when interacting with Redis cluster. <br><br>Below are the available options: <br><li>Standalone<br><li>Cluster</td></tr>
+<tr><td><code>autoReconnect</code></td><td>boolean</td><td>false</td><td>true</td><td>Whether the Redis client automatically reconnect or not.</td></tr>
+<tr><td><code>requestQueue</code></td><td>int</td><td>false</td><td>2147483647</td><td>The maximum number of queued requests to Redis.</td></tr>
+<tr><td><code>tcpNoDelay</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable TCP with no delay or not.</td></tr>
+<tr><td><code>keepAlive</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable a keepalive to Redis or not.</td></tr>
+<tr><td><code>connectTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time to wait before timing out when connecting in milliseconds.</td></tr>
+<tr><td><code>operationTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time before an operation is marked as timed out in milliseconds .</td></tr>
+<tr><td><code>batchTimeMs</code></td><td>int</td><td>false</td><td>1000</td><td>The Redis operation time in milliseconds.</td></tr>
+<tr><td><code>batchSize</code></td><td>int</td><td>false</td><td>200</td><td>The batch size of writing to Redis database.</td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>Before using the Redis sink connector, you need to create a configuration file through one of the following methods.</p>
+<ul>
+<li><p>JSON</p>
+<pre><code class="hljs css language-json">{
+ <span class="hljs-attr">"redisHosts"</span>: <span class="hljs-string">"localhost:6379"</span>,
+ <span class="hljs-attr">"redisPassword"</span>: <span class="hljs-string">"fake@123"</span>,
+ <span class="hljs-attr">"redisDatabase"</span>: <span class="hljs-string">"1"</span>,
+ <span class="hljs-attr">"clientMode"</span>: <span class="hljs-string">"Standalone"</span>,
+ <span class="hljs-attr">"operationTimeout"</span>: <span class="hljs-string">"2000"</span>,
+ <span class="hljs-attr">"batchSize"</span>: <span class="hljs-string">"100"</span>,
+ <span class="hljs-attr">"batchTimeMs"</span>: <span class="hljs-string">"1000"</span>,
+ <span class="hljs-attr">"connectTimeout"</span>: <span class="hljs-string">"3000"</span>
+}
+</code></pre></li>
+<li><p>YAML</p>
+<pre><code class="hljs css language-yaml"><span class="hljs-string">{</span>
+<span class="hljs-attr"> redisHosts:</span> <span class="hljs-string">"localhost:6379"</span>
+<span class="hljs-attr"> redisPassword:</span> <span class="hljs-string">"fake@123"</span>
+<span class="hljs-attr"> redisDatabase:</span> <span class="hljs-number">1</span>
+<span class="hljs-attr"> clientMode:</span> <span class="hljs-string">"Standalone"</span>
+<span class="hljs-attr"> operationTimeout:</span> <span class="hljs-number">2000</span>
+<span class="hljs-attr"> batchSize:</span> <span class="hljs-number">100</span>
+<span class="hljs-attr"> batchTimeMs:</span> <span class="hljs-number">1000</span>
+<span class="hljs-attr"> connectTimeout:</span> <span class="hljs-number">3000</span>
+<span class="hljs-string">}</span>
+</code></pre></li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configuration">Configuration</a><ul class="toc-headings"><li><a href="#property">Property</a></li><li><a href="#example">Example</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are tr [...]
+ const community = document.querySelector("a[href='#community']").parentNode;
+ const communityMenu =
+ '<li>' +
+ '<a id="community-menu" href="#">Community <span style="font-size: 0.75em"> ▼</span></a>' +
+ '<div id="community-dropdown" class="hide">' +
+ '<ul id="community-dropdown-items">' +
+ '<li><a href="/ja/contact">Contact</a></li>' +
+ '<li><a href="/ja/contributing">Contributing</a></li>' +
+ '<li><a href="/ja/events">Events</a></li>' +
+ '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking ❐</a></li>' +
+ '<li> </li>' +
+ '<li><a href="/ja/resources">Resources</a></li>' +
+ '<li><a href="/ja/team">Team</a></li>' +
+ '<li><a href="/ja/powered-by">Powered By</a></li>' +
+ '</ul>' +
+ '</div>' +
+ '</li>';
+
+ community.innerHTML = communityMenu;
+
+ const communityMenuItem = document.getElementById("community-menu");
+ const communityDropDown = document.getElementById("community-dropdown");
+ communityMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (communityDropDown.className == 'hide') {
+ communityDropDown.className = 'visible';
+ } else {
+ communityDropDown.className = 'hide';
+ }
+ });
+ </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script><script>
+ document.addEventListener('keyup', function(e) {
+ if (e.target !== document.body) {
+ return;
+ }
+ // keyCode for '/' (slash)
+ if (e.keyCode === 191) {
+ const search = document.getElementById('search_input_react');
+ search && search.focus();
+ }
+ });
+ </script><script>
+ var search = docsearch({
+
+ apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+ indexName: 'apache_pulsar',
+ inputSelector: '#search_input_react',
+ algoliaOptions: {"facetFilters":["language:ja","version:next"]}
+ });
+ </script></body></html>
\ No newline at end of file
diff --git a/content/docs/next/io-redis-sink.html b/content/docs/next/io-redis-sink.html
new file mode 100644
index 0000000..a3d5601
--- /dev/null
+++ b/content/docs/next/io-redis-sink.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content=""/><meta property="og:title" content="Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content [...]
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-102219959-1', 'auto');
+ ga('send', 'pageview');
+ </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body><script>
+ <!--
+ window.location.href = "/docs/en/next/io-redis-sink";
+ // -->
+ </script></body></html>
\ No newline at end of file
diff --git a/content/docs/next/io-redis-sink/index.html b/content/docs/next/io-redis-sink/index.html
new file mode 100644
index 0000000..a3d5601
--- /dev/null
+++ b/content/docs/next/io-redis-sink/index.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content=""/><meta property="og:title" content="Apache Pulsar"/><meta property="og:type" content="website"/><meta property="og:url" content="https://pulsar.incubator.apache.org/index.html"/><meta property="og:description" content [...]
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-102219959-1', 'auto');
+ ga('send', 'pageview');
+ </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body><script>
+ <!--
+ window.location.href = "/docs/en/next/io-redis-sink";
+ // -->
+ </script></body></html>
\ No newline at end of file
diff --git a/content/docs/zh-CN/2.3.2/io-connectors.html b/content/docs/zh-CN/2.3.2/io-connectors.html
index 294ffd3..5887e85 100644
--- a/content/docs/zh-CN/2.3.2/io-connectors.html
+++ b/content/docs/zh-CN/2.3.2/io-connectors.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/zh-CN/2.3.2/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/zh-CN/2.3.2/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/zh-CN/2.3.2/io-connectors/index.html b/content/docs/zh-CN/2.3.2/io-connectors/index.html
index 294ffd3..5887e85 100644
--- a/content/docs/zh-CN/2.3.2/io-connectors/index.html
+++ b/content/docs/zh-CN/2.3.2/io-connectors/index.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/zh-CN/2.3.2/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/zh-CN/2.3.2/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/zh-CN/2.4.0/io-connectors.html b/content/docs/zh-CN/2.4.0/io-connectors.html
index 23f7269..20034ba 100644
--- a/content/docs/zh-CN/2.4.0/io-connectors.html
+++ b/content/docs/zh-CN/2.4.0/io-connectors.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/zh-CN/2.4.0/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/zh-CN/2.4.0/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/zh-CN/2.4.0/io-connectors/index.html b/content/docs/zh-CN/2.4.0/io-connectors/index.html
index 23f7269..20034ba 100644
--- a/content/docs/zh-CN/2.4.0/io-connectors/index.html
+++ b/content/docs/zh-CN/2.4.0/io-connectors/index.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/zh-CN/2.4.0/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/zh-CN/2.4.0/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
</ul>
diff --git a/content/docs/zh-CN/io-connectors.html b/content/docs/zh-CN/io-connectors.html
index c984392..1a46af7 100644
--- a/content/docs/zh-CN/io-connectors.html
+++ b/content/docs/zh-CN/io-connectors.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/zh-CN/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/zh-CN/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
<li><a href="io-jdbc.md">JDBC Sink Connector</a></li>
diff --git a/content/docs/zh-CN/io-connectors/index.html b/content/docs/zh-CN/io-connectors/index.html
index c984392..1a46af7 100644
--- a/content/docs/zh-CN/io-connectors/index.html
+++ b/content/docs/zh-CN/io-connectors/index.html
@@ -91,7 +91,7 @@
<li><a href="io-file.md#source">File Source Connector</a></li>
<li><a href="/docs/zh-CN/io-hdfs#sink">Hdfs Sink Connector</a></li>
<li><a href="io-mongo.md#sink">MongoDB Sink Connector</a></li>
-<li><a href="/docs/zh-CN/io-redis#sink">Redis Sink Connector</a></li>
+<li><a href="io-redis.md#sink">Redis Sink Connector</a></li>
<li><a href="io-solr.md#sink">Solr Sink Connector</a></li>
<li><a href="io-influxdb.md#sink">InfluxDB Sink Connector</a></li>
<li><a href="io-jdbc.md">JDBC Sink Connector</a></li>
diff --git a/content/docs/zh-CN/next/cookbooks-retention-expiry.html b/content/docs/zh-CN/next/cookbooks-retention-expiry.html
index aba5614..9d1ebfd 100644
--- a/content/docs/zh-CN/next/cookbooks-retention-expiry.html
+++ b/content/docs/zh-CN/next/cookbooks-retention-expiry.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>消息保留和到期 · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers 负责处理通过Pulsar的消息,包括消息的[持久存储](/docs/zh-CN/next/concepts-architecture-overview#persistent-storage)。 默认情况下,broker 的策略如下:"/><meta name="docsearch:version" content="next"/><meta name="docsearch:lan [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>消息保留和到期 · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers 负责处理通过Pulsar的消息,包括消息的[持久存储](/docs/zh-CN/next/concepts-architecture-overview#persistent-storage)。 By default, for each topic, brokers only retain messages that are in at least one backlog. A b [...]
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -75,29 +75,30 @@
};
}
});
- </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">消息保留和到期</h1></header><article><div><span><p>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">持久存储</a>。 默认情况下,broker 的策略如下:</p>
+ </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">消息保留和到期</h1></header><article><div><span><p>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">持久存储</a>。 By default, for each t [...]
+<p>As a consequence, no messages are retained (by default) on a topic that has not had any subscriptions created for it.</p>
+<p>(Note that messages that are no longer being stored are not necessarily immediately deleted, and may in fact still be accessible until the next ledger rollover. Because clients cannot predict when rollovers may happen, it is not wise to rely on a rollover not happening at an inconvenient point in time.)</p>
+<p>In Pulsar, you can modify this behavior, with namespace granularity, in two ways:</p>
<ul>
-<li>立即删除每个订阅上已确认的所有消息。</li>
-<li>并且持久性地将所有未确认的消息存储在<a href="#backlog-quotas"> backlog </a>中。</li>
+<li>You can persistently store messages that are not within a backlog (because they've been acknowledged by on every existing subscription, or because there are no subscriptions) by setting <a href="#retention-policies">retention policies</a>.</li>
+<li>Messages that are not acknowledged within a specified timeframe can be automatically acknowledged, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
</ul>
-<p>在Pulsar中,你可以在命名空间级别以两种方式覆盖这两种默认行为:</p>
-<ul>
-<li>通过设置 <a href="#retention-policies">保留策略</a>,可以持久地存储已经被使用和确认的消息,并将其保留最少时间。</li>
-<li>通过指定[生存时间](#time-to-live- TTL) (TTL),可以自动将未在指定时间范围内得到确认的消息标记为已消费。</li>
-</ul>
-<p>Pulsar的 <a href="/docs/zh-CN/next/admin-api-overview">admin interface</a> 使您能够在命名空间级别管理保留策略和TTL(在指定集群或<a href="/docs/zh-CN/next/concepts-architecture-overview#global-cluster"><code>全局</code></a>集群的租户内)。</p>
+<p>Pulsar's <a href="/docs/zh-CN/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL with namespace granularity (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/zh-CN/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
<blockquote>
-<h4><a class="anchor" aria-hidden="true" id="保留和ttl解决的是两个不同的问题"></a><a href="#保留和ttl解决的是两个不同的问题" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<h4><a class="anchor" aria-hidden="true" id="retention-and-ttl-solve-two-different-problems"></a><a href="#retention-and-ttl-solve-two-different-problems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3 [...]
<ul>
<li>消息保留: 保存数据至少X小时(即使消息已被确认消费)</li>
<li>生存时间(TTL):一段时间后丢弃数据(通过自动确认)</li>
</ul>
-<p>在大多数情况下,应用程序会使用其中一个策略(或不使用)。</p>
+<p>Most applications will want to use at most one of these.</p>
</blockquote>
<h2><a class="anchor" aria-hidden="true" id="保留策略"></a><a href="#保留策略" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
-<p>默认情况下,当消息到达broker时,它会被存储起来,直到消费者确认已消费它,此时它才被删除。 可以修改此行为,通过对给定命名空间中的所有主题设置 <em>保留策略</em> 保留已经确认的消息。 设置保留策略时,可以设置<em>大小限制</em>或<em>时间限制</em>。</p>
+<p>By default, when a Pulsar message arrives at a broker it will be stored until it has been acknowledged on all subscriptions, at which point it will be marked for deletion. You can override this behavior and retain even messages that have already been acknowledged on all subscriptions by setting a <em>retention policy</em> for all topics in a given namespace. Retention policies are either a <em>size limit</em> or a <em>time limit</em>.</p>
+<p>Retention policies are particularly useful if you intend to exclusively use the Reader interface. Because the Reader interface does not use acknowledgements, messages will never exist within backlogs. Most realistic Reader-only use cases require that retention be configured.</p>
<p>当设置一个大小限制,比如10GB,那么命名空间中的所有主题中的消息,<em>甚至已确认的消息</em> 都将被保留,直到达到主题的大小限制为止;如果将时间限制设置为1天,那么命名空间中所有主题的消息将保留24小时。</p>
-<p>还可以设置<em>无限</em>的保留时长限制或大小限制,方法是把保留时间或大小值设置为<code>-1</code>。</p>
+<p>TODO: Confirm this behavior?</p>
+<p>When a retention limit is exceeded, the oldest message is marked for deletion until the set of retained messages falls within the specified limits again.</p>
+<p>It is also possible to set <em>unlimited</em> retention time or size by setting <code>-1</code> for either time or size retention.</p>
<h3><a class="anchor" aria-hidden="true" id="默认情况"></a><a href="#默认情况" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
<p>下面的两个配置参数可用于设置<a href="/docs/zh-CN/next/reference-terminology#instance">实例</a>范围的消息保留默认值:<a href="/docs/zh-CN/next/reference-configuration#broker-defaultRetentionTimeInMinutes"><code>defaultRetentionTimeInMinutes=0</code></a>和<a href="/docs/zh-CN/next/reference-configuration#broker-defaultRetentionSizeInMB"><code>defaultRetentionSizeInMB=0</code></a>。</p>
<p>这两个参数都在 <a href="/docs/zh-CN/next/reference-configuration#broker"> <code>broker.conf</code> </a>配置文件中。</p>
@@ -111,12 +112,12 @@
--size 10G \
--time 3h
</code></pre>
-<p>设置无限的时间限制和1T的大小限制:</p>
+<p>To set retention with a size limit but without a time limit:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size 1T \
--time -1
</code></pre>
-<p>同样地,设置无限的时间限制和无限的大小限制:</p>
+<p>Retention can be configured to be unlimited both in size and time:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size -1 \
--time -1
@@ -150,6 +151,7 @@ admin.namespaces().setRetention(namespace, policies);
<h2><a class="anchor" aria-hidden="true" id="backlog-quotas"></a><a href="#backlog-quotas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
<p><em>Backlogs</em>是由bookies存储的主题的未确认消息集。 Pulsar把所有未确认的消息存储在Backlog中,直到它们被处理和确认为止。</p>
<p>可以使用 <em>backlog quotas</em> 在命名空间级别限制 Backlog 的大小。 设置backlog quota 涉及以下设置:</p>
+<p>TODO: Expand on is this per backlog or per topic?</p>
<ul>
<li>命名空间中每个主题允许的<em>大小阈值</em></li>
<li><em>保留策略</em>,决定了如果超过阈值,<a href="/docs/zh-CN/next/reference-terminology#broker">broker</a> 将采取什么操作。</li>
@@ -167,7 +169,7 @@ admin.namespaces().setRetention(namespace, policies);
</table>
<blockquote>
<h4><a class="anchor" aria-hidden="true" id="注意保留策略类型之间的区别"></a><a href="#注意保留策略类型之间的区别" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>您可能已经注意到,Pulsar 中关于“保留策略”的两种定义,一个适用于已确认的消息的持久存储,另一个适用于 backlogs。</p>
+<p>As you may have noticed, there are two definitions of the term "retention policy" in Pulsar, one that applies to persistent storage of messages not in backlogs, and one that applies to messages within backlogs.</p>
</blockquote>
<p>Backlog quotas 在命名空间级别处理。 它们可以通过以下方式管理:</p>
<h3><a class="anchor" aria-hidden="true" id="设置大小阈值和-backlog-保留策略"></a><a href="#设置大小阈值和-backlog-保留策略" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
diff --git a/content/docs/zh-CN/next/cookbooks-retention-expiry/index.html b/content/docs/zh-CN/next/cookbooks-retention-expiry/index.html
index aba5614..9d1ebfd 100644
--- a/content/docs/zh-CN/next/cookbooks-retention-expiry/index.html
+++ b/content/docs/zh-CN/next/cookbooks-retention-expiry/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>消息保留和到期 · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers 负责处理通过Pulsar的消息,包括消息的[持久存储](/docs/zh-CN/next/concepts-architecture-overview#persistent-storage)。 默认情况下,broker 的策略如下:"/><meta name="docsearch:version" content="next"/><meta name="docsearch:lan [...]
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>消息保留和到期 · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Pulsar brokers 负责处理通过Pulsar的消息,包括消息的[持久存储](/docs/zh-CN/next/concepts-architecture-overview#persistent-storage)。 By default, for each topic, brokers only retain messages that are in at least one backlog. A b [...]
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
@@ -75,29 +75,30 @@
};
}
});
- </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">消息保留和到期</h1></header><article><div><span><p>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">持久存储</a>。 默认情况下,broker 的策略如下:</p>
+ </script></nav></div><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Translate</a><h1 class="postHeaderTitle">消息保留和到期</h1></header><article><div><span><p>Pulsar brokers 负责处理通过Pulsar的消息,包括消息的<a href="/docs/zh-CN/next/concepts-architecture-overview#persistent-storage">持久存储</a>。 By default, for each t [...]
+<p>As a consequence, no messages are retained (by default) on a topic that has not had any subscriptions created for it.</p>
+<p>(Note that messages that are no longer being stored are not necessarily immediately deleted, and may in fact still be accessible until the next ledger rollover. Because clients cannot predict when rollovers may happen, it is not wise to rely on a rollover not happening at an inconvenient point in time.)</p>
+<p>In Pulsar, you can modify this behavior, with namespace granularity, in two ways:</p>
<ul>
-<li>立即删除每个订阅上已确认的所有消息。</li>
-<li>并且持久性地将所有未确认的消息存储在<a href="#backlog-quotas"> backlog </a>中。</li>
+<li>You can persistently store messages that are not within a backlog (because they've been acknowledged by on every existing subscription, or because there are no subscriptions) by setting <a href="#retention-policies">retention policies</a>.</li>
+<li>Messages that are not acknowledged within a specified timeframe can be automatically acknowledged, by specifying the <a href="#time-to-live-ttl">time to live</a> (TTL).</li>
</ul>
-<p>在Pulsar中,你可以在命名空间级别以两种方式覆盖这两种默认行为:</p>
-<ul>
-<li>通过设置 <a href="#retention-policies">保留策略</a>,可以持久地存储已经被使用和确认的消息,并将其保留最少时间。</li>
-<li>通过指定[生存时间](#time-to-live- TTL) (TTL),可以自动将未在指定时间范围内得到确认的消息标记为已消费。</li>
-</ul>
-<p>Pulsar的 <a href="/docs/zh-CN/next/admin-api-overview">admin interface</a> 使您能够在命名空间级别管理保留策略和TTL(在指定集群或<a href="/docs/zh-CN/next/concepts-architecture-overview#global-cluster"><code>全局</code></a>集群的租户内)。</p>
+<p>Pulsar's <a href="/docs/zh-CN/next/admin-api-overview">admin interface</a> enables you to manage both retention policies and TTL with namespace granularity (and thus within a specific tenant and either on a specific cluster or in the <a href="/docs/zh-CN/next/concepts-architecture-overview#global-cluster"><code>global</code></a> cluster).</p>
<blockquote>
-<h4><a class="anchor" aria-hidden="true" id="保留和ttl解决的是两个不同的问题"></a><a href="#保留和ttl解决的是两个不同的问题" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2- [...]
+<h4><a class="anchor" aria-hidden="true" id="retention-and-ttl-solve-two-different-problems"></a><a href="#retention-and-ttl-solve-two-different-problems" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3 [...]
<ul>
<li>消息保留: 保存数据至少X小时(即使消息已被确认消费)</li>
<li>生存时间(TTL):一段时间后丢弃数据(通过自动确认)</li>
</ul>
-<p>在大多数情况下,应用程序会使用其中一个策略(或不使用)。</p>
+<p>Most applications will want to use at most one of these.</p>
</blockquote>
<h2><a class="anchor" aria-hidden="true" id="保留策略"></a><a href="#保留策略" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
-<p>默认情况下,当消息到达broker时,它会被存储起来,直到消费者确认已消费它,此时它才被删除。 可以修改此行为,通过对给定命名空间中的所有主题设置 <em>保留策略</em> 保留已经确认的消息。 设置保留策略时,可以设置<em>大小限制</em>或<em>时间限制</em>。</p>
+<p>By default, when a Pulsar message arrives at a broker it will be stored until it has been acknowledged on all subscriptions, at which point it will be marked for deletion. You can override this behavior and retain even messages that have already been acknowledged on all subscriptions by setting a <em>retention policy</em> for all topics in a given namespace. Retention policies are either a <em>size limit</em> or a <em>time limit</em>.</p>
+<p>Retention policies are particularly useful if you intend to exclusively use the Reader interface. Because the Reader interface does not use acknowledgements, messages will never exist within backlogs. Most realistic Reader-only use cases require that retention be configured.</p>
<p>当设置一个大小限制,比如10GB,那么命名空间中的所有主题中的消息,<em>甚至已确认的消息</em> 都将被保留,直到达到主题的大小限制为止;如果将时间限制设置为1天,那么命名空间中所有主题的消息将保留24小时。</p>
-<p>还可以设置<em>无限</em>的保留时长限制或大小限制,方法是把保留时间或大小值设置为<code>-1</code>。</p>
+<p>TODO: Confirm this behavior?</p>
+<p>When a retention limit is exceeded, the oldest message is marked for deletion until the set of retained messages falls within the specified limits again.</p>
+<p>It is also possible to set <em>unlimited</em> retention time or size by setting <code>-1</code> for either time or size retention.</p>
<h3><a class="anchor" aria-hidden="true" id="默认情况"></a><a href="#默认情况" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6 [...]
<p>下面的两个配置参数可用于设置<a href="/docs/zh-CN/next/reference-terminology#instance">实例</a>范围的消息保留默认值:<a href="/docs/zh-CN/next/reference-configuration#broker-defaultRetentionTimeInMinutes"><code>defaultRetentionTimeInMinutes=0</code></a>和<a href="/docs/zh-CN/next/reference-configuration#broker-defaultRetentionSizeInMB"><code>defaultRetentionSizeInMB=0</code></a>。</p>
<p>这两个参数都在 <a href="/docs/zh-CN/next/reference-configuration#broker"> <code>broker.conf</code> </a>配置文件中。</p>
@@ -111,12 +112,12 @@
--size 10G \
--time 3h
</code></pre>
-<p>设置无限的时间限制和1T的大小限制:</p>
+<p>To set retention with a size limit but without a time limit:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size 1T \
--time -1
</code></pre>
-<p>同样地,设置无限的时间限制和无限的大小限制:</p>
+<p>Retention can be configured to be unlimited both in size and time:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> pulsar-admin namespaces <span class="hljs-built_in">set</span>-retention my-tenant/my-ns \</span>
--size -1 \
--time -1
@@ -150,6 +151,7 @@ admin.namespaces().setRetention(namespace, policies);
<h2><a class="anchor" aria-hidden="true" id="backlog-quotas"></a><a href="#backlog-quotas" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0- [...]
<p><em>Backlogs</em>是由bookies存储的主题的未确认消息集。 Pulsar把所有未确认的消息存储在Backlog中,直到它们被处理和确认为止。</p>
<p>可以使用 <em>backlog quotas</em> 在命名空间级别限制 Backlog 的大小。 设置backlog quota 涉及以下设置:</p>
+<p>TODO: Expand on is this per backlog or per topic?</p>
<ul>
<li>命名空间中每个主题允许的<em>大小阈值</em></li>
<li><em>保留策略</em>,决定了如果超过阈值,<a href="/docs/zh-CN/next/reference-terminology#broker">broker</a> 将采取什么操作。</li>
@@ -167,7 +169,7 @@ admin.namespaces().setRetention(namespace, policies);
</table>
<blockquote>
<h4><a class="anchor" aria-hidden="true" id="注意保留策略类型之间的区别"></a><a href="#注意保留策略类型之间的区别" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
-<p>您可能已经注意到,Pulsar 中关于“保留策略”的两种定义,一个适用于已确认的消息的持久存储,另一个适用于 backlogs。</p>
+<p>As you may have noticed, there are two definitions of the term "retention policy" in Pulsar, one that applies to persistent storage of messages not in backlogs, and one that applies to messages within backlogs.</p>
</blockquote>
<p>Backlog quotas 在命名空间级别处理。 它们可以通过以下方式管理:</p>
<h3><a class="anchor" aria-hidden="true" id="设置大小阈值和-backlog-保留策略"></a><a href="#设置大小阈值和-backlog-保留策略" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1 [...]
diff --git a/content/docs/zh-CN/next/io-connectors.html b/content/docs/zh-CN/next/io-connectors.html
index 027c334..6bb1476 100644
--- a/content/docs/zh-CN/next/io-connectors.html
+++ b/content/docs/zh-CN/next/io-connectors.html
@@ -109,7 +109,7 @@
<li><p><a href="/docs/zh-CN/next/io-kinesis-sink">Kinesis sink connector</a></p></li>
<li><p><a href="/docs/zh-CN/next/io-mongo-sink">MongoDB sink connector</a></p></li>
<li><p><a href="io-rabbitmq-sink.md">RabbitMQ sink connector</a></p></li>
-<li><p><a href="/docs/zh-CN/next/io-redis">Redis sink connector</a></p></li>
+<li><p><a href="/docs/zh-CN/next/io-redis-sink">Redis sink connector</a></p></li>
<li><p><a href="/docs/zh-CN/next/io-solr-sink">Solr sink connector</a></p></li>
</ul>
</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/io-debug"><span class="arrow-prev">← </span><span>Debug</span></a><a class="docs-next button" href="/docs/zh-CN/next/io-cdc"><span>CDC connector</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source-connector">Source connector</a></li><li><a href="#sink-connector">Sink connector</a></li></ul></nav></div><fo [...]
diff --git a/content/docs/zh-CN/next/io-connectors/index.html b/content/docs/zh-CN/next/io-connectors/index.html
index 027c334..6bb1476 100644
--- a/content/docs/zh-CN/next/io-connectors/index.html
+++ b/content/docs/zh-CN/next/io-connectors/index.html
@@ -109,7 +109,7 @@
<li><p><a href="/docs/zh-CN/next/io-kinesis-sink">Kinesis sink connector</a></p></li>
<li><p><a href="/docs/zh-CN/next/io-mongo-sink">MongoDB sink connector</a></p></li>
<li><p><a href="io-rabbitmq-sink.md">RabbitMQ sink connector</a></p></li>
-<li><p><a href="/docs/zh-CN/next/io-redis">Redis sink connector</a></p></li>
+<li><p><a href="/docs/zh-CN/next/io-redis-sink">Redis sink connector</a></p></li>
<li><p><a href="/docs/zh-CN/next/io-solr-sink">Solr sink connector</a></p></li>
</ul>
</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zh-CN/next/io-debug"><span class="arrow-prev">← </span><span>Debug</span></a><a class="docs-next button" href="/docs/zh-CN/next/io-cdc"><span>CDC connector</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#source-connector">Source connector</a></li><li><a href="#sink-connector">Sink connector</a></li></ul></nav></div><fo [...]
diff --git a/content/docs/zh-CN/next/io-redis-sink.html b/content/docs/zh-CN/next/io-redis-sink.html
new file mode 100644
index 0000000..912a339
--- /dev/null
+++ b/content/docs/zh-CN/next/io-redis-sink.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Redis sink connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The Redis sink connector pulls messages from Pulsar topics and persists the messages to a Redis database."/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" conte [...]
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-102219959-1', 'auto');
+ ga('send', 'pageview');
+ </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sid [...]
+ const languagesMenuItem = document.getElementById("languages-menu");
+ const languagesDropDown = document.getElementById("languages-dropdown");
+ languagesMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (languagesDropDown.className == "hide") {
+ languagesDropDown.className = "visible";
+ } else {
+ languagesDropDown.className = "hide";
+ }
+ });
+ </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Tran [...]
+<h2><a class="anchor" aria-hidden="true" id="configuration"></a><a href="#configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The configuration of the Redis sink connector has the following properties.</p>
+<h3><a class="anchor" aria-hidden="true" id="property"></a><a href="#property" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 [...]
+<table>
+<thead>
+<tr><th>Name</th><th>类型</th><th>Required</th><th>默认值</th><th>说明:</th></tr>
+</thead>
+<tbody>
+<tr><td><code>redisHosts</code></td><td>String</td><td>true</td><td>" " (empty string)</td><td>A comma-separated list of Redis hosts to connect to.</td></tr>
+<tr><td><code>redisPassword</code></td><td>String</td><td>false</td><td>" " (empty string)</td><td>The password used to connect to Redis.</td></tr>
+<tr><td><code>redisDatabase</code></td><td>int</td><td>true</td><td>0</td><td>The Redis database to connect to.</td></tr>
+<tr><td><code>clientMode</code></td><td>String</td><td>false</td><td>Standalone</td><td>The client mode when interacting with Redis cluster. <br><br>Below are the available options: <br><li>Standalone<br><li>Cluster</td></tr>
+<tr><td><code>autoReconnect</code></td><td>boolean</td><td>false</td><td>true</td><td>Whether the Redis client automatically reconnect or not.</td></tr>
+<tr><td><code>requestQueue</code></td><td>int</td><td>false</td><td>2147483647</td><td>The maximum number of queued requests to Redis.</td></tr>
+<tr><td><code>tcpNoDelay</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable TCP with no delay or not.</td></tr>
+<tr><td><code>keepAlive</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable a keepalive to Redis or not.</td></tr>
+<tr><td><code>connectTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time to wait before timing out when connecting in milliseconds.</td></tr>
+<tr><td><code>operationTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time before an operation is marked as timed out in milliseconds .</td></tr>
+<tr><td><code>batchTimeMs</code></td><td>int</td><td>false</td><td>1000</td><td>The Redis operation time in milliseconds.</td></tr>
+<tr><td><code>batchSize</code></td><td>int</td><td>false</td><td>200</td><td>The batch size of writing to Redis database.</td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>Before using the Redis sink connector, you need to create a configuration file through one of the following methods.</p>
+<ul>
+<li><p>JSON</p>
+<pre><code class="hljs css language-json">{
+ <span class="hljs-attr">"redisHosts"</span>: <span class="hljs-string">"localhost:6379"</span>,
+ <span class="hljs-attr">"redisPassword"</span>: <span class="hljs-string">"fake@123"</span>,
+ <span class="hljs-attr">"redisDatabase"</span>: <span class="hljs-string">"1"</span>,
+ <span class="hljs-attr">"clientMode"</span>: <span class="hljs-string">"Standalone"</span>,
+ <span class="hljs-attr">"operationTimeout"</span>: <span class="hljs-string">"2000"</span>,
+ <span class="hljs-attr">"batchSize"</span>: <span class="hljs-string">"100"</span>,
+ <span class="hljs-attr">"batchTimeMs"</span>: <span class="hljs-string">"1000"</span>,
+ <span class="hljs-attr">"connectTimeout"</span>: <span class="hljs-string">"3000"</span>
+}
+</code></pre></li>
+<li><p>YAML</p>
+<pre><code class="hljs css language-yaml"><span class="hljs-string">{</span>
+<span class="hljs-attr"> redisHosts:</span> <span class="hljs-string">"localhost:6379"</span>
+<span class="hljs-attr"> redisPassword:</span> <span class="hljs-string">"fake@123"</span>
+<span class="hljs-attr"> redisDatabase:</span> <span class="hljs-number">1</span>
+<span class="hljs-attr"> clientMode:</span> <span class="hljs-string">"Standalone"</span>
+<span class="hljs-attr"> operationTimeout:</span> <span class="hljs-number">2000</span>
+<span class="hljs-attr"> batchSize:</span> <span class="hljs-number">100</span>
+<span class="hljs-attr"> batchTimeMs:</span> <span class="hljs-number">1000</span>
+<span class="hljs-attr"> connectTimeout:</span> <span class="hljs-number">3000</span>
+<span class="hljs-string">}</span>
+</code></pre></li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configuration">Configuration</a><ul class="toc-headings"><li><a href="#property">Property</a></li><li><a href="#example">Example</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are tr [...]
+ const community = document.querySelector("a[href='#community']").parentNode;
+ const communityMenu =
+ '<li>' +
+ '<a id="community-menu" href="#">Community <span style="font-size: 0.75em"> ▼</span></a>' +
+ '<div id="community-dropdown" class="hide">' +
+ '<ul id="community-dropdown-items">' +
+ '<li><a href="/zh-CN/contact">Contact</a></li>' +
+ '<li><a href="/zh-CN/contributing">Contributing</a></li>' +
+ '<li><a href="/zh-CN/events">Events</a></li>' +
+ '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking ❐</a></li>' +
+ '<li> </li>' +
+ '<li><a href="/zh-CN/resources">Resources</a></li>' +
+ '<li><a href="/zh-CN/team">Team</a></li>' +
+ '<li><a href="/zh-CN/powered-by">Powered By</a></li>' +
+ '</ul>' +
+ '</div>' +
+ '</li>';
+
+ community.innerHTML = communityMenu;
+
+ const communityMenuItem = document.getElementById("community-menu");
+ const communityDropDown = document.getElementById("community-dropdown");
+ communityMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (communityDropDown.className == 'hide') {
+ communityDropDown.className = 'visible';
+ } else {
+ communityDropDown.className = 'hide';
+ }
+ });
+ </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script><script>
+ document.addEventListener('keyup', function(e) {
+ if (e.target !== document.body) {
+ return;
+ }
+ // keyCode for '/' (slash)
+ if (e.keyCode === 191) {
+ const search = document.getElementById('search_input_react');
+ search && search.focus();
+ }
+ });
+ </script><script>
+ var search = docsearch({
+
+ apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+ indexName: 'apache_pulsar',
+ inputSelector: '#search_input_react',
+ algoliaOptions: {"facetFilters":["language:zh-CN","version:next"]}
+ });
+ </script></body></html>
\ No newline at end of file
diff --git a/content/docs/zh-CN/next/io-redis-sink/index.html b/content/docs/zh-CN/next/io-redis-sink/index.html
new file mode 100644
index 0000000..912a339
--- /dev/null
+++ b/content/docs/zh-CN/next/io-redis-sink/index.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Redis sink connector · Apache Pulsar</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The Redis sink connector pulls messages from Pulsar topics and persists the messages to a Redis database."/><meta name="docsearch:version" content="next"/><meta name="docsearch:language" conte [...]
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-102219959-1', 'auto');
+ ga('send', 'pageview');
+ </script><link rel="stylesheet" href="/css/code-blocks-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="/js/custom.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sid [...]
+ const languagesMenuItem = document.getElementById("languages-menu");
+ const languagesDropDown = document.getElementById("languages-dropdown");
+ languagesMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (languagesDropDown.className == "hide") {
+ languagesDropDown.className = "visible";
+ } else {
+ languagesDropDown.className = "hide";
+ }
+ });
+ </script></span><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://crowdin.com/project/apache-pulsar/zh-CN" target="_blank" rel="noreferrer noopener">Tran [...]
+<h2><a class="anchor" aria-hidden="true" id="configuration"></a><a href="#configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.8 [...]
+<p>The configuration of the Redis sink connector has the following properties.</p>
+<h3><a class="anchor" aria-hidden="true" id="property"></a><a href="#property" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 [...]
+<table>
+<thead>
+<tr><th>Name</th><th>类型</th><th>Required</th><th>默认值</th><th>说明:</th></tr>
+</thead>
+<tbody>
+<tr><td><code>redisHosts</code></td><td>String</td><td>true</td><td>" " (empty string)</td><td>A comma-separated list of Redis hosts to connect to.</td></tr>
+<tr><td><code>redisPassword</code></td><td>String</td><td>false</td><td>" " (empty string)</td><td>The password used to connect to Redis.</td></tr>
+<tr><td><code>redisDatabase</code></td><td>int</td><td>true</td><td>0</td><td>The Redis database to connect to.</td></tr>
+<tr><td><code>clientMode</code></td><td>String</td><td>false</td><td>Standalone</td><td>The client mode when interacting with Redis cluster. <br><br>Below are the available options: <br><li>Standalone<br><li>Cluster</td></tr>
+<tr><td><code>autoReconnect</code></td><td>boolean</td><td>false</td><td>true</td><td>Whether the Redis client automatically reconnect or not.</td></tr>
+<tr><td><code>requestQueue</code></td><td>int</td><td>false</td><td>2147483647</td><td>The maximum number of queued requests to Redis.</td></tr>
+<tr><td><code>tcpNoDelay</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable TCP with no delay or not.</td></tr>
+<tr><td><code>keepAlive</code></td><td>boolean</td><td>false</td><td>false</td><td>Whether to enable a keepalive to Redis or not.</td></tr>
+<tr><td><code>connectTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time to wait before timing out when connecting in milliseconds.</td></tr>
+<tr><td><code>operationTimeout</code></td><td>long</td><td>false</td><td>10000</td><td>The time before an operation is marked as timed out in milliseconds .</td></tr>
+<tr><td><code>batchTimeMs</code></td><td>int</td><td>false</td><td>1000</td><td>The Redis operation time in milliseconds.</td></tr>
+<tr><td><code>batchSize</code></td><td>int</td><td>false</td><td>200</td><td>The batch size of writing to Redis database.</td></tr>
+</tbody>
+</table>
+<h3><a class="anchor" aria-hidden="true" id="example"></a><a href="#example" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1- [...]
+<p>Before using the Redis sink connector, you need to create a configuration file through one of the following methods.</p>
+<ul>
+<li><p>JSON</p>
+<pre><code class="hljs css language-json">{
+ <span class="hljs-attr">"redisHosts"</span>: <span class="hljs-string">"localhost:6379"</span>,
+ <span class="hljs-attr">"redisPassword"</span>: <span class="hljs-string">"fake@123"</span>,
+ <span class="hljs-attr">"redisDatabase"</span>: <span class="hljs-string">"1"</span>,
+ <span class="hljs-attr">"clientMode"</span>: <span class="hljs-string">"Standalone"</span>,
+ <span class="hljs-attr">"operationTimeout"</span>: <span class="hljs-string">"2000"</span>,
+ <span class="hljs-attr">"batchSize"</span>: <span class="hljs-string">"100"</span>,
+ <span class="hljs-attr">"batchTimeMs"</span>: <span class="hljs-string">"1000"</span>,
+ <span class="hljs-attr">"connectTimeout"</span>: <span class="hljs-string">"3000"</span>
+}
+</code></pre></li>
+<li><p>YAML</p>
+<pre><code class="hljs css language-yaml"><span class="hljs-string">{</span>
+<span class="hljs-attr"> redisHosts:</span> <span class="hljs-string">"localhost:6379"</span>
+<span class="hljs-attr"> redisPassword:</span> <span class="hljs-string">"fake@123"</span>
+<span class="hljs-attr"> redisDatabase:</span> <span class="hljs-number">1</span>
+<span class="hljs-attr"> clientMode:</span> <span class="hljs-string">"Standalone"</span>
+<span class="hljs-attr"> operationTimeout:</span> <span class="hljs-number">2000</span>
+<span class="hljs-attr"> batchSize:</span> <span class="hljs-number">100</span>
+<span class="hljs-attr"> batchTimeMs:</span> <span class="hljs-number">1000</span>
+<span class="hljs-attr"> connectTimeout:</span> <span class="hljs-number">3000</span>
+<span class="hljs-string">}</span>
+</code></pre></li>
+</ul>
+</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configuration">Configuration</a><ul class="toc-headings"><li><a href="#property">Property</a></li><li><a href="#example">Example</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="copyright">Copyright © 2019 The Apache Software Foundation. All Rights Reserved. Apache, Apache Pulsar and the Apache feather logo are tr [...]
+ const community = document.querySelector("a[href='#community']").parentNode;
+ const communityMenu =
+ '<li>' +
+ '<a id="community-menu" href="#">Community <span style="font-size: 0.75em"> ▼</span></a>' +
+ '<div id="community-dropdown" class="hide">' +
+ '<ul id="community-dropdown-items">' +
+ '<li><a href="/zh-CN/contact">Contact</a></li>' +
+ '<li><a href="/zh-CN/contributing">Contributing</a></li>' +
+ '<li><a href="/zh-CN/events">Events</a></li>' +
+ '<li><a href="https://twitter.com/Apache_Pulsar" target="_blank">Twitter ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/wiki" target="_blank">Wiki ❐</a></li>' +
+ '<li><a href="https://github.com/apache/pulsar/issues" target="_blank">Issue tracking ❐</a></li>' +
+ '<li> </li>' +
+ '<li><a href="/zh-CN/resources">Resources</a></li>' +
+ '<li><a href="/zh-CN/team">Team</a></li>' +
+ '<li><a href="/zh-CN/powered-by">Powered By</a></li>' +
+ '</ul>' +
+ '</div>' +
+ '</li>';
+
+ community.innerHTML = communityMenu;
+
+ const communityMenuItem = document.getElementById("community-menu");
+ const communityDropDown = document.getElementById("community-dropdown");
+ communityMenuItem.addEventListener("click", function(event) {
+ event.preventDefault();
+
+ if (communityDropDown.className == 'hide') {
+ communityDropDown.className = 'visible';
+ } else {
+ communityDropDown.className = 'hide';
+ }
+ });
+ </script></span></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script><script>
+ document.addEventListener('keyup', function(e) {
+ if (e.target !== document.body) {
+ return;
+ }
+ // keyCode for '/' (slash)
+ if (e.keyCode === 191) {
+ const search = document.getElementById('search_input_react');
+ search && search.focus();
+ }
+ });
+ </script><script>
+ var search = docsearch({
+
+ apiKey: 'd226a455cecdd4bc18a554c1b47e5b52',
+ indexName: 'apache_pulsar',
+ inputSelector: '#search_input_react',
+ algoliaOptions: {"facetFilters":["language:zh-CN","version:next"]}
+ });
+ </script></body></html>
\ No newline at end of file
diff --git a/content/sitemap.xml b/content/sitemap.xml
index 698788a..df9a0a1 100644
--- a/content/sitemap.xml
+++ b/content/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://pulsar.incubator.apache.org/admin-rest-api</loc><changefreq>weekly</changefreq><prior [...]
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://pulsar.incubator.apache.org/admin-rest-api</loc><changefreq>weekly</changefreq><prior [...]
\ No newline at end of file
diff --git a/content/swagger/2.5.0-SNAPSHOT/swagger.json b/content/swagger/2.5.0-SNAPSHOT/swagger.json
index 80054b6..79ead15 100644
--- a/content/swagger/2.5.0-SNAPSHOT/swagger.json
+++ b/content/swagger/2.5.0-SNAPSHOT/swagger.json
@@ -8898,17 +8898,22 @@
"type" : "number",
"format" : "double"
},
- "msgThroughputOut" : {
- "type" : "number",
- "format" : "double"
+ "bandwidthIn" : {
+ "$ref" : "#/definitions/ResourceUsage"
},
- "msgThroughputIn" : {
- "type" : "number",
- "format" : "double"
+ "bandwidthOut" : {
+ "$ref" : "#/definitions/ResourceUsage"
+ },
+ "memory" : {
+ "$ref" : "#/definitions/ResourceUsage"
},
"cpu" : {
"$ref" : "#/definitions/ResourceUsage"
},
+ "msgThroughputIn" : {
+ "type" : "number",
+ "format" : "double"
+ },
"directMemory" : {
"$ref" : "#/definitions/ResourceUsage"
},
@@ -8916,14 +8921,9 @@
"type" : "integer",
"format" : "int64"
},
- "bandwidthIn" : {
- "$ref" : "#/definitions/ResourceUsage"
- },
- "bandwidthOut" : {
- "$ref" : "#/definitions/ResourceUsage"
- },
- "memory" : {
- "$ref" : "#/definitions/ResourceUsage"
+ "msgThroughputOut" : {
+ "type" : "number",
+ "format" : "double"
},
"underLoaded" : {
"type" : "boolean"
diff --git a/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json b/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json
index ba68c7d..3a57388 100644
--- a/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json
+++ b/content/swagger/2.5.0-SNAPSHOT/swaggerfunctions.json
@@ -1348,8 +1348,23 @@
"Message" : {
"type" : "object",
"properties" : {
- "replicatedFrom" : {
- "type" : "string"
+ "keyBytes" : {
+ "type" : "array",
+ "items" : {
+ "type" : "string",
+ "format" : "byte"
+ }
+ },
+ "redeliveryCount" : {
+ "type" : "integer",
+ "format" : "int32"
+ },
+ "schemaVersion" : {
+ "type" : "array",
+ "items" : {
+ "type" : "string",
+ "format" : "byte"
+ }
},
"replicated" : {
"type" : "boolean"
@@ -1365,43 +1380,28 @@
"topicName" : {
"type" : "string"
},
- "encryptionCtx" : {
- "$ref" : "#/definitions/EncryptionContext"
+ "replicatedFrom" : {
+ "type" : "string"
},
- "redeliveryCount" : {
- "type" : "integer",
- "format" : "int32"
+ "producerName" : {
+ "type" : "string"
},
- "schemaVersion" : {
+ "orderingKey" : {
"type" : "array",
"items" : {
"type" : "string",
"format" : "byte"
}
},
- "sequenceId" : {
- "type" : "integer",
- "format" : "int64"
+ "encryptionCtx" : {
+ "$ref" : "#/definitions/EncryptionContext"
},
"messageId" : {
"$ref" : "#/definitions/MessageId"
},
- "keyBytes" : {
- "type" : "array",
- "items" : {
- "type" : "string",
- "format" : "byte"
- }
- },
- "orderingKey" : {
- "type" : "array",
- "items" : {
- "type" : "string",
- "format" : "byte"
- }
- },
- "producerName" : {
- "type" : "string"
+ "sequenceId" : {
+ "type" : "integer",
+ "format" : "int64"
},
"data" : {
"type" : "array",
diff --git a/content/swagger/master/swagger.json b/content/swagger/master/swagger.json
index 80054b6..79ead15 100644
--- a/content/swagger/master/swagger.json
+++ b/content/swagger/master/swagger.json
@@ -8898,17 +8898,22 @@
"type" : "number",
"format" : "double"
},
- "msgThroughputOut" : {
- "type" : "number",
- "format" : "double"
+ "bandwidthIn" : {
+ "$ref" : "#/definitions/ResourceUsage"
},
- "msgThroughputIn" : {
- "type" : "number",
- "format" : "double"
+ "bandwidthOut" : {
+ "$ref" : "#/definitions/ResourceUsage"
+ },
+ "memory" : {
+ "$ref" : "#/definitions/ResourceUsage"
},
"cpu" : {
"$ref" : "#/definitions/ResourceUsage"
},
+ "msgThroughputIn" : {
+ "type" : "number",
+ "format" : "double"
+ },
"directMemory" : {
"$ref" : "#/definitions/ResourceUsage"
},
@@ -8916,14 +8921,9 @@
"type" : "integer",
"format" : "int64"
},
- "bandwidthIn" : {
- "$ref" : "#/definitions/ResourceUsage"
- },
- "bandwidthOut" : {
- "$ref" : "#/definitions/ResourceUsage"
- },
- "memory" : {
- "$ref" : "#/definitions/ResourceUsage"
+ "msgThroughputOut" : {
+ "type" : "number",
+ "format" : "double"
},
"underLoaded" : {
"type" : "boolean"
diff --git a/content/swagger/master/swaggerfunctions.json b/content/swagger/master/swaggerfunctions.json
index ba68c7d..3a57388 100644
--- a/content/swagger/master/swaggerfunctions.json
+++ b/content/swagger/master/swaggerfunctions.json
@@ -1348,8 +1348,23 @@
"Message" : {
"type" : "object",
"properties" : {
- "replicatedFrom" : {
- "type" : "string"
+ "keyBytes" : {
+ "type" : "array",
+ "items" : {
+ "type" : "string",
+ "format" : "byte"
+ }
+ },
+ "redeliveryCount" : {
+ "type" : "integer",
+ "format" : "int32"
+ },
+ "schemaVersion" : {
+ "type" : "array",
+ "items" : {
+ "type" : "string",
+ "format" : "byte"
+ }
},
"replicated" : {
"type" : "boolean"
@@ -1365,43 +1380,28 @@
"topicName" : {
"type" : "string"
},
- "encryptionCtx" : {
- "$ref" : "#/definitions/EncryptionContext"
+ "replicatedFrom" : {
+ "type" : "string"
},
- "redeliveryCount" : {
- "type" : "integer",
- "format" : "int32"
+ "producerName" : {
+ "type" : "string"
},
- "schemaVersion" : {
+ "orderingKey" : {
"type" : "array",
"items" : {
"type" : "string",
"format" : "byte"
}
},
- "sequenceId" : {
- "type" : "integer",
- "format" : "int64"
+ "encryptionCtx" : {
+ "$ref" : "#/definitions/EncryptionContext"
},
"messageId" : {
"$ref" : "#/definitions/MessageId"
},
- "keyBytes" : {
- "type" : "array",
- "items" : {
- "type" : "string",
- "format" : "byte"
- }
- },
- "orderingKey" : {
- "type" : "array",
- "items" : {
- "type" : "string",
- "format" : "byte"
- }
- },
- "producerName" : {
- "type" : "string"
+ "sequenceId" : {
+ "type" : "integer",
+ "format" : "int64"
},
"data" : {
"type" : "array",