Hi,

ValueState is a handle rather than an actual value. So it should never be
serialized. In fact, ValueState itself is not a Serializable. It should be
ok to always mark it as transient.

In this case, I suppose it works because the ValueState is not set (which
happens during the runtime) when the function is serialized (while
deploying). But it's not good.

On Fri, Feb 24, 2023 at 10:29 AM Zhongpu Chen <chenlov...@gmail.com> wrote:

> Hi,
>
> When I am reading the code from flink-training-repo [1], I noticed the
> following code:
>
> ```java
>
> public static class EnrichmentFunction
>         extends RichCoFlatMapFunction<TaxiRide, TaxiFare, RideAndFare> {
>
>     private ValueState<TaxiRide> rideState;    private ValueState<TaxiFare> 
> fareState;
>     ...
> }
>
> ```
>
> From my understanding, since ValueState variables here are scoped to each
> instance, they should not be serialized for the performance sake. Thus, we
> should always mark them with "transient". Similar discussion can be found
> here [2].
>
> Should we always mark ValueState as "transient", and why? Please help me
> to figure it out.
>
> [1]
> https://github.com/apache/flink-training/blob/master/rides-and-fares/src/solution/java/org/apache/flink/training/solutions/ridesandfares/RidesAndFaresSolution.java
>
> [2]
> https://stackoverflow.com/questions/72556202/flink-managed-state-as-transient
>

Reply via email to