Hi Sarwar,

It seems like we didn't reach a consensus last time about this KIP.  So I would 
suggest revising the KIP, and then creating a new DISCUSS thread when it's 
ready for review.

regards,
Colin


On Wed, Apr 14, 2021, at 01:26, Sarwar Bhuiyan wrote:
> Forgive me while I find my feet, but since this reached a VOTE stage, is it
> really required to go through a DISCUSS thread again or can we continue to
> address the issues on this thread since the issues were raised on this
> thread? If I do have to create a new DISCUSS thread, do I just copy the
> messages from the old thread to it to address them?
> 
> Thank you.
> 
> Sarwar
> 
> On Wed, Apr 14, 2021 at 9:18 AM Stanislav Kozlovski <stanis...@confluent.io>
> wrote:
> 
> > Hey all,
> >
> > To revive this old KIP, Sarwar Bhuiyan has volunteered to take over
> > ownership.
> > He will continue to drive this KIP to approval and completion - I
> > understand that he will re-start the discussion with a new [DISCUSS] or
> > [VOTE] thread.
> >
> > Thank you Sarwar!
> >
> > Best,
> > Stanislav
> >
> > On Fri, Jan 10, 2020 at 5:55 PM Gwen Shapira <g...@confluent.io> wrote:
> >
> >> Sorry for the super late reply, but since the vote thread showed up,
> >> I've read the KIP and have a concern.
> >> The concern was raised by Matthias Sax earlier, but I didn't see it
> >> addressed.
> >>
> >> Basically the current iteration of the KIP unifies deserialization
> >> errors with corruption. As was pointed out, these are not the same
> >> thing. Corruption means that the message itself (including envelope,
> >> not just the payload) is broken. De-serialization errors mean that
> >> either key or value serializers have a problem. It can even be a
> >> temporary problem of connecting to schema registry, I believe. Corrupt
> >> messages can only be skipped. De-serialization errors can (and
> >> arguably should) be retried with a different serializer. Something
> >> like Connect will need to skip corrupt messages, but messages with
> >> SerDe issues should probably go into a dead-letter queue.
> >>
> >> Anyway, IMO we need exceptions that will let us tell the difference.
> >>
> >> Gwen
> >>
> >> On Fri, Oct 11, 2019 at 10:05 AM Stanislav Kozlovski
> >> <stanis...@confluent.io> wrote:
> >> >
> >> > Thanks Jason. I've edited the KIP with the latest proposal.
> >> >
> >> > On Thu, Oct 10, 2019 at 2:00 AM Jason Gustafson <ja...@confluent.io>
> >> wrote:
> >> >
> >> > > Hi Stanislav,
> >> > >
> >> > > Sorry for the late comment. I'm happy with the current proposal. Just
> >> one
> >> > > small request is to include an example which shows how a user could
> >> use
> >> > > this to skip over a record.
> >> > >
> >> > > I'd suggest pushing this to a vote to see if anyone else has feedback.
> >> > >
> >> > > Thanks,
> >> > > Jason
> >> > >
> >> > > On Sat, Jul 13, 2019 at 2:27 PM Stanislav Kozlovski <
> >> > > stanis...@confluent.io>
> >> > > wrote:
> >> > >
> >> > > > Hello,
> >> > > >
> >> > > > Could we restart the discussion here again?
> >> > > >
> >> > > > My last message was sent on the 3rd of June but I haven't received
> >> > > replies
> >> > > > since then.
> >> > > >
> >> > > > I'd like to get this KIP to a finished state, regardless of whether
> >> that
> >> > > is
> >> > > > merged-in or discarded. It has been almost one year since the
> >> publication
> >> > > > of the KIP.
> >> > > >
> >> > > > Thanks,
> >> > > > Stanislav
> >> > > >
> >> > > > On Mon, Jun 3, 2019 at 11:19 AM Stanislav Kozlovski <
> >> > > > stanis...@confluent.io>
> >> > > > wrote:
> >> > > >
> >> > > > > Do people agree with the approach I outlined in my last reply?
> >> > > > >
> >> > > > > On Mon, May 6, 2019 at 2:12 PM Stanislav Kozlovski <
> >> > > > stanis...@confluent.io>
> >> > > > > wrote:
> >> > > > >
> >> > > > >> Hey there Kamal,
> >> > > > >>
> >> > > > >> I'm sincerely sorry for missing your earlier message. As I open
> >> this
> >> > > > >> thread up, I see I have an unsent draft message about resuming
> >> > > > discussion
> >> > > > >> from some time ago.
> >> > > > >>
> >> > > > >> In retrospect, I think I may have been too pedantic with the
> >> exception
> >> > > > >> naming and hierarchy.
> >> > > > >> I now believe a single exception type of
> >> > > > `RecordDeserializationException`
> >> > > > >> is enough. Let's go with that.
> >> > > > >>
> >> > > > >> On Mon, May 6, 2019 at 6:40 AM Kamal Chandraprakash <
> >> > > > >> kamal.chandraprak...@gmail.com> wrote:
> >> > > > >>
> >> > > > >>> Matthias,
> >> > > > >>>
> >> > > > >>> We already have CorruptRecordException which doesn't extend the
> >> > > > >>> SerializationException. So, we need an alternate
> >> > > > >>> name suggestion for the corrupted record error if we decide to
> >> extend
> >> > > > the
> >> > > > >>> FaultyRecordException class.
> >> > > > >>>
> >> > > > >>> Stanislav,
> >> > > > >>>
> >> > > > >>> Our users are also facing this error. Could we bump up this
> >> > > discussion?
> >> > > > >>>
> >> > > > >>> I think we can have a single exception type
> >> > > > >>> FaultyRecordException/RecordDeserialization exception to
> >> capture both
> >> > > > >>> the errors. We can add an additional enum field to
> >> differentiate the
> >> > > > >>> errors
> >> > > > >>> if required.
> >> > > > >>>
> >> > > > >>> Thanks,
> >> > > > >>> Kamal Chandraprakash
> >> > > > >>>
> >> > > > >>> On Wed, Apr 24, 2019 at 1:49 PM Kamal Chandraprakash <
> >> > > > >>> kamal.chandraprak...@gmail.com> wrote:
> >> > > > >>>
> >> > > > >>> > Stanislav,
> >> > > > >>> >
> >> > > > >>> > Any updates on this KIP? We have internal users who want to
> >> skip
> >> > > the
> >> > > > >>> > corrupted message while consuming the records.
> >> > > > >>> >
> >> > > > >>> >
> >> > > > >>> > On Fri, Oct 19, 2018 at 11:34 PM Matthias J. Sax <
> >> > > > >>> matth...@confluent.io>
> >> > > > >>> > wrote:
> >> > > > >>> >
> >> > > > >>> >> I am not 100% familiar with the details of the consumer code,
> >> > > > however
> >> > > > >>> I
> >> > > > >>> >> tend to disagree with:
> >> > > > >>> >>
> >> > > > >>> >> > There's no difference between the two cases -- if (and
> >> only if)
> >> > > > the
> >> > > > >>> >> message is corrupt, it can't be deserialized.  If (and only
> >> if) it
> >> > > > >>> can't be
> >> > > > >>> >> deserialized, it is corrupt.
> >> > > > >>> >>
> >> > > > >>> >> Assume that a user configures a JSON deserializer but a
> >> faulty
> >> > > > >>> upstream
> >> > > > >>> >> producer writes an Avro message. For this case, the message
> >> is not
> >> > > > >>> >> corrupted, but still can't be deserialized. And I can
> >> imaging that
> >> > > > >>> users
> >> > > > >>> >> want to handle both cases differently.
> >> > > > >>> >>
> >> > > > >>> >> Thus, I think it makes sense to have two different exceptions
> >> > > > >>> >> `RecordDeserializationException` and
> >> `CorruptedRecordException`
> >> > > that
> >> > > > >>> can
> >> > > > >>> >> both extend `FaultyRecordException` (don't like this name
> >> too much
> >> > > > >>> >> honestly, but don't have a better idea for it anyway).
> >> > > > >>> >>
> >> > > > >>> >> Side remark. If we introduce class
> >> > > `RecordDeserializationException`
> >> > > > >>> and
> >> > > > >>> >> `CorruptedRecordException`, we can also add an interface
> >> that both
> >> > > > >>> >> implement to return partition/offset information and let both
> >> > > extend
> >> > > > >>> >> `SerializationException` directly without an intermediate
> >> class in
> >> > > > the
> >> > > > >>> >> exception hierarchy.
> >> > > > >>> >>
> >> > > > >>> >>
> >> > > > >>> >> -Matthias
> >> > > > >>> >>
> >> > > > >>> >> On 8/8/18 2:57 AM, Stanislav Kozlovski wrote:
> >> > > > >>> >> >> If you are inheriting from SerializationException, your
> >> derived
> >> > > > >>> class
> >> > > > >>> >> > should also be a kind of serialization exception.  Not
> >> something
> >> > > > >>> more
> >> > > > >>> >> > general.
> >> > > > >>> >> > Yeah, the reason for inheriting it would be for
> >> > > > >>> backwards-compatibility.
> >> > > > >>> >> >
> >> > > > >>> >> >> Hmm.  Can you think of any new scenarios that would make
> >> Kafka
> >> > > > >>> force
> >> > > > >>> >> the
> >> > > > >>> >> > user need to skip a specific record?  Perhaps one scenario
> >> is if
> >> > > > >>> records
> >> > > > >>> >> > are lost but we don't know how many.
> >> > > > >>> >> > Not on the spot, but I do wonder how likely a new scenario
> >> is to
> >> > > > >>> >> surface in
> >> > > > >>> >> > the future and how we'd handle the exceptions' class
> >> hierarchy
> >> > > > then.
> >> > > > >>> >> >
> >> > > > >>> >> >> Which offset were we planning to use in the
> >> > > > >>> >> > exception?
> >> > > > >>> >> > The offset of the record which caused the exception. In
> >> the case
> >> > > > of
> >> > > > >>> >> > batches, we use the last offset of the batch. In both
> >> cases,
> >> > > users
> >> > > > >>> >> should
> >> > > > >>> >> > have to seek +1 from the given offset. You can review the
> >> PR to
> >> > > > >>> ensure
> >> > > > >>> >> its
> >> > > > >>> >> > accurate
> >> > > > >>> >> >
> >> > > > >>> >> >
> >> > > > >>> >> > If both of you prefer `RecordDeserializationException`, we
> >> can
> >> > > go
> >> > > > >>> with
> >> > > > >>> >> > that. Please do confirm that is okay
> >> > > > >>> >> >
> >> > > > >>> >> > On Tue, Aug 7, 2018 at 11:35 PM Jason Gustafson <
> >> > > > ja...@confluent.io
> >> > > > >>> >
> >> > > > >>> >> wrote:
> >> > > > >>> >> >
> >> > > > >>> >> >> One difference between the two cases is that we can't
> >> generally
> >> > > > >>> trust
> >> > > > >>> >> the
> >> > > > >>> >> >> offset of a corrupt message. Which offset were we
> >> planning to
> >> > > use
> >> > > > >>> in
> >> > > > >>> >> the
> >> > > > >>> >> >> exception? Maybe it should be either the fetch offset or
> >> one
> >> > > plus
> >> > > > >>> the
> >> > > > >>> >> last
> >> > > > >>> >> >> consumed offset? I think I'm with Colin in preferring
> >> > > > >>> >> >> RecordDeserializationException for both cases if
> >> possible. For
> >> > > > one
> >> > > > >>> >> thing,
> >> > > > >>> >> >> that makes the behavior consistent whether or not
> >> `check.crs`
> >> > > is
> >> > > > >>> >> enabled.
> >> > > > >>> >> >>
> >> > > > >>> >> >> -Jason
> >> > > > >>> >> >>
> >> > > > >>> >> >> On Tue, Aug 7, 2018 at 11:17 AM, Colin McCabe <
> >> > > > cmcc...@apache.org>
> >> > > > >>> >> wrote:
> >> > > > >>> >> >>
> >> > > > >>> >> >>> Hi Stanislav,
> >> > > > >>> >> >>>
> >> > > > >>> >> >>> On Sat, Aug 4, 2018, at 10:44, Stanislav Kozlovski wrote:
> >> > > > >>> >> >>>> Hey Colin,
> >> > > > >>> >> >>>>
> >> > > > >>> >> >>>> It may be a bit vague but keep in mind we also raise the
> >> > > > >>> exception in
> >> > > > >>> >> >> the
> >> > > > >>> >> >>>> case where the record is corrupted.
> >> > > > >>> >> >>>> We discussed with Jason offline that message corruption
> >> most
> >> > > > >>> often
> >> > > > >>> >> >>> prevents
> >> > > > >>> >> >>>> deserialization itself and that may be enough of an
> >> argument
> >> > > to
> >> > > > >>> raise
> >> > > > >>> >> >>>> `RecordDeserializationException` in the case of a
> >> corrupt
> >> > > > >>> record. I
> >> > > > >>> >> >>>> personally find that misleading.
> >> > > > >>> >> >>>
> >> > > > >>> >> >>> Hmm.  I think that by definition, corrupt records are
> >> records
> >> > > > that
> >> > > > >>> >> can't
> >> > > > >>> >> >>> be deserialized.  There's no difference between the two
> >> cases
> >> > > --
> >> > > > >>> if
> >> > > > >>> >> (and
> >> > > > >>> >> >>> only if) the message is corrupt, it can't be
> >> deserialized.  If
> >> > > > >>> (and
> >> > > > >>> >> only
> >> > > > >>> >> >>> if) it can't be deserialized, it is corrupt.
> >> > > > >>> >> >>>
> >> > > > >>> >> >>>>
> >> > > > >>> >> >>>> In the end, I think it might be worth it to have a bit
> >> of a
> >> > > > >>> >> >>>> wider-encompassing `FaultyRecordException` (or even
> >> > > > >>> >> >>>> `UnconsumableRecordException`) which would allow users
> >> to
> >> > > skip
> >> > > > >>> over
> >> > > > >>> >> the
> >> > > > >>> >> >>>> record.
> >> > > > >>> >> >>>
> >> > > > >>> >> >>> If you are inheriting from SerializationException, your
> >> > > derived
> >> > > > >>> class
> >> > > > >>> >> >>> should also be a kind of serialization exception.  Not
> >> > > something
> >> > > > >>> more
> >> > > > >>> >> >>> general.
> >> > > > >>> >> >>>
> >> > > > >>> >> >>>> We could then potentially have more specific exceptions
> >> (e.g
> >> > > > >>> >> >>>> deserialization) inherit that but I'm not sure if we
> >> should.
> >> > > > >>> >> >>>> A case for a more general exception which provides
> >> access to
> >> > > > the
> >> > > > >>> >> >>>> partition/offset is future backwards-compatibility. If
> >> there
> >> > > is
> >> > > > >>> ever
> >> > > > >>> >> a
> >> > > > >>> >> >>> new
> >> > > > >>> >> >>>> scenario that would make the user need to skip a
> >> specific
> >> > > > record
> >> > > > >>> -
> >> > > > >>> >> >> there
> >> > > > >>> >> >>>> would already be such an exception and this will
> >> provide some
> >> > > > >>> >> >>>> backward-compatibility with older clients.
> >> > > > >>> >> >>>
> >> > > > >>> >> >>> Hmm.  Can you think of any new scenarios that would make
> >> Kafka
> >> > > > >>> force
> >> > > > >>> >> the
> >> > > > >>> >> >>> user need to skip a specific record?  Perhaps one
> >> scenario is
> >> > > if
> >> > > > >>> >> records
> >> > > > >>> >> >>> are lost but we don't know how many.
> >> > > > >>> >> >>>
> >> > > > >>> >> >>> If we really want to have something more general,
> >> perhaps we
> >> > > > need
> >> > > > >>> >> >>> something like LostDataException.  But in that case, we
> >> can't
> >> > > > >>> inherit
> >> > > > >>> >> >> from
> >> > > > >>> >> >>> SerializationException, since lost data is more general
> >> than
> >> > > > >>> >> >> serialization
> >> > > > >>> >> >>> issues.
> >> > > > >>> >> >>>
> >> > > > >>> >> >>> best,
> >> > > > >>> >> >>> Colin
> >> > > > >>> >> >>>
> >> > > > >>> >> >>>
> >> > > > >>> >> >>>>
> >> > > > >>> >> >>>> Best,
> >> > > > >>> >> >>>> Stanislav
> >> > > > >>> >> >>>>
> >> > > > >>> >> >>>> On Sat, Aug 4, 2018 at 12:23 AM Colin McCabe <
> >> > > > cmcc...@apache.org
> >> > > > >>> >
> >> > > > >>> >> >> wrote:
> >> > > > >>> >> >>>>
> >> > > > >>> >> >>>>> Hi Stanislav,
> >> > > > >>> >> >>>>>
> >> > > > >>> >> >>>>> Thanks for the KIP.
> >> > > > >>> >> >>>>>
> >> > > > >>> >> >>>>> As as user, "FaultyRecordException" seems a little
> >> vague.
> >> > > > >>> What's
> >> > > > >>> >> >>> faulty
> >> > > > >>> >> >>>>> about it?  Is it too big?  Does it not match the
> >> schema of
> >> > > the
> >> > > > >>> other
> >> > > > >>> >> >>>>> records?  Was it not found?
> >> > > > >>> >> >>>>>
> >> > > > >>> >> >>>>> Of course, we know that the specific problem is with
> >> > > > >>> [de]serializing
> >> > > > >>> >> >>> the
> >> > > > >>> >> >>>>> record, not with any of those those things.  So we
> >> should
> >> > > > >>> choose a
> >> > > > >>> >> >> name
> >> > > > >>> >> >>>>> that reflects that serialization is the problem.  How
> >> about
> >> > > > >>> >> >>>>> RecordSerializationException?
> >> > > > >>> >> >>>>>
> >> > > > >>> >> >>>>> best,
> >> > > > >>> >> >>>>> Colin
> >> > > > >>> >> >>>>>
> >> > > > >>> >> >>>>>
> >> > > > >>> >> >>>>> On Thu, Aug 2, 2018, at 15:11, Stanislav Kozlovski
> >> wrote:
> >> > > > >>> >> >>>>>> Hi Jason and Ted,
> >> > > > >>> >> >>>>>>
> >> > > > >>> >> >>>>>> @Jason
> >> > > > >>> >> >>>>>> I did not oppose the idea as I'm not too familiar
> >> with Java
> >> > > > >>> >> >>> conventions.
> >> > > > >>> >> >>>>> I
> >> > > > >>> >> >>>>>> agree it is a non-ideal way for the user to catch the
> >> > > > >>> exception so
> >> > > > >>> >> >> I
> >> > > > >>> >> >>>>>> changed it back.
> >> > > > >>> >> >>>>>>
> >> > > > >>> >> >>>>>> I've updated the KIP and PR with the latest changes.
> >> Now,
> >> > > > >>> there is
> >> > > > >>> >> >>> only
> >> > > > >>> >> >>>>> one
> >> > > > >>> >> >>>>>> public exception `FaultyRecordException` which is
> >> thrown to
> >> > > > the
> >> > > > >>> >> >> user
> >> > > > >>> >> >>> in
> >> > > > >>> >> >>>>>> both scenarios (corrupt record and deserialization
> >> error).
> >> > > > >>> >> >>>>>> Please take a look again.
> >> > > > >>> >> >>>>>>
> >> > > > >>> >> >>>>>> Best,
> >> > > > >>> >> >>>>>> Stanislav
> >> > > > >>> >> >>>>>>
> >> > > > >>> >> >>>>>> On Thu, Aug 2, 2018 at 5:25 PM Jason Gustafson <
> >> > > > >>> ja...@confluent.io
> >> > > > >>> >> >>>
> >> > > > >>> >> >>>>> wrote:
> >> > > > >>> >> >>>>>>
> >> > > > >>> >> >>>>>>> Hey Stanislav,
> >> > > > >>> >> >>>>>>>
> >> > > > >>> >> >>>>>>> I should have noticed it earlier from your example,
> >> but I
> >> > > > just
> >> > > > >>> >> >>> realized
> >> > > > >>> >> >>>>>>> that interfaces don't mix well with exceptions.
> >> There is
> >> > > no
> >> > > > >>> way
> >> > > > >>> >> >> to
> >> > > > >>> >> >>>>> catch
> >> > > > >>> >> >>>>>>> the interface type, which means you have to depend on
> >> > > > >>> instanceof
> >> > > > >>> >> >>>>> checks,
> >> > > > >>> >> >>>>>>> which is not very conventional. At the moment, we
> >> raise
> >> > > > >>> >> >>>>>>> SerializationException if there is a problem parsing
> >> the
> >> > > > >>> error,
> >> > > > >>> >> >>> and we
> >> > > > >>> >> >>>>>>> raise KafkaException if the record fails its CRC
> >> check.
> >> > > > Since
> >> > > > >>> >> >>>>>>> SerializationException extends KafkaExeption, it
> >> seems
> >> > > like
> >> > > > we
> >> > > > >>> >> >> can
> >> > > > >>> >> >>>>> handle
> >> > > > >>> >> >>>>>>> both cases in a compatible way by handling both cases
> >> > > with a
> >> > > > >>> >> >> single
> >> > > > >>> >> >>>>> type
> >> > > > >>> >> >>>>>>> that extends SerializationException. Maybe something
> >> like
> >> > > > >>> >> >>>>>>> RecordDeserializationException?
> >> > > > >>> >> >>>>>>>
> >> > > > >>> >> >>>>>>> Thanks,
> >> > > > >>> >> >>>>>>> Jason
> >> > > > >>> >> >>>>>>>
> >> > > > >>> >> >>>>>>> On Thu, Aug 2, 2018 at 5:45 AM, Ted Yu <
> >> > > yuzhih...@gmail.com
> >> > > > >
> >> > > > >>> >> >>> wrote:
> >> > > > >>> >> >>>>>>>
> >> > > > >>> >> >>>>>>>> +1
> >> > > > >>> >> >>>>>>>> -------- Original message --------From: Stanislav
> >> > > > Kozlovski <
> >> > > > >>> >> >>>>>>>> stanis...@confluent.io> Date: 8/2/18  2:41 AM
> >> > > (GMT-08:00)
> >> > > > >>> To:
> >> > > > >>> >> >>>>>>>> dev@kafka.apache.org Subject: [VOTE] KIP-334
> >> Include
> >> > > > >>> >> >> partitions
> >> > > > >>> >> >>> in
> >> > > > >>> >> >>>>>>>> exceptions raised during consumer record
> >> > > > >>> >> >>> deserialization/validation
> >> > > > >>> >> >>>>>>>> Hey everybody,
> >> > > > >>> >> >>>>>>>>
> >> > > > >>> >> >>>>>>>> I'd like to start a vote thread for KIP-334 Include
> >> > > > >>> partitions
> >> > > > >>> >> >> in
> >> > > > >>> >> >>>>>>>> exceptions raised during consumer record
> >> > > > >>> >> >>> deserialization/validation
> >> > > > >>> >> >>>>>>>> <
> >> > > > >>> >> >>>>>>>
> >> > > > >>> >> >>>>>
> >> https://cwiki.apache.org/confluence/pages/viewpage.action?
> >> > > > >>> >> >>> pageId=87297793
> >> > > > >>> >> >>>>>>>>>
> >> > > > >>> >> >>>>>>>>
> >> > > > >>> >> >>>>>>>> --
> >> > > > >>> >> >>>>>>>> Best,
> >> > > > >>> >> >>>>>>>> Stanislav
> >> > > > >>> >> >>>>>>>>
> >> > > > >>> >> >>>>>>>
> >> > > > >>> >> >>>>>>
> >> > > > >>> >> >>>>>>
> >> > > > >>> >> >>>>>> --
> >> > > > >>> >> >>>>>> Best,
> >> > > > >>> >> >>>>>> Stanislav
> >> > > > >>> >> >>>>>
> >> > > > >>> >> >>>>
> >> > > > >>> >> >>>>
> >> > > > >>> >> >>>> --
> >> > > > >>> >> >>>> Best,
> >> > > > >>> >> >>>> Stanislav
> >> > > > >>> >> >>>
> >> > > > >>> >> >>
> >> > > > >>> >> >
> >> > > > >>> >> >
> >> > > > >>> >>
> >> > > > >>> >>
> >> > > > >>>
> >> > > > >>
> >> > > > >>
> >> > > > >> --
> >> > > > >> Best,
> >> > > > >> Stanislav
> >> > > > >>
> >> > > > >
> >> > > > >
> >> > > > > --
> >> > > > > Best,
> >> > > > > Stanislav
> >> > > > >
> >> > > >
> >> > > >
> >> > > > --
> >> > > > Best,
> >> > > > Stanislav
> >> > > >
> >> > >
> >> >
> >> >
> >> > --
> >> > Best,
> >> > Stanislav
> >>
> >
> >
> > --
> > Best,
> > Stanislav
> >
> 
> 
> -- 
> 
> <https://www.confluent.io/>
> 
> *Sarwar Bhuiyan*
> 
> Senior Customer Success Architect
> 
> +447949684437
> 
> Follow us:  Blog <http://www.confluent.io/blog> • Slack
> <https://slackpass.io/confluentcommunity> • Twitter
> <https://twitter.com/ConfluentInc> • YouTube <https://youtube.com/confluent>
> 
> <https://developer.confluent.io/>
> 

Reply via email to