This is an automated email from the ASF dual-hosted git repository.
penghui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new bdb8477 Add 2.6.0 release blog. (#7303)
bdb8477 is described below
commit bdb8477525c9c5391b086b4568648fbb0e131dc2
Author: lipenghui <[email protected]>
AuthorDate: Fri Jun 19 13:59:56 2020 +0800
Add 2.6.0 release blog. (#7303)
---
.../website/blog/2020-06-18-Apache-Pulsar-2-6-0.md | 395 +++++++++++++++++++++
1 file changed, 395 insertions(+)
diff --git a/site2/website/blog/2020-06-18-Apache-Pulsar-2-6-0.md
b/site2/website/blog/2020-06-18-Apache-Pulsar-2-6-0.md
new file mode 100644
index 0000000..0b62490
--- /dev/null
+++ b/site2/website/blog/2020-06-18-Apache-Pulsar-2-6-0.md
@@ -0,0 +1,395 @@
+---
+author: Penghui Li
+authorURL: https://twitter.com/lipenghui6
+title: Apache Pulsar 2.6.0
+---
+We are very glad to see the Apache Pulsar community has successfully released
the wonderful 2.6.0 version after accumulated hard work. It is a great
milestone for this fast-growing project and the whole Pulsar community. This is
the result of a huge effort from the community, with over 450 commits and a
long list of new features, improvements, and bug fixes.
+
+Here is a selection of some of the most interesting and major features added
to Pulsar 2.6.0.
+
+<!--truncate-->
+
+## Core Pulsar
+
+### [PIP-37] Large message size support
+
+This PIP adds support for producing and consuming large size messages by
splitting the large message into multiple chunks. This is a very powerful
feature for sending and consuming very large messages.
+
+Currently, this feature only works for the non-shared subscription and it has
client-side changes. You need to upgrade the Pulsar client version to 2.6.0.
You can enable the message trunk at the producer side as below.
+
+```java
+client.newProducer()
+ .topic("my-topic")
+ .enableChunking(true)
+ .create();
+```
+
+For more information about PIP-37, see
[here](https://github.com/apache/pulsar/wiki/PIP-37:-Large-message-size-handling-in-Pulsar).
<br> For more information about implementation details, see
[PR-4440](https://github.com/apache/pulsar/pull/4400).
+
+### [PIP-39] Namespace change events (system topic)
+
+This PIP introduces the system topic to store namespace change events.
Previously, Pulsar only allowed you to set the namespace policy, all topics
under the namespace followed the namespace policy. Many users want to set the
policy for topics. The main reason for not using the same way as namespace
level policy is to avoid introducing more workload on the ZooKeeper.
+
+The original intention of the system topic is to be able to store topic policy
in a topic rather than ZooKeeper. So this is the first step to achieve topic
level policy. And we can easily add support for the topic level policy with
this feature.
+
+For more information about PIP-39, see
[here](https://github.com/apache/pulsar/wiki/PIP-39%3A-Namespace-Change-Events).<br>
For more information about implementation details, see
[PR-4955](https://github.com/apache/pulsar/pull/4955).
+
+### [PIP-45] Pluggable metadata interface
+
+We have been advancing to enable Pulsar to use other metastore services rather
than ZooKeeper. This PIP converts `ManagedLedger` to use the `MetadataStore`
interface. This facilitates the metadata server plug-in process. Through the
`MetadataStore` interface, it is easy to add other metadata servers into Pulsar
such as [etcd](https://github.com/etcd-io/etcd).
+
+For more information about PIP-45, see
[here](https://github.com/apache/pulsar/wiki/PIP-45%3A-Pluggable-metadata-interface).
<br> For more information about implementation details, see
[PR-5358](https://github.com/apache/pulsar/pull/5358).
+
+### [PIP-54] Support acknowledgment at the batch index level
+
+Previously, the broker only tracked the acknowledged state in the batch
message level. If a subset of the batch messages was acknowledged, the consumer
could still get the acknowledged message of that batch message while the batch
message redelivery happened.
+
+This PIP adds support for acknowledging the local batch index of a batch. This
feature is not enabled by default. You can enable it in the `broker.conf` as
below.
+
+```
+batchIndexAcknowledgeEnable=true
+```
+
+For more information about PIP-54, see
[here](https://github.com/apache/pulsar/wiki/PIP-54:-Support-acknowledgment-at-batch-index-level).
<br> For more information about implementation details, see
[PR-6052](https://github.com/apache/pulsar/pull/6052).
+
+### [PIP-58] Support consumers setting custom message retry delay
+
+For many online business systems, various exceptions usually occur in business
logic processing, so the message needs to be re-consumed, but users hope that
this delay time can be controlled flexibly. Previously, processing methods were
usually to send messages to special retry topics, because production can
specify any delay, so consumers subscribe to the business topic and retry topic
at the same time. Now you can set a retry delay for each message as below.
+
+```java
+Consumer<byte[]> consumer = pulsarClient.newConsumer(Schema.BYTES)
+ .enableRetry(true)
+ .receiverQueueSize(100)
+ .deadLetterPolicy(DeadLetterPolicy.builder()
+ .maxRedeliverCount(maxRedeliveryCount)
+
.retryLetterTopic("persistent://my-property/my-ns/my-subscription-custom-Retry")
+ .build())
+ .subscribe();
+
+consumer.reconsumeLater(message, 10 , TimeUnit.SECONDS);
+```
+
+For more information about PIP-58, see
[here](https://github.com/apache/pulsar/wiki/PIP-58-%3A-Support-Consumers--Set-Custom-Retry-Delay).
<br> For more information about implementation details, see
[PR-6449](https://github.com/apache/pulsar/pull/6449).
+
+### [PIP-60] Support SNI routing to support various proxy servers
+
+Previously, Pulsar did not provide support to use other proxies, such as
Apache Traffic Server (ATS), HAProxy, Nginx, and Envoy, which are more scalable
and secured. Most of these proxy servers support SNI routing which can route
traffic to a destination without having to terminate the SSL connection. This
PIP adds SNI routing and makes changes to the Pulsar client.
+
+For more information about PIP-60, see
[here](https://github.com/apache/pulsar/wiki/PIP-60:-Support-Proxy-server-with-SNI-routing).
<br> For more information about implementation details, see
[PR-6566](https://github.com/apache/pulsar/pull/6566).
+
+### [PIP-61] Advertise multiple addresses
+
+This PIP allows the broker to expose multiple advertised listeners and to
support the separation of internal and external network traffic. You can
specify multiple advertised listeners in `broker.conf` as below.
+
+```
+advertisedListeners=internal:pulsar://192.168.1.11:6660,external:pulsar://110.95.234.50:6650
+```
+
+From the client side, you can specify the listener name for the client as
below.
+
+```java
+PulsarClient.builder()
+ .serviceUrl(url)
+ .listenerName("internal")
+ .build();
+```
+
+For more information about PIP-61, see
[here](https://github.com/apache/pulsar/wiki/PIP-61%3A-Advertised-multiple-addresses).
<br> For more information about implementation details, see
[PR-6903](https://github.com/apache/pulsar/pull/6903).
+
+### [PIP-65] Adapt Pulsar IO sources to support `BatchSources`
+
+This PIP introduces `BatchSource` as a new interface for writing batch-based
connectors. It also introduces `BatchSourceTriggerer` as an interface to
trigger the data collection of a `BatchSource`. It then provides system
implementation in `BatchSourceExecutor`.
+
+For more information about PIP-65, see
[here](https://github.com/apache/pulsar/wiki/PIP-65%3A-Adapting-Pulsar-IO-Sources-to-support-Batch-Sources).
<br> For more information about implementation details, see
[PR-7090](https://github.com/apache/pulsar/pull/7090).
+
+### [Load balancer] Add `ThresholdShedder` strategy for the load balancer
+
+The `ThresholdShedder` strategy is more flexible than `LoadSheddingStrategy`
for Pulsar. The `ThresholdShedder` calculates the average resource usage of the
brokers, and individual broker resource usage compares with the average value.
If it is greater than the average value plus threshold, the overload shedder is
triggered. You can enable it in `broker.conf` as below.
+
+```
+loadBalancerLoadSheddingStrategy=org.apache.pulsar.broker.loadbalance.impl.ThresholdShedder
+```
+
+You can customize more parameters for the `ThresholdShedder` if needed as
below.
+
+```
+# The broker resource usage threshold.
+# When the broker resource usage is greater than the pulsar cluster average
resource usage,
+# the threshold shedder will be triggered to offload bundles from the broker.
+# It only takes effect in ThresholdSheddler strategy.
+loadBalancerBrokerThresholdShedderPercentage=10
+
+# When calculating new resource usage, the history usage accounts for.
+# It only takes effect in ThresholdSheddler strategy.
+loadBalancerHistoryResourcePercentage=0.9
+
+# The BandWithIn usage weight when calculating new resource usage.
+# It only takes effect in ThresholdShedder strategy.
+loadBalancerBandwithInResourceWeight=1.0
+
+# The BandWithOut usage weight when calculating new resource usage.
+# It only takes effect in ThresholdShedder strategy.
+loadBalancerBandwithOutResourceWeight=1.0
+
+# The CPU usage weight when calculating new resource usage.
+# It only takes effect in ThresholdShedder strategy.
+loadBalancerCPUResourceWeight=1.0
+
+# The heap memory usage weight when calculating new resource usage.
+# It only takes effect in ThresholdShedder strategy.
+loadBalancerMemoryResourceWeight=1.0
+
+# The direct memory usage weight when calculating new resource usage.
+# It only takes effect in ThresholdShedder strategy.
+loadBalancerDirectMemoryResourceWeight=1.0
+
+# Bundle unload minimum throughput threshold (MB), avoiding bundle unload
frequently.
+# It only takes effect in ThresholdShedder strategy.
+loadBalancerBundleUnloadMinThroughputThreshold=10
+```
+
+For more information about implementation details, see
[PR-6772](https://github.com/apache/pulsar/pull/6772).
+
+### [Key Shared] Add consistent hashing in the Key_Shared distribution
+
+Previously, the implementation of the Key_Shared subscription used a mechanism
to divide their hash space across the available consumers. This was based on
dividing the currently assigned hash ranges when a new consumer joined or left.
Pulsar 2.6.0 introduces a new consistent hash distribution for the Key_Shared
subscription. You can enable the consistent hash distribution in `broker.conf`
and the auto split approach is still selected by default.
+
+```
+# On KeyShared subscriptions, with default AUTO_SPLIT mode, use splitting
ranges or
+# consistent hashing to reassign keys to new consumers
+subscriptionKeySharedUseConsistentHashing=false
+
+# On KeyShared subscriptions, number of points in the consistent-hashing ring.
+# The higher the number, the more equal the assignment of keys to consumers
+subscriptionKeySharedConsistentHashingReplicaPoints=100
+```
+
+We plan to use consistent hash distribution by default in the subsequent
versions.
+For more information about implementation details, see
[PR-6791](https://github.com/apache/pulsar/pull/6791).
+
+### [Key Shared] Fix ordering issue in KeyShared dispatcher when adding
consumers
+
+This is a great fix for the Key_Shared subscription. Previously, ordering was
broken in a KeyShared dispatcher if a new consumer c2 came in and an existing
consumer c1 went out. This was because messages with keys previously assigned
to c1 may route to c2, which might break the message ordering dispatch
guarantee in the Key_Shared subscription. This PR introduces new consumers
joining in a "paused" state until the previous messages are acknowledged to
ensure the messages are dispatched o [...]
+
+If you still want the relaxed ordering, you can set up at the consumer side as
below.
+
+```java
+pulsarClient.newConsumer()
+
.keySharedPolicy(KeySharedPolicy.autoSplitHashRange().setAllowOutOfOrderDelivery(true))
+ .subscribe();
+```
+
+For more information about implementation details, see
[PR-7106](https://github.com/apache/pulsar/pull/7106) and
[PR-7108](https://github.com/apache/pulsar/pull/7108).
+
+### [Key Shared] Add support for key hash range reading
+
+This PR supports sticky key hash range reader. A broker only dispatches
messages whose hash of the message key contains by a specified key hash range.
Besides, multiple key hash ranges can be specified on a reader.
+
+```java
+pulsarClient.newReader()
+ .topic(topic)
+ .startMessageId(MessageId.earliest)
+ .keyHashRange(Range.of(0, 10000), Range.of(20001, 30000))
+ .create();
+```
+
+For more information about implementation details, see
[PR-5928](https://github.com/apache/pulsar/pull/5928).
+
+### Use pure-java Air-Compressor instead of JNI based libraries
+
+Previously, JNI based libraries were used to perform data compression. While
these libraries do have an overhead in terms of size and affect the JNI
overhead which is typically measurable when compressing many small payloads.
This PR replaces compression libraries for LZ4, ZStd, and Snappy with
[AirCompressor](https://github.com/airlift/aircompressor), which is a pure Java
compression library used by Presto.
+
+For more information about implementation details, see
[PR-5390](https://github.com/apache/pulsar/pull/5390).
+
+### Support multiple Pulsar clusters using the same BookKeeper cluster
+
+This PR allows multiple pulsar clusters to use the specified BookKeeper
cluster by pointing BookKeeper client to the ZooKeeper connection string of
BookKeeper cluster. This PR adds a configuration
(`bookkeeperMetadataServiceUri`) to discover BookKeeper cluster metadata store
and uses metadata service URI to initialize BookKeeper clients.
+
+```
+# Metadata service uri that bookkeeper is used for loading corresponding
metadata driver
+# and resolving its metadata service location.
+# This value can be fetched using `bookkeeper shell whatisinstanceid` command
in BookKeeper cluster.
+# For example: zk+hierarchical://localhost:2181/ledgers
+# The metadata service uri list can also be semicolon separated values like
below:
+# zk+hierarchical://zk1:2181;zk2:2181;zk3:2181/ledgers
+bookkeeperMetadataServiceUri=
+```
+
+For more information about implementation details, see
[PR-5985](https://github.com/apache/pulsar/pull/5985).
+
+### Support deleting inactive topics when subscriptions are caught up
+
+Previously, Pulsar supported deleting inactive topics which do not have active
producers and subscriptions. This PR supports deleting inactive topics when all
subscriptions of the topic are caught up and when there are no active producers
or consumers. This PR exposes inactive topic delete mode in `broker.conf`. In
the future, we can support a namespace level configuration for the inactive
topic delete mode.
+
+```
+# Set the inactive topic delete mode. Default is delete_when_no_subscriptions
+# 'delete_when_no_subscriptions' mode only delete the topic which has no
subscriptions and no active producers
+# 'delete_when_subscriptions_caught_up' mode only delete the topic that all
subscriptions has no backlogs(caught up)
+# and no active producers/consumers
+brokerDeleteInactiveTopicsMode=delete_when_no_subscriptions
+```
+
+For more information about implementation details, see
[PR-6077](https://github.com/apache/pulsar/pull/6077).
+
+### Add a flag to skip broker shutdown on transient OOM
+
+A high dispatch rate on one of the topics may cause a broker to go OOM
temporarily. It is a transient error and the broker can recover within a few
seconds as soon as some memory gets released. However, in 2.4 release
([#4196](https://github.com/apache/pulsar/pull/4196)), the “restarted broker on
OOM” feature can cause huge instability in a cluster, where a topic moves from
one broker to another and restarts multiple brokers and disrupts other topics
as well. So this PR provides a dynami [...]
+
+For more information about implementation details, see
[PR-6634](https://github.com/apache/pulsar/pull/6634).
+
+### Make ZooKeeper cache expiry time configurable
+
+Previously, ZooKeeper cache expiry time was hardcoded and it needed to be
configurable to refresh the value based on various requirements, for example,
refreshing the value quickly in case of zk-watch miss, avoiding frequent cache
refresh to avoid zk-read or avoiding issue due to zk read timeout, and so on.
Now you can configure ZooKeeper cache expiry time in `broker.conf` as below.
+
+```
+# ZooKeeper cache expiry time in seconds
+zooKeeperCacheExpirySeconds=300
+```
+
+For more information about implementation details, see
[PR-6668](https://github.com/apache/pulsar/pull/6668).
+
+### Optimize consumer fetch messages in case of batch message
+
+When a consumer sends a fetch request to a broker server, it contains a fetch
message number telling the server how many messages should be pushed to a
consumer client. However, the broker server stores data in BookKeeper or broker
cache according to entry rather than a single message if the producer produces
messages using the batch feature. There is a gap to map the number of messages
to the number of entries when dealing with consumer fetch requests. This PR
adds a variable `avgMessag [...]
+
+You can enable `preciseDispatcherFlowControl` in ` broker.conf` as below.
+
+```
+# Precise dispatcher flow control according to history message number of each
entry
+preciseDispatcherFlowControl=false
+```
+
+For more information about implementation details, see
[PR-6719](https://github.com/apache/pulsar/pull/6719)
+
+### Introduce precise topic publish rate limiting
+
+Previously, Pulsar supported the publish rate limiting but it is not a precise
control. Now, for some use cases that need precise control, you can enable it
in `broker.conf` as below.
+
+```
+preciseTopicPublishRateLimiterEnable=true
+```
+
+For more information about implementation details, see
[PR-7078](https://github.com/apache/pulsar/pull/7078).
+
+### Expose check delay of new entries in `broker.conf`
+
+Previously, the check delay of new entries was 10 ms and could not be changed
by users. Currently, for consumption latency sensitive scenarios, you can set
the value of check delay of new entries to a smaller value or 0 in
`broker.conf` as below. Using a smaller value may degrade consumption
throughput.
+
+```
+managedLedgerNewEntriesCheckDelayInMillis=10
+```
+
+For more information about implementation details, see
[PR-7154](https://github.com/apache/pulsar/pull/7154).
+
+### [Schema] Supports `null` key and `null` value in KeyValue schema
+
+For more information about implementation details, see
[PR-7139](https://github.com/apache/pulsar/pull/7139).
+
+### Support triggering ledger rollover when `maxLedgerRolloverTimeMinutes` is
met
+
+This PR implements a monitoring thread to check if the current topic ledger
meets the constraint of `managedLedgerMaxLedgerRolloverTimeMinutes` and
triggers a rollover to make the configuration take effect. Another important
idea is that if you trigger a rollover, you can close the current ledger so
that you can release the storage of the current ledger. For some less commonly
used topics, the current ledger data is likely to be expired and the current
rollover logic is only triggered wh [...]
+
+For more information about implementation details, see
[PR-7116](https://github.com/apache/pulsar/pull/7111).
+
+## Proxy
+
+### Add REST API to get connection and topic stats
+
+Previously, Pulsar proxy did not have useful stats to get internal information
about the proxy. It is better to have internal-stats of proxy to get
information, such as live connections, topic stats (with higher logging level),
and so on. This PR adds REST API to get stats for connection and topics served
by proxy.
+
+For more information about implementation details, see
[PR-6473](https://github.com/apache/pulsar/pull/6473).
+
+## Admin
+
+### Support getting a message by message ID in pulsar-admin
+
+This PR adds a new command `get-message-by-id` to the pulsar-admin. It allows
users to check a single message by providing ledger ID and entry ID.
+
+For more information about implementation details, see
[PR-6331](https://github.com/apache/pulsar/pull/6331).
+
+### Support deleting subscriptions forcefully
+
+This PR adds the method `deleteForcefully` to support force deleting
subscriptions.
+
+For more information about implementation details, see
[PR-6383](https://github.com/apache/pulsar/pull/6383).
+
+## Functions
+
+### Built-in functions
+
+This PR implements the possibility of creating built-in functions in the same
way as adding built-in connectors.
+
+For more information about implementation details, see
[PR-6895](https://github.com/apache/pulsar/pull/6895).
+
+### Add Go Function heartbeat (and gRPC service) for production usage
+
+For more information about implementation details, see
[PR-6031](https://github.com/apache/pulsar/pull/6031).
+
+### Add custom property options to functions
+
+This PR allows users to set custom system properties while submitting
functions. This can be used to pass credentials via a system property.
+
+For more information about implementation details, see
[PR-6348](https://github.com/apache/pulsar/pull/6348).
+
+### Separate TLS configurations of function worker and broker
+
+For more information about implementation details, see
[PR-6602](https://github.com/apache/pulsar/pull/6602).
+
+### Add the ability to build consumers in functions and sources
+
+Previously, function and source context give their writers an ability to
create publishers but not consumers. This PR fixes this issue.
+
+For more information about implementation details, see
[PR-6954](https://github.com/apache/pulsar/pull/6954).
+
+## Pulsar SQL
+
+### Support KeyValue schema
+
+Previously, Pulsar SQL could not read the KeyValue schema data.
+
+This PR adds KeyValue schema support for Pulsar SQL. It adds the prefix `key.`
for the key field name and `value.` for the value field name.
+
+For more information about implementation details, see
[PR-6325](https://github.com/apache/pulsar/pull/6325).
+
+### Support multiple Avro schema versions
+
+Previously, if you have multiple Avro schema versions for a topic, using the
Pulsar SQL to query data from this topic will introduce some problems. With
this change, You can evolve the schema of the topic and keep transitive
backward compatibility of all schemas of the topic if you want to query data
from this topic.
+
+For more information about implementation details, see
[PR-4847](https://github.com/apache/pulsar/pull/4847).
+
+## Java client
+
+### Support waiting for inflight messages while closing a producer
+
+Previously, when you closed a producer, the pulsar-client immediately failed
inflight messages even if it persisted successfully at the broker. Most of the
time, users want to wait for those inflight messages rather than fail them.
While the pulsar-client library did not provide a way to wait for inflight
messages before closing the producer. This PR supports closing API with a flag
where you can control waiting for inflight messages. With this change, you can
close a producer by waiting [...]
+Previously, when you closed a producer, the pulsar-client immediately failed
inflight messages even if it persisted successfully at the broker. Most of the
time, users want to wait for those inflight messages rather than fail them.
While the pulsar-client library did not provide a way to wait for inflight
messages before closing the producer. This PR supports closing API with a flag
where you can control waiting for inflight messages. With this change, you can
close a producer by waiting [...]
+
+For more information about implementation details, see
[PR-6648](https://github.com/apache/pulsar/pull/6648).
+
+### Support loading TLS certs/key dynamically from input stream
+
+Previously, the pulsar-client provided TLS authentication support and the
default TLS provider `AuthenticationTls` expected file path of cert and key
files. However, there were use cases where it was difficult for user
applications to store certs/key files locally for TLS authentication. This PR
adds stream support in `AuthenticationTls` to provide X509Certs and PrivateKey
which also perform auto-refresh when streaming changes in a given provider.
+
+For more information about implementation details, see
[PR-6760](https://github.com/apache/pulsar/pull/6760).
+
+### Support returning sequence ID when throwing an exception for async send
messages
+
+Previously, when sending messages asynchronously failed, an exception was
thrown, but did not know which message was abnormal, and users did not know
which messages needed to be retried. This PR makes changes supported on the
client side. When throwing an exception, the sequenceId
`org.apache.pulsar.client.api.PulsarClientException` is set.
+
+For more information about implementation details, see
[PR-6825](https://github.com/apache/pulsar/pull/6825).
+
+
+## More information
+
+- To download Apache Pulsar 2.6.0, click
[here](https://pulsar.apache.org/en/download/).
+- For more information about Apache Pulsar 2.6.0, see [2.6.0 release
notes](https://pulsar.apache.org/release-notes/#2.6.0) and [2.6.0 PR
list](https://github.com/apache/pulsar/pulls?q=milestone%3A2.6.0+-label%3Arelease%2F2.5.2+-label%3Arelease%2F2.5.1+).
+
+If you have any questions or suggestions, contact us with mailing lists or
slack.
+
+- [[email protected]](mailto:[email protected])
+- [[email protected]](mailto:[email protected])
+- Pulsar slack channel: https://apache-pulsar.slack.com/
+- Self-registration at https://apache-pulsar.herokuapp.com/
+
+Looking forward to your contributions to
[Pulsar](https://github.com/apache/pulsar).
+