David,

I think it would be better implementing such synchronization (i.e. making
sure all consumers has done fetching to that point, and no one will ever
want to go back and re-consume) on the admin side, not on the broker side,
since 1) we want to keep the broker system to be simple enough, and rather
have a "layered architecture" to have such admin features on-top / by-side
of the brokers rather built inside it, and 2) for some synchronization
purposes like "making sure no on will ever want to go back and re-consume",
brokers would not have any clues and it needs to be implemented from
application to application anyways.

What do you think?

Guozhang



On Sun, Nov 13, 2016 at 6:16 AM, 东方甲乙 <254479...@qq.com> wrote:

> Hi Becket,
>     If using the trim.on.offset.commit parameter,  it will help to quickly
> trim the log, but other consumer group's consumer may find the messages are
> trimmed.
> We still need to coordinate many consumer groups to trim the log, it seems
> difficult for the single consumer to do it.
>     Then it will still come to the problem: whether to implement in the
> broker side or in the admin client side.  Even implement in the broker
> side, we can still using the
> trim API to finish the log deletion for Leader or Replica segments.  And
> we can offer an option to safely delete the log(disable by default), so
> this is motivation for this KIP.
>
>
> Thanks,
> David
>
>
>
>
>
>
>
> ------------------ 原始邮件 ------------------
> 发件人: "Becket Qin";<becket....@gmail.com>;
> 发送时间: 2016年11月6日(星期天) 晚上11:39
> 收件人: "dev"<dev@kafka.apache.org>;
>
> 主题: Re: [DISCUSS] KIP-68 Add a consumed log retention before log retention
>
>
>
> Hi David,
>
> I am thinking that depending on the use case, we may not need a separate
> tool to have the committed message based retention using the trim() method.
> One way to do this is to have a configuration like trim.on.offset.commit in
> the consumer so after committing the offset, the consumer will also send a
> trim request to the broker.
>
> In some cases, the application may want to trim the log in a more flexible
> way, e.g not trim on commit but every hour. In that case, it is true that
> users will need to trim the log with a separate admin client. However that
> logic could be a long running stand-alone service independent of Kafka or
> the application. It may have its own configurations as we discussed in this
> KIP so the applications in that case would just talk to that service to
> trim the log instead of taking to Kafka.
>
> Thanks,
>
> Jiangjie (Becket) Qin
>
>
> On Sun, Nov 6, 2016 at 6:10 AM, 东方甲乙 <254479...@qq.com> wrote:
>
> > Hi Becket,
> >     The most important benefit of method (2) is we can safely delete the
> > log segments, becasue all the deleted log segments are consumed.
> > If the messages  are very important, in this case we need to safely
> delete
> > the log segments instead of forcing delete it after the retention time.
> > Kafka itself can insure all the deleted logs are consumed to improve
> > End-to-End reliability.  And this feature by default is disabled, so will
> > stay simple for people not use it.
> >     Actually users can build a tool using the trimRequest to do this
> > work(method 1), but users must start this tool with kafka all the time,
> > this may not always holds.
> >
> >
> > Thanks,
> > David
> >
> >
> >
> >
> >
> >
> >
> >
> > ------------------ 原始邮件 ------------------
> > 发件人: "Becket Qin";<becket....@gmail.com>;
> > 发送时间: 2016年11月1日(星期二) 凌晨3:57
> > 收件人: "dev"<dev@kafka.apache.org>;
> >
> > 主题: Re: [DISCUSS] KIP-68 Add a consumed log retention before log
> retention
> >
> >
> >
> > Hi David,
> >
> > I think the trim() API is generally useful for the consume based
> retention
> > as well as other use cases. So we probably should have (1).
> >
> > For (2), it is more of an optimization by doing a favor for the users.
> This
> > could be implemented on top of (1) if we want to. So maybe we can
> implement
> > (1) first and let the applications do the trim() by themselves at this
> > point. This will put more burden on the application side but is not that
> > bad if there is only one downstream consumer group. In the future if we
> > find more use cases where multiple down stream consumer groups need to
> > coordinate among themselves and a broker side help would make things
> > simpler, we can add (2) then.
> >
> > Regarding the relation between this KIP and KIP-47. At a high level, they
> > are very similar, i.e. trim() by timestamp vs. trim() by offsets. It
> would
> > be worth thinking about them together. After KIP-79, we can search
> messages
> > by timestamp, this essentially translates the timestamp to offsets. So
> > KIP-47 can also be built on top of the trim() by offsets interface after
> > translating the timestamp to offsets. Jun has suggested an implementation
> > in KIP-47 discussion thread which introduces a new TrimRequest. Would you
> > take a look and see if that could be used for KIP-68 as well?
> >
> > Thanks,
> >
> > Jiangjie (Becket) Qin
> >
> >
> >
> > On Sun, Oct 30, 2016 at 2:24 AM, 东方甲乙 <254479...@qq.com> wrote:
> >
> > > Hi All,
> > >
> > >
> > > As per our discussion, there are two ways to clean the consumed log:
> > >
> > >
> > > 1) Use an Admin Tool to find the min commit offset for some topics of
> the
> > > specified set of consumer groups, then send the trim API to all the
> > > replicas of the brokers,
> > > then the brokers will start to trim the log segments of these topics.
> > >
> > >
> > > The benefit of this method is to keep the broker simple and more
> flexible
> > > for the users, but it is more complicated for the users to clean all
> the
> > > messages which are consumed.
> > >
> > >
> > > 2) Broker will periodically do the consumed log retention as the KIP
> > > mentioned. This method is simple for the users and it can automatically
> > > clean the consumed log, but it will add more query work to the brokers.
> > >
> > >
> > > Which method is better?
> > >
> > >
> > > Thanks,
> > > David
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > ------------------ 原始邮件 ------------------
> > > 发件人: "Mayuresh Gharat";<gharatmayures...@gmail.com>;
> > > 发送时间: 2016年10月29日(星期六) 凌晨1:43
> > > 收件人: "dev"<dev@kafka.apache.org>;
> > >
> > > 主题: Re: [DISCUSS] KIP-68 Add a consumed log retention before log
> > retention
> > >
> > >
> > >
> > > I do agree with Guozhang on having applications request an external
> > > service(admin) that talks to kafka, for trimming, in which case this
> > > external service(admin) can check if its OK to send the trim request to
> > > kafka brokers based on a certain conditions.
> > > On broker side we can have authorization by way of ACLs may be, saying
> > that
> > > only this external admin service is allowed to call trim(). In this way
> > we
> > > can actually move the main decision making process out of core.
> > >
> > > Thanks,
> > >
> > > Mayuresh
> > >
> > > On Fri, Oct 28, 2016 at 10:33 AM, Guozhang Wang <wangg...@gmail.com>
> > > wrote:
> > >
> > > > Yes trim() should be an admin API and, if security is concerned, it
> > > should
> > > > be under admin authorization as well.
> > > >
> > > > For applications that needs this feature, it then boils down to the
> > > problem
> > > > that they should request the authorization token from who operates
> > Kafka
> > > > before starting their app to use in their own client, which I think
> is
> > a
> > > > feasible requirement.
> > > >
> > > >
> > > > Guozhang
> > > >
> > > >
> > > > On Fri, Oct 28, 2016 at 9:42 AM, Mayuresh Gharat <
> > > > gharatmayures...@gmail.com
> > > > > wrote:
> > > >
> > > > > Hi Guozhang,
> > > > >
> > > > > I agree that pushing out the complexity of coordination to the
> client
> > > > > application makes it more simple for the broker in the sense that
> it
> > > does
> > > > > not have to be the decision maker regarding when to trim and till
> > what
> > > > > offset. An I agree that if we go in this direction, providing an
> > offset
> > > > > parameter makes sense.
> > > > >
> > > > >
> > > > > But since the main motivation for this seems like saving or
> > reclaiming
> > > > the
> > > > > disk space on broker side, I am not 100% sure how good it is to
> rely
> > on
> > > > the
> > > > > client application to be a good citizen and call the trim API.
> > > > > Also I see the trim() api as more of an admin api rather than
> client
> > > API.
> > > > >
> > > > >
> > > > > Thanks,
> > > > >
> > > > > Mayuresh
> > > > >
> > > > > On Fri, Oct 28, 2016 at 7:12 AM, Guozhang Wang <wangg...@gmail.com
> >
> > > > wrote:
> > > > >
> > > > > > Here are my thoughts:
> > > > > >
> > > > > > If there are indeed multiple consumer groups on the same topic
> that
> > > > needs
> > > > > > to coordinate, it is equally complex if the coordination is on
> the
> > > > broker
> > > > > > or among the applications themselves: for the latter case, you
> > would
> > > > > > imagine some coordination services used (like ZK) to register
> > groups
> > > > for
> > > > > > that topic and let these groups agree upon the minimum offset
> that
> > is
> > > > > safe
> > > > > > to trim for all of them; for the former case, we just need to
> move
> > > this
> > > > > > coordination service into the broker side, which to me is not a
> > good
> > > > > design
> > > > > > under the principle of making broker simple.
> > > > > >
> > > > > > And as we discussed, there are scenarios where the offset to trim
> > is
> > > > not
> > > > > > necessarily dependent on the committed offsets, even if the topic
> > is
> > > > only
> > > > > > consumed by a single consumer group and we do not need any
> > > > coordination.
> > > > > So
> > > > > > I think it is appropriate to require an "offset parameter" in the
> > > trim
> > > > > API.
> > > > > >
> > > > > > Guozhang
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > On Fri, Oct 28, 2016 at 1:27 AM, Becket Qin <
> becket....@gmail.com>
> > > > > wrote:
> > > > > >
> > > > > > > Hey Guozhang,
> > > > > > >
> > > > > > > I think the trim() interface is generally useful. What I was
> > > > wondering
> > > > > is
> > > > > > > the following:
> > > > > > > if the user has multiple applications to coordinate, it seems
> > > simpler
> > > > > for
> > > > > > > the broker to coordinate instead of asking the applications to
> > > > > coordinate
> > > > > > > among themselves. If we let the broker do the coordination and
> do
> > > not
> > > > > > want
> > > > > > > to reuse committed offset for trim(), we kind of need something
> > > like
> > > > > > > "offset for trim", which do not seems to be general enough to
> > have.
> > > > But
> > > > > > if
> > > > > > > there is a single application then we don't need to worry about
> > the
> > > > > > > coordination hence this is no longer a problem.
> > > > > > >
> > > > > > > The use cases for multiple consumer groups I am thinking of is
> > some
> > > > > kind
> > > > > > of
> > > > > > > fork in the DAG, i.e. one intermediate result stream used by
> > > multiple
> > > > > > > downstream jobs. But that may not be a big deal if the
> processing
> > > is
> > > > > > within
> > > > > > > the same application.
> > > > > > >
> > > > > > > Thanks,
> > > > > > >
> > > > > > > Jiangjie (Becket) Qin
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > On Tue, Oct 25, 2016 at 11:41 PM, Guozhang Wang <
> > > wangg...@gmail.com>
> > > > > > > wrote:
> > > > > > >
> > > > > > > > Hello Becket,
> > > > > > > >
> > > > > > > > I am not 100 percent sure I get your points, reading the
> first
> > > half
> > > > > of
> > > > > > > the
> > > > > > > > paragraph I thought we were on the same page that "the
> > committed
> > > > > > offsets
> > > > > > > > and the offsets the applications ( most likely the consumers)
> > > would
> > > > > > like
> > > > > > > to
> > > > > > > > tell the brokers to trim to, could be totally different", but
> > > then
> > > > > you
> > > > > > > said
> > > > > > > > "not sure if the requirement ... is general enough", which
> > > confused
> > > > > me
> > > > > > a
> > > > > > > > bit :) Anyways, I think the consumer committed offsets should
> > be
> > > > > > > separated
> > > > > > > > from whatever the proposed APIs for telling the brokers to
> > safely
> > > > > trim
> > > > > > > > their logs since they will not be read any more. And Jun also
> > > made
> > > > a
> > > > > > good
> > > > > > > > point about that regarding the replay scenarios, which also
> > > applies
> > > > > for
> > > > > > > > users who do not require the flexibility as you mentioned.
> > > > > > > >
> > > > > > > > Regarding the coordination complexity among applications
> > > > themselves,
> > > > > my
> > > > > > > gut
> > > > > > > > feeling is that, in practice, this feature would be mostly
> used
> > > > when
> > > > > > the
> > > > > > > > topic is solely consumed by only one group, and for cases
> where
> > > the
> > > > > > topic
> > > > > > > > is gonna be consumed by multiple groups, this feature would
> > less
> > > > > likely
> > > > > > > be
> > > > > > > > applicable. And if there are indeed such cases, coordination
> > > cannot
> > > > > be
> > > > > > > > avoidable since otherwise how can a consumer group (hence a
> dev
> > > > team
> > > > > /
> > > > > > > > project / etc) tell if the other group is OK with trimming
> the
> > > > data?
> > > > > > > >
> > > > > > > >
> > > > > > > > Guozhang
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > On Tue, Oct 25, 2016 at 6:58 PM, Becket Qin <
> > > becket....@gmail.com>
> > > > > > > wrote:
> > > > > > > >
> > > > > > > > > The trim() interface would be useful in general. And I
> agree
> > > with
> > > > > > > > Guozhang
> > > > > > > > > that conceptually letting the application to decide when to
> > > > delete
> > > > > > the
> > > > > > > > > messages is more intuitive and flexible.
> > > > > > > > >
> > > > > > > > > That said, I am not sure if putting coordination on the
> > > > application
> > > > > > > side
> > > > > > > > is
> > > > > > > > > the best option. At a high level, there are two things to
> be
> > > > done:
> > > > > > > > > 1. Coordinate among all the interested consumer groups.
> > > > > > > > > 2. Telling the brokers to trim the log
> > > > > > > > >
> > > > > > > > > For (1), letting different applications coordinate among
> > > > themselves
> > > > > > is
> > > > > > > > more
> > > > > > > > > involved, and this logic may have to be implemented by
> > > different
> > > > > > > > > applications. As Guozhang mentioned, the most intuitive way
> > may
> > > > be
> > > > > > > > looking
> > > > > > > > > at the committed offset for each of the groups. But the
> > > > > applications
> > > > > > > may
> > > > > > > > > still need to coordinate among themselves to avoid split
> > brains
> > > > > > issues.
> > > > > > > > If
> > > > > > > > > there are many consumers from different applications, the
> > > brokers
> > > > > may
> > > > > > > > > potentially see a lot of offset queries. So, while letting
> > the
> > > > > > consumer
> > > > > > > > > groups coordinate among themselves provides flexibility, it
> > > > doesn't
> > > > > > > look
> > > > > > > > > simpler overall. There seems a trade off between easiness
> of
> > > use
> > > > > and
> > > > > > > > > flexibility. For people who require flexibility, consumer
> > side
> > > > > > > > coordination
> > > > > > > > > + trim() interface is the way to go. But for people who
> don't
> > > > > require
> > > > > > > > that,
> > > > > > > > > committed offset based retention seems simpler and does not
> > > need
> > > > > any
> > > > > > > > client
> > > > > > > > > side code change.
> > > > > > > > >
> > > > > > > > > For (2), in the current approach, the consumers tell the
> > broker
> > > > > their
> > > > > > > > > positions by committing offsets. If we use trim(), it would
> > be
> > > > more
> > > > > > > > > explicit. I am actually a little concerned about reusing
> the
> > > > > > committed
> > > > > > > > > offset for log retention. It essentially overloads the
> offset
> > > > > commit
> > > > > > > with
> > > > > > > > > both checkpointing and consume-based log retention, which
> may
> > > not
> > > > > > work
> > > > > > > > when
> > > > > > > > > people want to separate those two functions. People can use
> > app
> > > > > side
> > > > > > > > > coordination + trim() to workaround this issue. But I am
> not
> > > sure
> > > > > if
> > > > > > > that
> > > > > > > > > the requirement of separating offset commit from
> > consume-based
> > > > log
> > > > > > > > > retention is general enough to be addressed specifically.
> > > > > > > > >
> > > > > > > > > Thanks,
> > > > > > > > >
> > > > > > > > > Jiangjie (Becket) Qin
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > On Tue, Oct 25, 2016 at 3:00 PM, Joel Koshy <
> > > jjkosh...@gmail.com
> > > > >
> > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > > +1 - I was thinking the exact same thing.
> > > > > > > > > >
> > > > > > > > > > On Tue, Oct 25, 2016 at 2:52 PM, Jun Rao <
> j...@confluent.io
> > >
> > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > > One of the main reasons for retaining messages on the
> > > broker
> > > > > > after
> > > > > > > > > > > consumption is to support replay. A common reason for
> > > replay
> > > > is
> > > > > > to
> > > > > > > > fix
> > > > > > > > > > and
> > > > > > > > > > > application error. So, it seems that it's a bit hard to
> > > > delete
> > > > > > log
> > > > > > > > > > segments
> > > > > > > > > > > just based on the committed offsets that the broker
> > knows.
> > > An
> > > > > > > > > alternative
> > > > > > > > > > > approach is to support an api that can trim the log up
> > to a
> > > > > > > specified
> > > > > > > > > > > offset (similar to what's being discussed in KIP-47).
> > This
> > > > way,
> > > > > > an
> > > > > > > > > > > application can control when and how much to trim the
> > log.
> > > > > > > > > > >
> > > > > > > > > > > Thanks,
> > > > > > > > > > >
> > > > > > > > > > > Jun
> > > > > > > > > > >
> > > > > > > > > > > On Mon, Oct 24, 2016 at 11:11 AM, Guozhang Wang <
> > > > > > > wangg...@gmail.com>
> > > > > > > > > > > wrote:
> > > > > > > > > > >
> > > > > > > > > > > > Overall I think the motivation is common and of
> > interests
> > > > to
> > > > > > lots
> > > > > > > > of
> > > > > > > > > > > users.
> > > > > > > > > > > > Would like to throw my two cents on this discussion:
> > > > > > > > > > > >
> > > > > > > > > > > > 1. Kafka topics can be used in different ways. For
> some
> > > > > > > categories
> > > > > > > > of
> > > > > > > > > > > > topics (think: "pageView" event topics), it is a
> shared
> > > > topic
> > > > > > > among
> > > > > > > > > > > > different teams / apps within the organization and
> lots
> > > of
> > > > > > > > temporary
> > > > > > > > > > > > consumers (for debugging, trouble shooting, prototype
> > > > > > > development,
> > > > > > > > > etc)
> > > > > > > > > > > can
> > > > > > > > > > > > come and go dynamically, in which case it is hard to
> > > track
> > > > > all
> > > > > > of
> > > > > > > > > such
> > > > > > > > > > > > consumer and maintain the minimum committed offsets;
> on
> > > the
> > > > > > other
> > > > > > > > > hand,
> > > > > > > > > > > > there are another category of topics (think:
> stream-app
> > > > owned
> > > > > > > > > > > intermediate
> > > > > > > > > > > > topics like "pricing-enriched-bid-activity", as
> Becket
> > > > > > mentioned
> > > > > > > > > > above)
> > > > > > > > > > > > which are particularly own but only one or a few
> apps,
> > > and
> > > > > > hence
> > > > > > > > the
> > > > > > > > > > > > consumer groups for those topics are pre-defined and
> > > > roughly
> > > > > > > > static.
> > > > > > > > > In
> > > > > > > > > > > > this case I think it makes sense to allow such
> > > > consumer-drive
> > > > > > log
> > > > > > > > > > > retention
> > > > > > > > > > > > features.
> > > > > > > > > > > >
> > > > > > > > > > > > 2. In this case, my question is then whether this
> > > > bookkeeping
> > > > > > of
> > > > > > > > > > > > min-committed-offsets should be done at the brokers
> > side
> > > or
> > > > > it
> > > > > > > > should
> > > > > > > > > > be
> > > > > > > > > > > on
> > > > > > > > > > > > the app side. My gut feeling is that it could be
> better
> > > > > > bookkept
> > > > > > > on
> > > > > > > > > the
> > > > > > > > > > > app
> > > > > > > > > > > > (i.e. client) side which has the full information of
> > the
> > > > > > > > "registered
> > > > > > > > > > > > consumer groups" for certain topics, and then knows
> the
> > > > > > > > > > > > min-committed-offsets. And a slightly-modified KIP-47
> > > > > mentioned
> > > > > > > by
> > > > > > > > > Dong
> > > > > > > > > > > > could a better fit, where a) app side bookkeep the
> > > > > > > consumer-driven
> > > > > > > > > min
> > > > > > > > > > > > offset based on their committed offsets, by either
> > > talking
> > > > to
> > > > > > the
> > > > > > > > > > > consumer
> > > > > > > > > > > > clients directly or query broker for the committed
> > > offsets
> > > > of
> > > > > > > those
> > > > > > > > > > > > registered consumer groups, and then b) write
> > > > > > > > > > > > *log.retention.min.offset* periodically
> > > > > > > > > > > > to broker to let it delete old segments before that
> > > offset
> > > > > > (NOTE
> > > > > > > > that
> > > > > > > > > > the
> > > > > > > > > > > > semantics is exactly the same as to KIP-47, while the
> > > only
> > > > > > > > difference
> > > > > > > > > > is
> > > > > > > > > > > > that we use offset instead of timestamp to indicate,
> > > which
> > > > > can
> > > > > > be
> > > > > > > > > honor
> > > > > > > > > > > by
> > > > > > > > > > > > the same implementation of KIP-47 on broker side).
> > > > > > > > > > > >
> > > > > > > > > > > > My arguments for letting the app side to bookkeep
> such
> > > > > > > min-offsets
> > > > > > > > > and
> > > > > > > > > > > only
> > > > > > > > > > > > let brokers to take requests to delete segments
> > > accordingly
> > > > > are
> > > > > > > 1)
> > > > > > > > > > > keeping
> > > > > > > > > > > > the broker simple without any querying each other
> about
> > > > such
> > > > > > > > offsets
> > > > > > > > > > and
> > > > > > > > > > > > does the min() calculation, rather only keeping /
> > > deleting
> > > > > > > messages
> > > > > > > > > > from
> > > > > > > > > > > > client admin requests, and 2) allowing more
> generalized
> > > > > > > > client-driven
> > > > > > > > > > log
> > > > > > > > > > > > retention policies with KIP-47 (i.e. broker is
> > brainless
> > > > and
> > > > > > only
> > > > > > > > > take
> > > > > > > > > > > > requests while client-app can apply any customized
> > logic
> > > to
> > > > > > > > determine
> > > > > > > > > > the
> > > > > > > > > > > > config values of *og.retention.min.offset or
> > > > > > > > > > > **og.retention.min.timestamp*
> > > > > > > > > > > > that
> > > > > > > > > > > > they send to the brokers).
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > Guozhang
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > On Sat, Oct 22, 2016 at 5:46 PM, Becket Qin <
> > > > > > > becket....@gmail.com>
> > > > > > > > > > > wrote:
> > > > > > > > > > > >
> > > > > > > > > > > > > Hi David,
> > > > > > > > > > > > >
> > > > > > > > > > > > > > 1. What scenario is used to this configuration?
> > > > > > > > > > > > >
> > > > > > > > > > > > > One scenario is stream processing pipeline. In a
> > stream
> > > > > > > > processing
> > > > > > > > > > DAG,
> > > > > > > > > > > > > there will be a bunch of intermediate result, we
> only
> > > > care
> > > > > > > about
> > > > > > > > > the
> > > > > > > > > > > > > consumer group that is in the downstream of the
> DAG,
> > > but
> > > > > not
> > > > > > > > other
> > > > > > > > > > > > groups.
> > > > > > > > > > > > > Ideally we want to delete the log of the
> intermediate
> > > > > topics
> > > > > > > > right
> > > > > > > > > > > after
> > > > > > > > > > > > > all the downstream processing jobs has successfully
> > > > > processed
> > > > > > > the
> > > > > > > > > > > > messages.
> > > > > > > > > > > > > In that case, we only care about the downstream
> > > > processing
> > > > > > > jobs,
> > > > > > > > > but
> > > > > > > > > > > not
> > > > > > > > > > > > > other groups. That means if a down stream job did
> not
> > > > > commit
> > > > > > > > offset
> > > > > > > > > > for
> > > > > > > > > > > > > some reason, we want to wait for that job. Without
> > the
> > > > > > > predefined
> > > > > > > > > > > > > interested group, it is hard to achieve this.
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > > 2. Yes, the configuration should be at topic level
> > and
> > > > set
> > > > > > > > > > dynamically.
> > > > > > > > > > > > >
> > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > >
> > > > > > > > > > > > > Jiangjie (Becket) Qin
> > > > > > > > > > > > >
> > > > > > > > > > > > > On Fri, Oct 21, 2016 at 7:40 AM, 东方甲乙 <
> > > 254479...@qq.com>
> > > > > > > wrote:
> > > > > > > > > > > > >
> > > > > > > > > > > > > > Hi Mayuresh,
> > > > > > > > > > > > > >     Thanks for the reply:
> > > > > > > > > > > > > > 1.  In the log retention check schedule, the
> broker
> > > > first
> > > > > > > find
> > > > > > > > > the
> > > > > > > > > > > all
> > > > > > > > > > > > > the
> > > > > > > > > > > > > > consumed group which are consuming this topic,
> and
> > > > query
> > > > > > the
> > > > > > > > > commit
> > > > > > > > > > > > > offset
> > > > > > > > > > > > > > of this consumed group for the topic
> > > > > > > > > > > > > > using the OffsetFetch API. And the min commit
> > offset
> > > is
> > > > > the
> > > > > > > > > minimal
> > > > > > > > > > > > > commit
> > > > > > > > > > > > > > offset between these commit offsets.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > 2.  If the console consumer reading and commit,
> its
> > > > > commit
> > > > > > > > offset
> > > > > > > > > > > will
> > > > > > > > > > > > be
> > > > > > > > > > > > > > used to calculate the min commit offset for this
> > > topic.
> > > > > > > > > > > > > > We can avoid the random consumer using the method
> > > > Becket
> > > > > > > > > suggested.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > 3. It will not delete the log immediately, the
> log
> > > will
> > > > > > stay
> > > > > > > > some
> > > > > > > > > > > time
> > > > > > > > > > > > (
> > > > > > > > > > > > > > retention.commitoffset.ms), and after that we
> only
> > > > > delete
> > > > > > > > > > > > > > the log segments whose offsets are less than the
> > min
> > > > > commit
> > > > > > > > > offset.
> > > > > > > > > > > So
> > > > > > > > > > > > > > the user can rewind its offset in the
> > > log.retention.ms
> > > > .
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > David
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > ------------------ 原始邮件 ------------------
> > > > > > > > > > > > > > 发件人: "Mayuresh Gharat";<gharatmayuresh15@
> gmail.com
> > >;
> > > > > > > > > > > > > > 发送时间: 2016年10月19日(星期三) 上午10:25
> > > > > > > > > > > > > > 收件人: "dev"<dev@kafka.apache.org>;
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > 主题: Re: [DISCUSS] KIP-68 Add a consumed log
> > retention
> > > > > > before
> > > > > > > > log
> > > > > > > > > > > > > retention
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Hi David,
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Thanks for the KIP.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > I had some questions/suggestions :
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > It would be great if you can explain with an
> > example
> > > > > about
> > > > > > > how
> > > > > > > > > the
> > > > > > > > > > > min
> > > > > > > > > > > > > > offset for all the consumers will be calculated,
> in
> > > the
> > > > > > KIP.
> > > > > > > > > > > > > > What I meant was, it would be great to understand
> > > with
> > > > a
> > > > > > > pseudo
> > > > > > > > > > > > > > code/workflow if possible, how each broker knows
> > all
> > > > the
> > > > > > > > > consumers
> > > > > > > > > > > for
> > > > > > > > > > > > > the
> > > > > > > > > > > > > > given topic-partition and how the min is
> > calculated.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Also it would be good to understand what happens
> if
> > > we
> > > > > > start
> > > > > > > a
> > > > > > > > > > > console
> > > > > > > > > > > > > > consumer which would actually start reading from
> > the
> > > > > > > beginning
> > > > > > > > > > offset
> > > > > > > > > > > > and
> > > > > > > > > > > > > > commit and crash immediately. How will the
> segments
> > > get
> > > > > > > > deleted?
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Will it delete all the log segments if all the
> > > > consumers
> > > > > > have
> > > > > > > > > read
> > > > > > > > > > > till
> > > > > > > > > > > > > > latest? If Yes, would we be able to handle a
> > scenario
> > > > > were
> > > > > > we
> > > > > > > > say
> > > > > > > > > > > that
> > > > > > > > > > > > > user
> > > > > > > > > > > > > > can rewind its offset to reprocess the data since
> > > > > > > > > log.retention.ms
> > > > > > > > > > > > might
> > > > > > > > > > > > > > not has reached.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Mayuresh
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > On Mon, Oct 17, 2016 at 12:27 AM, Becket Qin <
> > > > > > > > > becket....@gmail.com
> > > > > > > > > > >
> > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > > Hey David,
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > Thanks for replies to the questions.
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > I think one major thing still not clear at this
> > > point
> > > > > is
> > > > > > > that
> > > > > > > > > > > whether
> > > > > > > > > > > > > the
> > > > > > > > > > > > > > > brokers will only apply the consumed log
> > retention
> > > > to a
> > > > > > > > > specific
> > > > > > > > > > > set
> > > > > > > > > > > > of
> > > > > > > > > > > > > > > interested consumer groups, or it does not have
> > > such
> > > > a
> > > > > > set
> > > > > > > of
> > > > > > > > > > > > consumer
> > > > > > > > > > > > > > > groups.
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > For example, for topic T, assume we know that
> > there
> > > > > will
> > > > > > be
> > > > > > > > two
> > > > > > > > > > > > > > downstream
> > > > > > > > > > > > > > > consumer groups CG1 and CG2 consuming data from
> > > topic
> > > > > T.
> > > > > > > Will
> > > > > > > > > we
> > > > > > > > > > > add
> > > > > > > > > > > > a
> > > > > > > > > > > > > > > topic configurations such as
> > > > > > > > > > > > > > > "log.retention.commitoffset.
> > > > interested.groups=CG1,CG2"
> > > > > > to
> > > > > > > > > topic
> > > > > > > > > > T
> > > > > > > > > > > so
> > > > > > > > > > > > > > that
> > > > > > > > > > > > > > > the brokers only care about CG1 and CG2. The
> > > > committed
> > > > > > > > offsets
> > > > > > > > > of
> > > > > > > > > > > > other
> > > > > > > > > > > > > > > groups are not interested and won't have any
> > impact
> > > > on
> > > > > > the
> > > > > > > > > > > committed
> > > > > > > > > > > > > > offset
> > > > > > > > > > > > > > > based log retention.
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > It seems the current proposal does not have an
> > > > > > "interested
> > > > > > > > > > consumer
> > > > > > > > > > > > > group
> > > > > > > > > > > > > > > set" configuration, so that means any random
> > > consumer
> > > > > > group
> > > > > > > > may
> > > > > > > > > > > > affect
> > > > > > > > > > > > > > the
> > > > > > > > > > > > > > > committed offset based log retention.
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > I think the committed offset based log
> retention
> > > > seems
> > > > > > more
> > > > > > > > > > useful
> > > > > > > > > > > in
> > > > > > > > > > > > > > cases
> > > > > > > > > > > > > > > where we already know which consumer groups
> will
> > be
> > > > > > > consuming
> > > > > > > > > > from
> > > > > > > > > > > > this
> > > > > > > > > > > > > > > topic, so we will only wait for those consumer
> > > groups
> > > > > but
> > > > > > > > > ignore
> > > > > > > > > > > the
> > > > > > > > > > > > > > > others. If a group will be consumed by many
> > unknown
> > > > or
> > > > > > > > > > > unpredictable
> > > > > > > > > > > > > > > consumer groups, it seems the existing time
> based
> > > log
> > > > > > > > retention
> > > > > > > > > > is
> > > > > > > > > > > > much
> > > > > > > > > > > > > > > simple and clear enough. So I would argue we
> > don't
> > > > need
> > > > > > to
> > > > > > > > > > address
> > > > > > > > > > > > the
> > > > > > > > > > > > > > case
> > > > > > > > > > > > > > > that some groups may come later in the
> committed
> > > > offset
> > > > > > > based
> > > > > > > > > > > > > retention.
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > That said, there may still be value to keep the
> > > data
> > > > > for
> > > > > > > some
> > > > > > > > > > time
> > > > > > > > > > > > even
> > > > > > > > > > > > > > > after all the interested consumer groups have
> > > > consumed
> > > > > > the
> > > > > > > > > > > messages.
> > > > > > > > > > > > > For
> > > > > > > > > > > > > > > example, in a pipelined stream processing DAG,
> we
> > > may
> > > > > > want
> > > > > > > to
> > > > > > > > > > keep
> > > > > > > > > > > > the
> > > > > > > > > > > > > > data
> > > > > > > > > > > > > > > of an intermediate topic for some time in case
> > the
> > > > job
> > > > > > > fails.
> > > > > > > > > So
> > > > > > > > > > we
> > > > > > > > > > > > can
> > > > > > > > > > > > > > > resume from a previously succeeded stage
> instead
> > of
> > > > > > restart
> > > > > > > > the
> > > > > > > > > > > > entire
> > > > > > > > > > > > > > > pipeline. Or we can use the intermediate topic
> > for
> > > > some
> > > > > > > > > debugging
> > > > > > > > > > > > work.
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > Jiangjie (Becket) Qin
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > On Sun, Oct 16, 2016 at 2:15 AM, 东方甲乙 <
> > > > > 254479...@qq.com>
> > > > > > > > > wrote:
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Hi Dong,
> > > > > > > > > > > > > > > >     The KIP is used to solve both these 2
> > cases,
> > > we
> > > > > > > > specify a
> > > > > > > > > > > small
> > > > > > > > > > > > > > > > consumed log retention time to deleted the
> > > consumed
> > > > > > data
> > > > > > > > and
> > > > > > > > > > > avoid
> > > > > > > > > > > > > > losing
> > > > > > > > > > > > > > > > un-consumed data.
> > > > > > > > > > > > > > > > And the specify a large force log retention
> > time
> > > > used
> > > > > > as
> > > > > > > > > higher
> > > > > > > > > > > > bound
> > > > > > > > > > > > > > for
> > > > > > > > > > > > > > > > the data.  I will update the KIP for this
> info.
> > > > > > > > > > > > > > > >     Another solution I think may be ok is to
> > > > support
> > > > > an
> > > > > > > API
> > > > > > > > > to
> > > > > > > > > > > > delete
> > > > > > > > > > > > > > the
> > > > > > > > > > > > > > > > inactive group?  If the group is in inactive,
> > but
> > > > > it's
> > > > > > > > commit
> > > > > > > > > > > > offset
> > > > > > > > > > > > > is
> > > > > > > > > > > > > > > > also in the __commit_offsets topic and
> > > > > > > > > > > > > > > > stay in the offset cache,  we can delete it
> via
> > > > this
> > > > > > API.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > > > David
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > ------------------ 原始邮件 ------------------
> > > > > > > > > > > > > > > > 发件人: "Dong Lin";<lindon...@gmail.com>;
> > > > > > > > > > > > > > > > 发送时间: 2016年10月14日(星期五) 凌晨5:01
> > > > > > > > > > > > > > > > 收件人: "dev"<dev@kafka.apache.org>;
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > 主题: Re: [DISCUSS] KIP-68 Add a consumed log
> > > > retention
> > > > > > > > before
> > > > > > > > > > log
> > > > > > > > > > > > > > > retention
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Hi David,
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > As explained in the motivation section of the
> > > KIP,
> > > > > the
> > > > > > > > > problem
> > > > > > > > > > is
> > > > > > > > > > > > > that
> > > > > > > > > > > > > > if
> > > > > > > > > > > > > > > > log retention is too small, we may lose data;
> > and
> > > > if
> > > > > > log
> > > > > > > > > > > retention
> > > > > > > > > > > > is
> > > > > > > > > > > > > > too
> > > > > > > > > > > > > > > > large, then we waste disk space. Therefore,
> we
> > > need
> > > > > to
> > > > > > > > solve
> > > > > > > > > > one
> > > > > > > > > > > if
> > > > > > > > > > > > > the
> > > > > > > > > > > > > > > two
> > > > > > > > > > > > > > > > problems -- allow data to be persisted longer
> > for
> > > > > > > > consumption
> > > > > > > > > > if
> > > > > > > > > > > > log
> > > > > > > > > > > > > > > > retention is set too small, or allow data to
> be
> > > > > expired
> > > > > > > > > earlier
> > > > > > > > > > > if
> > > > > > > > > > > > > log
> > > > > > > > > > > > > > > > retention is too large. I think the KIP
> > probably
> > > > > needs
> > > > > > to
> > > > > > > > > make
> > > > > > > > > > > this
> > > > > > > > > > > > > > clear
> > > > > > > > > > > > > > > > and explain which one is rejected and why.
> Note
> > > > that
> > > > > > the
> > > > > > > > > choice
> > > > > > > > > > > of
> > > > > > > > > > > > > the
> > > > > > > > > > > > > > > two
> > > > > > > > > > > > > > > > affects the solution -- if we want to address
> > the
> > > > > first
> > > > > > > > > problem
> > > > > > > > > > > > then
> > > > > > > > > > > > > > > > log.retention.ms should be used as lower
> bound
> > > on
> > > > > the
> > > > > > > > actual
> > > > > > > > > > > > > retention
> > > > > > > > > > > > > > > > time, and if we want to address the second
> > > problem
> > > > > then
> > > > > > > the
> > > > > > > > > > > > > > > > log.retention.ms
> > > > > > > > > > > > > > > > should be used as higher bound on the actual
> > > > > retention
> > > > > > > > time.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > In both cases, we probably need to figure
> out a
> > > way
> > > > > to
> > > > > > > > > > determine
> > > > > > > > > > > > > > "active
> > > > > > > > > > > > > > > > consumer group". Maybe we can compare the
> > > > > > > > > > time-since-last-commit
> > > > > > > > > > > > > > against
> > > > > > > > > > > > > > > a
> > > > > > > > > > > > > > > > threshold to determine this. In addition, the
> > > > > threshold
> > > > > > > can
> > > > > > > > > be
> > > > > > > > > > > > > > overridden
> > > > > > > > > > > > > > > > either per-topic or per-groupId. If we go
> along
> > > > this
> > > > > > > route,
> > > > > > > > > the
> > > > > > > > > > > > > > rejected
> > > > > > > > > > > > > > > > solution (per-topic vs. per-groupId) should
> > > > probably
> > > > > be
> > > > > > > > > > explained
> > > > > > > > > > > > in
> > > > > > > > > > > > > > the
> > > > > > > > > > > > > > > > KIP.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > > > Dong
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > On Thu, Oct 13, 2016 at 10:23 AM, Dong Lin <
> > > > > > > > > > lindon...@gmail.com>
> > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > Hi David,
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > Thanks for your explanation. There still
> > seems
> > > to
> > > > > be
> > > > > > > > issue
> > > > > > > > > > with
> > > > > > > > > > > > > this
> > > > > > > > > > > > > > > > > solution. Please see my comment inline.
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > On Thu, Oct 13, 2016 at 8:46 AM, 东方甲乙 <
> > > > > > > 254479...@qq.com>
> > > > > > > > > > > wrote:
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > >> Hi Dong,
> > > > > > > > > > > > > > > > >>     Sorry for the delay, here are the
> > > comments:
> > > > > > > > > > > > > > > > >> 1.I think we should distinguish these two
> > > cases:
> > > > > > > > > > > > > > > > >> (1) group has no member, but has commit
> > > offset :
> > > > > In
> > > > > > > > this
> > > > > > > > > > case
> > > > > > > > > > > > we
> > > > > > > > > > > > > > > should
> > > > > > > > > > > > > > > > >> consider its commit offset
> > > > > > > > > > > > > > > > >> (2) group has no member, no commit offset:
> > > Skip
> > > > > > this
> > > > > > > > > group
> > > > > > > > > > > > > > > > >> Is it ok?
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >> ListGroup API can list the groups,  but
> this
> > > API
> > > > > > only
> > > > > > > > show
> > > > > > > > > > the
> > > > > > > > > > > > > > Online
> > > > > > > > > > > > > > > > >> Group, so we should enhance the listGroup
> > API
> > > to
> > > > > > list
> > > > > > > > > those
> > > > > > > > > > > > groups
> > > > > > > > > > > > > > in
> > > > > > > > > > > > > > > > the
> > > > > > > > > > > > > > > > >> case (1)
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >> Say some user starts a consumer to consume
> > > > topic A
> > > > > > > with
> > > > > > > > > > > > > > > > > enable.auto.commit = true. Later they
> change
> > > the
> > > > > > group
> > > > > > > > name
> > > > > > > > > > in
> > > > > > > > > > > > the
> > > > > > > > > > > > > > > > config.
> > > > > > > > > > > > > > > > > Then the proposed solution will never
> execute
> > > > > > consumed
> > > > > > > > log
> > > > > > > > > > > > > retention
> > > > > > > > > > > > > > > for
> > > > > > > > > > > > > > > > > the topic A, right? I think group name
> change
> > > is
> > > > > > pretty
> > > > > > > > > > common
> > > > > > > > > > > > and
> > > > > > > > > > > > > we
> > > > > > > > > > > > > > > > > should take care of this issue. One
> possible
> > > > > solution
> > > > > > > is
> > > > > > > > to
> > > > > > > > > > > add a
> > > > > > > > > > > > > > > config
> > > > > > > > > > > > > > > > to
> > > > > > > > > > > > > > > > > specify the maximum time since last offset
> > > commit
> > > > > > > before
> > > > > > > > we
> > > > > > > > > > > > > consider
> > > > > > > > > > > > > > a
> > > > > > > > > > > > > > > > > group is inactive.
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >> 2. Because every consumer group may appear
> > in
> > > > > > > different
> > > > > > > > > > time,
> > > > > > > > > > > > say,
> > > > > > > > > > > > > > > group
> > > > > > > > > > > > > > > > >> 1 start to consume in day 1, group 2 start
> > to
> > > > > > consume
> > > > > > > in
> > > > > > > > > day
> > > > > > > > > > > 2.
> > > > > > > > > > > > > If
> > > > > > > > > > > > > > we
> > > > > > > > > > > > > > > > >> delete the log segment right away,
> > > > > > > > > > > > > > > > >> group 2 can not consume these message.  So
> > we
> > > > hope
> > > > > > the
> > > > > > > > > > > messages
> > > > > > > > > > > > > can
> > > > > > > > > > > > > > > hold
> > > > > > > > > > > > > > > > >> for a specified time.  I think many
> > use-cases
> > > > will
> > > > > > > need
> > > > > > > > > > there
> > > > > > > > > > > > > > configs,
> > > > > > > > > > > > > > > > if
> > > > > > > > > > > > > > > > >> there are many consumer groups.
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > > If we want to take care of group 2, can we
> > > simply
> > > > > > > disable
> > > > > > > > > > > > consumed
> > > > > > > > > > > > > > log
> > > > > > > > > > > > > > > > > retention for the topic and set log
> retention
> > > to
> > > > 1
> > > > > > day?
> > > > > > > > Can
> > > > > > > > > > you
> > > > > > > > > > > > > > explain
> > > > > > > > > > > > > > > > the
> > > > > > > > > > > > > > > > > benefit of enabling consumed log retention
> > and
> > > > set
> > > > > > > > consumed
> > > > > > > > > > log
> > > > > > > > > > > > > > > retention
> > > > > > > > > > > > > > > > > to 1 day?
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > Currently the flow graph in the KIP
> suggests
> > > that
> > > > > we
> > > > > > > > delete
> > > > > > > > > > > data
> > > > > > > > > > > > > iff
> > > > > > > > > > > > > > > > > (consumed log retention is triggered OR
> > forced
> > > > log
> > > > > > > > > retention
> > > > > > > > > > is
> > > > > > > > > > > > > > > > triggered).
> > > > > > > > > > > > > > > > > And alternative solution is to delete data
> > iff
> > > (
> > > > > > > > (consumed
> > > > > > > > > > log
> > > > > > > > > > > > > > > retention
> > > > > > > > > > > > > > > > is
> > > > > > > > > > > > > > > > > disabled OR consumed log retention is
> > > triggered)
> > > > > AND
> > > > > > > > forced
> > > > > > > > > > log
> > > > > > > > > > > > > > > retention
> > > > > > > > > > > > > > > > > is triggered). I would argue that the 2nd
> > > scheme
> > > > is
> > > > > > > > better.
> > > > > > > > > > Say
> > > > > > > > > > > > the
> > > > > > > > > > > > > > > > > consumed log retention is enabled. The 1st
> > > scheme
> > > > > > > > basically
> > > > > > > > > > > > > > interprets
> > > > > > > > > > > > > > > > > forced log retention as the upper bound of
> > the
> > > > time
> > > > > > the
> > > > > > > > > data
> > > > > > > > > > > can
> > > > > > > > > > > > > stay
> > > > > > > > > > > > > > > in
> > > > > > > > > > > > > > > > > Kafka. The 2nd scheme interprets forced log
> > > > > retention
> > > > > > > as
> > > > > > > > > the
> > > > > > > > > > > > lower
> > > > > > > > > > > > > > > bound
> > > > > > > > > > > > > > > > of
> > > > > > > > > > > > > > > > > the time the data can stay in Kafka, which
> is
> > > > more
> > > > > > > > > consistent
> > > > > > > > > > > > with
> > > > > > > > > > > > > > the
> > > > > > > > > > > > > > > > > purpose of having this forced log retention
> > (to
> > > > > save
> > > > > > > disk
> > > > > > > > > > > space).
> > > > > > > > > > > > > And
> > > > > > > > > > > > > > > if
> > > > > > > > > > > > > > > > we
> > > > > > > > > > > > > > > > > adopt the 2nd solution, the use-case you
> > > > suggested
> > > > > > can
> > > > > > > be
> > > > > > > > > > > easily
> > > > > > > > > > > > > > > > addressed
> > > > > > > > > > > > > > > > > by setting forced log retention to 1 day
> and
> > > > enable
> > > > > > > > > consumed
> > > > > > > > > > > log
> > > > > > > > > > > > > > > > retention.
> > > > > > > > > > > > > > > > > What do you think?
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >> Thanks,
> > > > > > > > > > > > > > > > >> David
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >> ------------------ 原始邮件 ------------------
> > > > > > > > > > > > > > > > >> 发件人: "Dong Lin";<lindon...@gmail.com>;
> > > > > > > > > > > > > > > > >> 发送时间: 2016年10月10日(星期一) 下午4:05
> > > > > > > > > > > > > > > > >> 收件人: "dev"<dev@kafka.apache.org>;
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >> 主题: Re: [DISCUSS] KIP-68 Add a consumed
> log
> > > > > > retention
> > > > > > > > > before
> > > > > > > > > > > log
> > > > > > > > > > > > > > > > retention
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >> Hey David,
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >> Thanks for reply. Please see comment
> inline.
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >> On Mon, Oct 10, 2016 at 12:40 AM, Pengwei
> > (L)
> > > <
> > > > > > > > > > > > > > pengwei...@huawei.com>
> > > > > > > > > > > > > > > > >> wrote:
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >> > Hi Dong
> > > > > > > > > > > > > > > > >> >    Thanks for the questions:
> > > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > > >> > 1.  Now we don't distinguish inactive or
> > > > active
> > > > > > > > groups.
> > > > > > > > > > > > Because
> > > > > > > > > > > > > in
> > > > > > > > > > > > > > > > some
> > > > > > > > > > > > > > > > >> > case maybe inactive group will become
> > active
> > > > > > again,
> > > > > > > > and
> > > > > > > > > > > using
> > > > > > > > > > > > > the
> > > > > > > > > > > > > > > > >> previous
> > > > > > > > > > > > > > > > >> > commit offset.
> > > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > > >> > So we will not delete the log segment in
> > the
> > > > > > > consumer
> > > > > > > > > > > > retention
> > > > > > > > > > > > > if
> > > > > > > > > > > > > > > > there
> > > > > > > > > > > > > > > > >> > are some groups consume but not commit,
> > but
> > > > the
> > > > > > log
> > > > > > > > > > segment
> > > > > > > > > > > > can
> > > > > > > > > > > > > be
> > > > > > > > > > > > > > > > >> delete by
> > > > > > > > > > > > > > > > >> >      the force retention.
> > > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >> So in the example I provided, the consumed
> > log
> > > > > > > retention
> > > > > > > > > > will
> > > > > > > > > > > be
> > > > > > > > > > > > > > > > >> effectively disabled, right? This seems to
> > be
> > > a
> > > > > real
> > > > > > > > > problem
> > > > > > > > > > > in
> > > > > > > > > > > > > > > > operation
> > > > > > > > > > > > > > > > >> -- we don't want log retention to be
> > > > > > un-intentionally
> > > > > > > > > > disabled
> > > > > > > > > > > > > > simply
> > > > > > > > > > > > > > > > >> because someone start a tool to consume
> from
> > > > that
> > > > > > > topic.
> > > > > > > > > > > Either
> > > > > > > > > > > > > this
> > > > > > > > > > > > > > > KIP
> > > > > > > > > > > > > > > > >> should provide a way to handle this, or
> > there
> > > > > should
> > > > > > > be
> > > > > > > > a
> > > > > > > > > > way
> > > > > > > > > > > > for
> > > > > > > > > > > > > > > > operator
> > > > > > > > > > > > > > > > >> to be aware of such case and be able to
> > > > re-eanble
> > > > > > > > consumed
> > > > > > > > > > log
> > > > > > > > > > > > > > > retention
> > > > > > > > > > > > > > > > >> for the topic. What do you think?
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >> > 2.  These configs are used to determine
> > the
> > > > out
> > > > > of
> > > > > > > > date
> > > > > > > > > > time
> > > > > > > > > > > > of
> > > > > > > > > > > > > > the
> > > > > > > > > > > > > > > > >> > consumed retention, like the parameters
> of
> > > the
> > > > > > force
> > > > > > > > > > > retention
> > > > > > > > > > > > > > > > >> > (log.retention.hours,
> > log.retention.minutes,
> > > > > > > > > > > log.retention.ms
> > > > > > > > > > > > ).
> > > > > > > > > > > > > > For
> > > > > > > > > > > > > > > > >> > example, users want the save the log
> for 3
> > > > days,
> > > > > > > > after 3
> > > > > > > > > > > days,
> > > > > > > > > > > > > > kafka
> > > > > > > > > > > > > > > > >> will
> > > > > > > > > > > > > > > > >> > delete the log segments which are
> > > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > > >> > consumed by all the consumer group.  The
> > log
> > > > > > > retention
> > > > > > > > > > > thread
> > > > > > > > > > > > > need
> > > > > > > > > > > > > > > > these
> > > > > > > > > > > > > > > > >> > parameters.
> > > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > > >> > It makes sense to have configs such as
> > > > > > > > log.retention.ms
> > > > > > > > > > --
> > > > > > > > > > > it
> > > > > > > > > > > > > is
> > > > > > > > > > > > > > > used
> > > > > > > > > > > > > > > > >> to
> > > > > > > > > > > > > > > > >> make data available for up to a configured
> > > > amount
> > > > > of
> > > > > > > > time
> > > > > > > > > > > before
> > > > > > > > > > > > > it
> > > > > > > > > > > > > > is
> > > > > > > > > > > > > > > > >> deleted. My question is what is the
> use-case
> > > for
> > > > > > > making
> > > > > > > > > log
> > > > > > > > > > > > > > available
> > > > > > > > > > > > > > > > for
> > > > > > > > > > > > > > > > >> another e.g. 3 days after it has been
> > consumed
> > > > by
> > > > > > all
> > > > > > > > > > consumer
> > > > > > > > > > > > > > groups.
> > > > > > > > > > > > > > > > The
> > > > > > > > > > > > > > > > >> purpose of this KIP is to allow log to be
> > > > deleted
> > > > > > > right
> > > > > > > > as
> > > > > > > > > > > long
> > > > > > > > > > > > as
> > > > > > > > > > > > > > all
> > > > > > > > > > > > > > > > >> interested consumer groups have consumed
> it.
> > > Can
> > > > > you
> > > > > > > > > > provide a
> > > > > > > > > > > > > > > use-case
> > > > > > > > > > > > > > > > >> for
> > > > > > > > > > > > > > > > >> keeping log available for longer time
> after
> > it
> > > > has
> > > > > > > been
> > > > > > > > > > > consumed
> > > > > > > > > > > > > by
> > > > > > > > > > > > > > > all
> > > > > > > > > > > > > > > > >> groups?
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > > >> > Thanks,
> > > > > > > > > > > > > > > > >> > David
> > > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > > >> > > Hey David,
> > > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > > >> > > Thanks for the KIP. Can you help with
> > the
> > > > > > > following
> > > > > > > > > two
> > > > > > > > > > > > > > questions:
> > > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > > >> > > 1) If someone start a consumer (e.g.
> > > > > > > > > > > kafka-console-consumer)
> > > > > > > > > > > > > to
> > > > > > > > > > > > > > > > >> consume a
> > > > > > > > > > > > > > > > >> > > topic for debug/validation purpose, a
> > > > randome
> > > > > > > > consumer
> > > > > > > > > > > group
> > > > > > > > > > > > > may
> > > > > > > > > > > > > > > be
> > > > > > > > > > > > > > > > >> > created
> > > > > > > > > > > > > > > > >> > > and offset may be committed for this
> > > > consumer
> > > > > > > group.
> > > > > > > > > If
> > > > > > > > > > no
> > > > > > > > > > > > > > offset
> > > > > > > > > > > > > > > > >> commit
> > > > > > > > > > > > > > > > >> > is
> > > > > > > > > > > > > > > > >> > > made for this consumer group in the
> > > future,
> > > > > will
> > > > > > > > this
> > > > > > > > > > > > > > effectively
> > > > > > > > > > > > > > > > >> > > disable consumed log retention for
> this
> > > > topic?
> > > > > > In
> > > > > > > > > other
> > > > > > > > > > > > words,
> > > > > > > > > > > > > > how
> > > > > > > > > > > > > > > > do
> > > > > > > > > > > > > > > > >> > this
> > > > > > > > > > > > > > > > >> > > KIP distinguish active consumer group
> > from
> > > > > > > inactive
> > > > > > > > > > ones?
> > > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > > >> > > 2) Why do we need new configs such as
> > > > > > > > > > > > > > > log.retention.commitoffset.hou
> > > > > > > > > > > > > > > > >> rs?
> > > > > > > > > > > > > > > > >> > Can
> > > > > > > > > > > > > > > > >> > >we simply delete log segments if
> consumed
> > > log
> > > > > > > > retention
> > > > > > > > > > is
> > > > > > > > > > > > > > enabled
> > > > > > > > > > > > > > > > for
> > > > > > > > > > > > > > > > >> > this
> > > > > > > > > > > > > > > > >> > > topic and all consumer groups have
> > > consumed
> > > > > > > messages
> > > > > > > > > in
> > > > > > > > > > > the
> > > > > > > > > > > > > log
> > > > > > > > > > > > > > > > >> segment?
> > > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > > >> > > Thanks,
> > > > > > > > > > > > > > > > >> > > Dong
> > > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > > >> > >On Sat, Oct 8, 2016 at 2:15 AM, Pengwei
> > > (L) <
> > > > > > > > > > > > > > pengwei...@huawei.com
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > >> > wrote:
> > > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > > >> > > > Hi Becket,
> > > > > > > > > > > > > > > > >> > > >
> > > > > > > > > > > > > > > > >> > > >   Thanks for the feedback:
> > > > > > > > > > > > > > > > >> > > > 1.  We use the simple consumer api
> to
> > > > query
> > > > > > the
> > > > > > > > > commit
> > > > > > > > > > > > > offset,
> > > > > > > > > > > > > > > so
> > > > > > > > > > > > > > > > we
> > > > > > > > > > > > > > > > >> > don't
> > > > > > > > > > > > > > > > >> > > > need to specify the consumer group.
> > > > > > > > > > > > > > > > >> > > > 2.  Every broker using the simple
> > > consumer
> > > > > > > > > > > > > api(OffsetFetchKey)
> > > > > > > > > > > > > > > to
> > > > > > > > > > > > > > > > >> query
> > > > > > > > > > > > > > > > >> > > > the commit offset in the log
> retention
> > > > > > process.
> > > > > > > > The
> > > > > > > > > > > > client
> > > > > > > > > > > > > > can
> > > > > > > > > > > > > > > > >> commit
> > > > > > > > > > > > > > > > >> > > > offset or not.
> > > > > > > > > > > > > > > > >> > > > 3.  It does not need to distinguish
> > the
> > > > > > follower
> > > > > > > > > > brokers
> > > > > > > > > > > > or
> > > > > > > > > > > > > > > leader
> > > > > > > > > > > > > > > > >> > > > brokers,  every brokers can query.
> > > > > > > > > > > > > > > > >> > > > 4.  We don't need to change the
> > > protocols,
> > > > > we
> > > > > > > > mainly
> > > > > > > > > > > > change
> > > > > > > > > > > > > > the
> > > > > > > > > > > > > > > > log
> > > > > > > > > > > > > > > > >> > > > retention process in the log
> manager.
> > > > > > > > > > > > > > > > >> > > >
> > > > > > > > > > > > > > > > >> > > >   One question is the query min
> offset
> > > > need
> > > > > > > > > > > O(partitions *
> > > > > > > > > > > > > > > groups)
> > > > > > > > > > > > > > > > >> time
> > > > > > > > > > > > > > > > >> > > > complexity, another alternative is
> to
> > > > build
> > > > > an
> > > > > > > > > > internal
> > > > > > > > > > > > > topic
> > > > > > > > > > > > > > to
> > > > > > > > > > > > > > > > >> save
> > > > > > > > > > > > > > > > >> > every
> > > > > > > > > > > > > > > > >> > > > partition's min offset, it can
> reduce
> > to
> > > > > O(1).
> > > > > > > > > > > > > > > > >> > > > I will update the wiki for more
> > details.
> > > > > > > > > > > > > > > > >> > > >
> > > > > > > > > > > > > > > > >> > > > Thanks,
> > > > > > > > > > > > > > > > >> > > > David
> > > > > > > > > > > > > > > > >> > > >
> > > > > > > > > > > > > > > > >> > > >
> > > > > > > > > > > > > > > > >> > > > > Hi Pengwei,
> > > > > > > > > > > > > > > > >> > > > >
> > > > > > > > > > > > > > > > >> > > > > Thanks for the KIP proposal. It
> is a
> > > > very
> > > > > > > useful
> > > > > > > > > > KIP.
> > > > > > > > > > > > At a
> > > > > > > > > > > > > > > high
> > > > > > > > > > > > > > > > >> > level,
> > > > > > > > > > > > > > > > >> > > > the
> > > > > > > > > > > > > > > > >> > > > > proposed behavior looks reasonable
> > to
> > > > me.
> > > > > > > > > > > > > > > > >> > > > >
> > > > > > > > > > > > > > > > >> > > > > However, it seems that some of the
> > > > details
> > > > > > are
> > > > > > > > not
> > > > > > > > > > > > > mentioned
> > > > > > > > > > > > > > > in
> > > > > > > > > > > > > > > > >> the
> > > > > > > > > > > > > > > > >> > KIP.
> > > > > > > > > > > > > > > > >> > > > > For example,
> > > > > > > > > > > > > > > > >> > > > >
> > > > > > > > > > > > > > > > >> > > > > 1. How will the expected consumer
> > > group
> > > > be
> > > > > > > > > > specified?
> > > > > > > > > > > Is
> > > > > > > > > > > > > it
> > > > > > > > > > > > > > > > >> through
> > > > > > > > > > > > > > > > >> > a per
> > > > > > > > > > > > > > > > >> > > > > topic dynamic configuration?
> > > > > > > > > > > > > > > > >> > > > > 2. How do the brokers detect the
> > > > consumer
> > > > > > > > offsets?
> > > > > > > > > > Is
> > > > > > > > > > > it
> > > > > > > > > > > > > > > > required
> > > > > > > > > > > > > > > > >> > for a
> > > > > > > > > > > > > > > > >> > > > > consumer to commit offsets?
> > > > > > > > > > > > > > > > >> > > > > 3. How do all the replicas know
> the
> > > > about
> > > > > > the
> > > > > > > > > > > committed
> > > > > > > > > > > > > > > offsets?
> > > > > > > > > > > > > > > > >> > e.g. 1)
> > > > > > > > > > > > > > > > >> > > > > non-coordinator brokers which do
> not
> > > > have
> > > > > > the
> > > > > > > > > > > committed
> > > > > > > > > > > > > > > offsets,
> > > > > > > > > > > > > > > > >> 2)
> > > > > > > > > > > > > > > > >> > > > > follower brokers which do not have
> > > > > consumers
> > > > > > > > > > directly
> > > > > > > > > > > > > > > consuming
> > > > > > > > > > > > > > > > >> from
> > > > > > > > > > > > > > > > >> > it.
> > > > > > > > > > > > > > > > >> > > > > 4. Is there any other changes need
> > to
> > > be
> > > > > > made
> > > > > > > > > (e.g.
> > > > > > > > > > > new
> > > > > > > > > > > > > > > > >> protocols) in
> > > > > > > > > > > > > > > > >> > > > > addition to the configuration
> > change?
> > > > > > > > > > > > > > > > >> > > > >
> > > > > > > > > > > > > > > > >> > > > > It would be great if you can
> update
> > > the
> > > > > wiki
> > > > > > > to
> > > > > > > > > have
> > > > > > > > > > > > more
> > > > > > > > > > > > > > > > details.
> > > > > > > > > > > > > > > > >> > > > >
> > > > > > > > > > > > > > > > >> > > > > Thanks,
> > > > > > > > > > > > > > > > >> > > > >
> > > > > > > > > > > > > > > > >> > > > > Jiangjie (Becket) Qin
> > > > > > > > > > > > > > > > >> > > > >
> > > > > > > > > > > > > > > > >> > > > > On Wed, Sep 7, 2016 at 2:26 AM,
> > > Pengwei
> > > > > (L)
> > > > > > <
> > > > > > > > > > > > > > > > >> pengwei...@huawei.com>
> > > > > > > > > > > > > > > > >> > > > wrote:
> > > > > > > > > > > > > > > > >> > > > >
> > > > > > > > > > > > > > > > >> > > > > > Hi All,
> > > > > > > > > > > > > > > > >> > > > > >    I have made a KIP to enhance
> > the
> > > > log
> > > > > > > > > retention,
> > > > > > > > > > > > > details
> > > > > > > > > > > > > > > as
> > > > > > > > > > > > > > > > >> > follows:
> > > > > > > > > > > > > > > > >> > > > > > https://cwiki.apache.org/
> > > > > > > > > > > > confluence/display/KAFKA/KIP-
> > > > > > > > > > > > > > > > >> > > > > > 68+Add+a+consumed+log+
> > > > > > > > > > > retention+before+log+retention
> > > > > > > > > > > > > > > > >> > > > > >    Now start a discuss thread
> for
> > > this
> > > > > > KIP ,
> > > > > > > > > > looking
> > > > > > > > > > > > > > forward
> > > > > > > > > > > > > > > > to
> > > > > > > > > > > > > > > > >> the
> > > > > > > > > > > > > > > > >> > > > > > feedback.
> > > > > > > > > > > > > > > > >> > > > > >
> > > > > > > > > > > > > > > > >> > > > > > Thanks,
> > > > > > > > > > > > > > > > >> > > > > > David
> > > > > > > > > > > > > > > > >> > > > > >
> > > > > > > > > > > > > > > > >> > > > > >
> > > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > --
> > > > > > > > > > > > > > -Regards,
> > > > > > > > > > > > > > Mayuresh R. Gharat
> > > > > > > > > > > > > > (862) 250-7125
> > > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > --
> > > > > > > > > > > > -- Guozhang
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > > -- Guozhang
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > -- Guozhang
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > -Regards,
> > > > > Mayuresh R. Gharat
> > > > > (862) 250-7125
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > -- Guozhang
> > > >
> > >
> > >
> > >
> > > --
> > > -Regards,
> > > Mayuresh R. Gharat
> > > (862) 250-7125
> > >
> >
>



-- 
-- Guozhang

Reply via email to