Bruno,

i tried to explain this in 'kafka user's language through above mentioned
scenario, hope i put it properly -:) and correct me if i am wrong

On Mon, Mar 15, 2021 at 7:23 PM Pushkar Deole <pdeole2...@gmail.com> wrote:

> This is what I understand could be the issue with external state store:
>
> kafka stream application consumes source topic, does processing, stores
> state to kafka state store (this is backed by topic) and before producing
> event on destination topic, the application fails with some issue. In
> this case, the transaction has failed, so kafka guarantees either all or
> none, means offset written to source topic, state written to state store
> topic, output produced on destination topic... all of these happen or none
> of these and in this failure scenario it is none of these.
>
> Assume you have redis state store, and you updated the state into redis
> and stream application failed. Now, you have source topic and destination
> topic consistent i.e. offset is not committed to source topic and output
> not produced on destination topic, but you redis state store is
> inconsistent with that since it is external state store and kafka can't
> guarantee rollback ot state written there
>
> On Mon, Mar 15, 2021 at 6:30 PM Alex Craig <alexcrai...@gmail.com> wrote:
>
>> " Another issue with 3rd party state stores could be violation of
>> exactly-once guarantee provided by kafka streams in the event of a failure
>> of streams application instance"
>>
>> I've heard this before but would love to know more about how a custom
>> state
>> store would be at any greater risk than RocksDB as far as exactly-once
>> guarantees are concerned.  They all implement the same interface, so as
>> long as you're correctly implementing get(), put(), delete(), flush(),
>> etc,
>> you should be fine right?  In other words, I don't think there is any
>> special "exactly once magic" that is baked into the RocksDB store code.  I
>> could be wrong though so I'd love to hear people's thoughts, thanks,
>>
>> Alex C
>>
>> On Sun, Mar 14, 2021 at 4:58 PM Parthasarathy, Mohan <mpart...@hpe.com>
>> wrote:
>>
>> > Thanks for the responses. In the worst case, I might have to keep both
>> > rocksdb for local store and keep an external store like Redis.
>> >
>> > -mohan
>> >
>> >
>> > On 3/13/21, 8:53 PM, "Pushkar Deole" <pdeole2...@gmail.com> wrote:
>> >
>> >     Another issue with 3rd party state stores could be violation of
>> >     exactly-once guarantee provided by kafka streams in the event of a
>> > failure
>> >     of streams application instance.
>> >     Kafka provides exactly once guarantee for consumer -> process ->
>> > produce
>> >     through transactions and with the use of state store like redis,
>> this
>> >     guarantee is weaker
>> >
>> >     On Sat, Mar 13, 2021 at 5:28 AM Guozhang Wang <wangg...@gmail.com>
>> > wrote:
>> >
>> >     > Hello Mohan,
>> >     >
>> >     > I think what you had in mind works with Redis, since it is a
>> remote
>> > state
>> >     > store engine, it does not have the co-partitioning requirements as
>> > local
>> >     > state stores.
>> >     >
>> >     > One thing you'd need to tune KS though is that with remote stores,
>> > the
>> >     > processing latency may be larger, and since Kafka Streams process
>> all
>> >     > records of a single partition in order, synchronously, you may
>> need
>> > to tune
>> >     > the poll interval configs etc to make sure KS would stay in the
>> > consumer
>> >     > group and not trigger unnecessary rebalances.
>> >     >
>> >     > Guozhang
>> >     >
>> >     > On Thu, Mar 11, 2021 at 6:41 PM Parthasarathy, Mohan <
>> > mpart...@hpe.com>
>> >     > wrote:
>> >     >
>> >     > > Hi,
>> >     > >
>> >     > > I have a use case where messages come in with some key gets
>> > assigned some
>> >     > > partition and the state gets created. Later, key changes (but
>> still
>> >     > > contains the old key in the message) and gets sent to a
>> different
>> >     > > partition. I want to be able to grab the old state using the old
>> > key
>> >     > before
>> >     > > creating the new state on this instance. Redis as a  state store
>> > makes it
>> >     > > easy to implement this where I can simply do a lookup before
>> > creating the
>> >     > > state. I see an implementation here :
>> >     > >
>> >     >
>> >
>> https://github.com/andreas-schroeder/redisks/tree/master/src/main/java/com/github/andreas_schroeder/redisks
>> >     > >
>> >     > > Has anyone tried this ? Any caveats.
>> >     > >
>> >     > > Thanks
>> >     > > Mohan
>> >     > >
>> >     > >
>> >     >
>> >     > --
>> >     > -- Guozhang
>> >     >
>> >
>> >
>> >
>>
>

Reply via email to