Hi, Neng.

Thank review.

> 1. Instead of deleting the `autoAck`, keep it but not use it in the code.
> And documented clearly it's deprecated for the following 2~3 release. And
> then delete it.

Great! I changed PIP. Refer to the latest pip. 
https://github.com/apache/pulsar/issues/15560

> 2. For `PulsarSinkAtLeastOnceProcessor` and
> `PulsarSinkEffectivelyOnceProcessor`, if `NONE` is configured, it defaults
> to ATLEAST_ONCE.

I took Mesika's suggestion and changed NONE to MANUAL. I add new 
PulsarSinkProcessor implements: PulsarSinkManualProcessor. So, if `MANUAL ` is 
configured, Will not use PulsarSinkAtLeastOnceProcessor and 
PulsarSinkEffectivelyOnceProcessor. Refer to the latest PIP API Changes(3)

> 3. Need to let users know the behavior when they call `record.ack()` inside
> the function implementation.


According to the description of  Implementation(2), We will add to the 
documentation to tell the user.

Thanks,
Baodi Shi

> 2022年5月27日 06:0836,Neng Lu <freen...@gmail.com> 写道:
> 
> Some suggestions:
> 
> 1. Instead of deleting the `autoAck`, keep it but not use it in the code.
> And documented clearly it's deprecated for the following 2~3 release. And
> then delete it.
> 2. For `PulsarSinkAtLeastOnceProcessor` and
> `PulsarSinkEffectivelyOnceProcessor`, if `NONE` is configured, it defaults
> to ATLEAST_ONCE.
> 3. Need to let users know the behavior when they call `record.ack()` inside
> the function implementation.
> 
> On Thu, May 12, 2022 at 1: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).
>> 
>> 
>> 
> 
> -- 
> Best Regards,
> Neng

Reply via email to