Hi Chris,

Since you are using read_committed mode, the txn marker from the
`endOffsets()` should indeed be skipped, no matter for committed of aborted
txns. For example if the log looks like this:

offsets:   0, 1, 2, 3, t_c(4) // or t_a(4) which means "abort marker"

then the endOffset should return "5".


That's why I'm unclear why you're seeing this issue.


Guozhang

On Tue, Mar 22, 2022 at 6:19 AM Chris Jansen <chris.jan...@permutive.com>
wrote:

> Thanks Luke,
>
> If the transaction marker should be hidden, does it follow that aborted
> transaction at the end of the log should also be hidden for clients that
> are in read committed mode?
>
> Happy to do a KIP/PR.
>
> Thanks again,
>
> Chris
>
> On Tue, Mar 22, 2022 at 10:21 AM Luke Chen <show...@gmail.com> wrote:
>
> > Hi Chris,
> >
> > Yes, the transaction marker should be hidden to clients.
> > There is similar issues reported:
> > https://issues.apache.org/jira/browse/KAFKA-10683
> > Welcome to submit KIP/PR to improve it.
> >
> > Thank you.
> > Luke
> >
> >
> > On Tue, Mar 22, 2022 at 5:16 PM Chris Jansen <chris.jan...@permutive.com
> >
> > wrote:
> >
> > > Hi Guozhang,
> > >
> > > Sorry, I should have been more clear. By "an unreadable end of the
> log",
> > I
> > > mean the `endOffsets` method returns an offset for a record that is
> never
> > > surfaced to the caller of `poll`.
> > >
> > > I've done some more digging and I think I understand why that is now.
> The
> > > API `endOffsets` calls tells the client, at a low level, what offset it
> > can
> > > read up to in the log. This may include a transaction marker or an
> > aborted
> > > transaction that gets delivered, but the client skips over when
> returning
> > > records via the `poll` method. I understand why the client must be told
> > > where to read up to, as the decision to skip chunks of the log must be
> > made
> > > by the client.
> > >
> > > What I was looking for when calling `endOffsets` was the last offset
> that
> > > would be surfaced via the `poll` method rather than where the low level
> > > client should read up to. If this is at all possible, it seems like
> this
> > > might require a broker change.
> > >
> > > Thanks
> > >
> > > Chris
> > >
> > > On Mon, Mar 21, 2022 at 5:38 PM Guozhang Wang <wangg...@gmail.com>
> > wrote:
> > >
> > > > Hi Chris,
> > > >
> > > > What do you mean by "an unreadable end of the log"? Could you
> > elaborate?
> > > >
> > > > The version you used is recent enough, and the configs seems okay.
> So I
> > > > think there are some issues elsewhere.
> > > >
> > > > On Mon, Mar 21, 2022 at 5:51 AM Chris Jansen <
> > chris.jan...@permutive.com
> > > >
> > > > wrote:
> > > >
> > > > > So an update on this, it seems that the consumer reports an
> > unreadable
> > > > end
> > > > > of the log if the transaction has been aborted. Is this the
> intended
> > > > > behaviour?
> > > > >
> > > > > Thanks again,
> > > > >
> > > > > Chris
> > > > >
> > > > > On Mon, Mar 21, 2022 at 12:25 PM Chris Jansen <
> > > > chris.jan...@permutive.com>
> > > > > wrote:
> > > > >
> > > > > > Hi Guozhang,
> > > > > >
> > > > > > Thanks for getting back to me. I'm using Confluent's distribution
> > > > version
> > > > > > 6.2.2, so Kafka 2.8.1. Could there be some consumer or broker
> > > > > configuration
> > > > > > I'm missing that would change this behaviour?
> > > > > >
> > > > > > Just to confirm, here are my consumer settings:
> > > > > >
> > > > > > auto.offset.reset -> earliest, isolation.level -> read_committed,
> > > > > > group.instance.id -> <redacted>, group.id ->
> > > > > > ephemeral-6c5f8338-3d94-4296-b64a-d3a5a331117e, bootstrap.servers
> > ->
> > > > > > PLAINTEXT://localhost:58300, enable.auto.commit -> false
> > > > > >
> > > > > > Thanks again,
> > > > > >
> > > > > >
> > > > > > Chris
> > > > > >
> > > > > >
> > > > > > On Sun, Mar 20, 2022 at 12:46 AM Guozhang Wang <
> wangg...@gmail.com
> > >
> > > > > wrote:
> > > > > >
> > > > > >> Hi Chris,
> > > > > >>
> > > > > >> The broker does take the isolation level in the ListOffset API
> > > (which
> > > > is
> > > > > >> used for the endoffset call) in to consideration:
> > > > > >>
> > > > > >> val lastFetchableOffset = isolationLevel match {
> > > > > >>   case Some(IsolationLevel.READ_COMMITTED) =>
> > > > localLog.lastStableOffset
> > > > > >>   case Some(IsolationLevel.READ_UNCOMMITTED) =>
> > > localLog.highWatermark
> > > > > >>   case None => localLog.logEndOffset
> > > > > >> }
> > > > > >>
> > > > > >>
> > > > > >> If it is READ_COMMITTED, it would only return the last stable
> > > offset.
> > > > > >>
> > > > > >> But this requires the broker version to be newer enough to
> > actually
> > > > > >> know the new format of the request, is your broker on the newer
> > > > > >> version? Other than that, I cannot think of a reason explaining
> > what
> > > > > >> you saw.
> > > > > >>
> > > > > >>
> > > > > >>
> > > > > >> On Wed, Mar 16, 2022 at 5:12 AM Chris Jansen <
> > > > > chris.jan...@permutive.com>
> > > > > >> wrote:
> > > > > >>
> > > > > >> > Hello all,
> > > > > >> >
> > > > > >> > I have the need to query end offsets for a particular topic
> > using
> > > a
> > > > > >> > consumer that has been configured with the "READ_COMMITTED"
> > > > isolation
> > > > > >> > level. The response I get via the Java client
> > > > > >> > includes offsets at the end of the log that have not yet been
> > > > > committed
> > > > > >> and
> > > > > >> > therefore can't be consumed.
> > > > > >> >
> > > > > >> > After digging around in the Java client code, it looks like
> the
> > > > > >> isolation
> > > > > >> > level is being transmitted in the API request to the broker.
> So
> > my
> > > > > >> question
> > > > > >> > is does the broker use this information when crafting a
> response
> > > > and,
> > > > > >> if it
> > > > > >> > is taken into account, why does it return log end offsets for
> > > > > >> transactions
> > > > > >> > that have not yet been committed?
> > > > > >> >
> > > > > >> > For my own future reference I was struggling to find any
> details
> > > on
> > > > > the
> > > > > >> > broker API anywhere, if someone could point me in the right
> > > > direction,
> > > > > >> I'd
> > > > > >> > really appreciate it.
> > > > > >> >
> > > > > >> > Thanks,
> > > > > >> >
> > > > > >> >
> > > > > >> > Chris Jansen
> > > > > >> >
> > > > > >>
> > > > > >>
> > > > > >> --
> > > > > >> -- Guozhang
> > > > > >>
> > > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > > -- Guozhang
> > > >
> > >
> >
>


-- 
-- Guozhang

Reply via email to