Only commiters can modify wikis, we can discuss that first.

Thanks,
Baodi Shi

> 2022年5月30日 22:5828,Asaf Mesika <asaf.mes...@gmail.com> 写道:
> 
> Still new to the PIP process: Shouldn't this PIP be added here
> <https://github.com/apache/pulsar/wiki#pulsar-improvement-proposals>?
> 
> On Thu, May 12, 2022 at 11:52 AM Baozi <wudixiaolong...@icloud.com.invalid>
> wrote:
> 
>> Hi Pulsar community,
>> 
>> I open a https://github.com/apache/pulsar/issues/15560 for Function add
>> NONE delivery semantics
>> 
>> Let me know what you think.
>> 
>> 
>> Thanks,
>> Baodi Shi
>> 
>> 
>> ## Motivation
>> 
>> Currently Function supports three delivery semantics, and also provides
>> autoAck to control whether to automatically ack.
>> Because autoAck affects the delivery semantics of Function, it can be
>> confusing for users to understand the relationship between these two
>> parameters.
>> 
>> For example, when the user configures `Guarantees == ATMOST_ONCE` and
>> `autoAck == false`, then the framework will not help the user to ack
>> messages, and the processing semantics may become `ATLEAST_ONCE`.
>> 
>> The delivery semantics provided by Function should be clear. When the user
>> sets the guarantees, the framework should ensure point-to-point semantic
>> processing and cannot be affected by other parameters.
>> 
>> ## Goal
>> 
>> Added `NONE` delivery semantics and delete `autoAck` config.
>> 
>> The original intention of `autoAck` semantics is that users want to
>> control the timing of ack by themselves. When autoAck == false, the
>> processing semantics provided by the framework should be invalid. Then we
>> can add `NONE` processing semantics to replace the autoAck == false
>> scenario.
>> 
>> When the user configuration `ProcessingGuarantees == NONE`, the framework
>> does not help the user to do any ack operations, and the ack is left to the
>> user to handle. In other cases, the framework guarantees processing
>> semantics.
>> 
>> ## API Changes
>> 1. Add `NONE` type to ProcessingGuarantees
>> ``` java
>> public enum ProcessingGuarantees {
>>      ATLEAST_ONCE,
>>      ATMOST_ONCE,
>>      EFFECTIVELY_ONCE,
>>      NONE
>> }
>> ```
>> 
>> 2. Delete autoAck config in FunctionConfig
>> ``` java
>> public class FunctionConfig {
>> -    private Boolean autoAck;
>> }
>> ```
>> 
>> ## Implementation
>> 
>> 1. In `PulsarSinkAtLeastOnceProcessor` and
>> `PulsarSinkEffectivelyOnceProcessor`, when `ProcessingGuarantees != NONE`
>> can be ack.
>> 
>> <
>> https://github.com/apache/pulsar/blob/c49a977de4b0b525ec80e5070bc90eddcc7cddad/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/sink/PulsarSink.java#L274-L276
>>> 
>> 
>> 2. When the delivery semantic is `ATMOST_ONCE`, the message will be acked
>> immediately after receiving the message, no longer affected by the autoAck
>> configuration.
>> 
>> 
>> https://github.com/apache/pulsar/blob/c49a977de4b0b525ec80e5070bc90eddcc7cddad/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceRunnable.java#L271-L276
>> 
>> 3. When user call `record.ack()` in function, just  `ProcessingGuarantees
>> == NONE` can be work.
>> 
>> ## Plan test
>> The main test and assert is that when ProcessingGuarantees == NONE, the
>> function framework will not do any ack operations for the user.
>> 
>> ## Compatibility
>> 1. This change will invalidate the user's setting of autoAck, which should
>> be explained in the documentation and provide parameter verification to
>> remind the user.
>> 2. Runtimes of other languages ​​need to maintain consistent processing
>> logic (python, go).
>> 
>> 
>> 

Reply via email to