Hi all,

I've updated KIP page, fixed / aligned document structure. Also I added some
very initial proposal for AdminClient so we have something to start from
while
discussing the KIP.

https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations

Thanks,
Andrii Biletskyi

On Wed, Feb 18, 2015 at 9:01 PM, Andrii Biletskyi <
andrii.bilets...@stealth.ly> wrote:

> Jay,
>
> Re error messages: you are right, in most cases client will have enough
> context to show descriptive error message. My concern is that we will have
> to
> add lots of new error codes for each possible error. Of course, we could
> reuse
> some of existing like UknownTopicOrPartitionCode, but we will also need to
> add smth like: TopicAlreadyExistsCode, TopicConfigInvalid (both for topic
> name and config, and probably user would like to know what exactly
> is wrong in his config), InvalidReplicaAssignment, InternalError (e.g.
> zookeeper failure) etc.
> And this is only for TopicCommand, we will also need to add similar stuff
> for
> ReassignPartitions, PreferredReplica. So we'll end up with a large list of
> error codes, used only in Admin protocol.
> Having said that, I agree my proposal is not consistent with other cases.
> Maybe we can find better solution or something in-between.
>
> Re Hangout chat: I think it is a great idea. This way we can move on
> faster.
> Let's agree somehow on date/time so people can join. Will work for me this
> and
> next week almost anytime if agreed in advance.
>
> Thanks,
> Andrii
>
> On Wed, Feb 18, 2015 at 7:09 PM, Jay Kreps <jay.kr...@gmail.com> wrote:
>
>> Hey Andrii,
>>
>> Generally we can do good error handling without needing custom server-side
>> messages. I.e. generally the client has the context to know that if it got
>> an error that the topic doesn't exist to say "Topic X doesn't exist"
>> rather
>> than "error code 14" (or whatever). Maybe there are specific cases where
>> this is hard? If we want to add server-side error messages we really do
>> need to do this in a consistent way across the protocol.
>>
>> I still have a bunch of open questions here from my previous list. I will
>> be out for the next few days for Strata though. Maybe we could do a Google
>> Hangout chat on any open issues some time towards the end of next week for
>> anyone interested in this ticket? I have a feeling that might progress
>> things a little faster than email--I think we could talk through those
>> issues I brought up fairly quickly...
>>
>> -Jay
>>
>> On Wed, Feb 18, 2015 at 7:27 AM, Andrii Biletskyi <
>> andrii.bilets...@stealth.ly> wrote:
>>
>> > Hi all,
>> >
>> > I'm trying to address some of the issues which were mentioned earlier
>> about
>> > Admin RQ/RP format. One of those was about batching operations. What if
>> we
>> > follow TopicCommand approach and let people specify topic-name by
>> regexp -
>> > would that cover most of the use cases?
>> >
>> > Secondly, is what information should we generally provide in Admin
>> > responses.
>> > I realize that Admin commands don't imply they will be used only in CLI
>> > but,
>> > it seems to me, CLI is a very important client of this feature. In this
>> > case,
>> > seems logical, we would like to provide users with rich experience in
>> terms
>> > of
>> > getting results / errors of the executed commands. Usually we supply
>> with
>> > responses only errorCode, which looks very limiting, in case of CLI we
>> may
>> > want to print human readable error description.
>> >
>> > So, taking into account previous item about batching, what do you think
>> > about
>> > having smth like:
>> >
>> > ('create' doesn't support regexp)
>> > CreateTopicRequest => TopicName Partitions Replicas ReplicaAssignment
>> > [Config]
>> > CreateTopicResponse => ErrorCode ErrorDescription
>> >   ErrorCode => int16
>> >   ErrorDescription => string (empty if successful)
>> >
>> > AlterTopicRequest -> TopicNameRegexp Partitions ReplicaAssignment
>> > [AddedConfig] [DeletedConfig]
>> > AlterTopicResponse -> [TopicName ErrorCode ErrorDescription]
>> > CommandErrorCode CommandErrorDescription
>> >   CommandErrorCode => int16
>> >   CommandErrorDescription => string (nonempty in case of fatal error,
>> e.g.
>> > we couldn't get topics by regexp)
>> >
>> > DescribeTopicRequest -> TopicNameRegexp
>> > DescribeTopicResponse -> [TopicName TopicDescription ErrorCode
>> > ErrorDescription] CommandErrorCode CommandErrorDescription
>> >
>> > Also, any thoughts about our discussion regarding re-routing facility?
>> In
>> > my
>> > understanding, it is like between augmenting TopicMetadataRequest
>> > (to include at least controllerId) and implementing new generic
>> re-routing
>> > facility so sending messages to controller will be handled by it.
>> >
>> > Thanks,
>> > Andrii Biletskyi
>> >
>> > On Mon, Feb 16, 2015 at 5:26 PM, Andrii Biletskyi <
>> > andrii.bilets...@stealth.ly> wrote:
>> >
>> > > @Guozhang:
>> > > Thanks for your comments, I've answered some of those. The main thing
>> is
>> > > having merged request for create-alter-delete-describe - I have some
>> > > concerns about this approach.
>> > >
>> > > @*Jay*:
>> > > I see that introduced ClusterMetadaRequest is also one of the
>> concerns.
>> > We
>> > > can solve it if we implement re-routing facility. But I agree with
>> > > Guozhang - it will make clients' internals a little bit easier but
>> this
>> > > seems to be a complex logic to implement and support then. Especially
>> for
>> > > Fetch and Produce (even if we add re-routing later for these
>> requests).
>> > > Also people will tend to avoid this re-routing facility and hold local
>> > > cluster cache to ensure their high-priority requests (which some of
>> the
>> > > admin requests are) not sent to some busy broker where they wait to be
>> > > routed to the correct one.
>> > > As pointed out by Jun here (
>> > >
>> >
>> https://issues.apache.org/jira/browse/KAFKA-1772?focusedCommentId=14234530&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14234530
>> > )
>> > > to solve the issue we might introduce a message type to get cluster
>> > state.
>> > > But I agree we can just update TopicMetadataResponse to include
>> > > controllerId (and probably smth else).
>> > > What are you thougths?
>> > >
>> > > Thanks,
>> > > Andrii
>> > >
>> > > On Thu, Feb 12, 2015 at 8:31 AM, Guozhang Wang <wangg...@gmail.com>
>> > wrote:
>> > >
>> > >> I think for the topics commands we can actually merge
>> > >> create/alter/delete/describe as one request type since their formats
>> are
>> > >> very much similar, and keep list-topics and others like
>> > >> partition-reassignment / preferred-leader-election as separate
>> request
>> > >> types, I also left some other comments on the RB (
>> > >> https://reviews.apache.org/r/29301/).
>> > >>
>> > >> On Wed, Feb 11, 2015 at 2:04 PM, Jay Kreps <jay.kr...@gmail.com>
>> wrote:
>> > >>
>> > >> > Yeah I totally agree that we don't want to just have one "do admin
>> > >> stuff"
>> > >> > command that has the union of all parameters.
>> > >> >
>> > >> > What I am saying is that command line tools are one client of the
>> > >> > administrative apis, but these will be used in a number of
>> scenarios
>> > so
>> > >> > they should make logical sense even in the absence of the command
>> line
>> > >> > tool. Hence comments like trying to clarify the relationship
>> between
>> > >> > ClusterMetadata and TopicMetadata...these kinds of things really
>> need
>> > >> to be
>> > >> > thought through.
>> > >> >
>> > >> > Hope that makes sense.
>> > >> >
>> > >> > -Jay
>> > >> >
>> > >> > On Wed, Feb 11, 2015 at 1:41 PM, Andrii Biletskyi <
>> > >> > andrii.bilets...@stealth.ly> wrote:
>> > >> >
>> > >> > > Jay,
>> > >> > >
>> > >> > > Thanks for answering. You understood correctly, most of my
>> comments
>> > >> were
>> > >> > > related to your point 1) - about "well thought-out" apis. Also,
>> yes,
>> > >> as I
>> > >> > > understood we would like to introduce a single unified CLI tool
>> with
>> > >> > > centralized server-side request handling for lots of existing
>> ones
>> > >> (incl.
>> > >> > > TopicCommand, CommitOffsetChecker, ReassignPartitions, smth else
>> if
>> > >> added
>> > >> > > in future). In our previous discussion (
>> > >> > > https://issues.apache.org/jira/browse/KAFKA-1694) people said
>> > they'd
>> > >> > > rather
>> > >> > > have a separate message for each command, so, yes, this way I
>> came
>> > to
>> > >> 1-1
>> > >> > > mapping between commands in the tool and protocol additions. But
>> I
>> > >> might
>> > >> > be
>> > >> > > wrong.
>> > >> > > At the end I just try to start discussion how at least generally
>> > this
>> > >> > > protocol should look like.
>> > >> > >
>> > >> > > Thanks,
>> > >> > > Andrii
>> > >> > >
>> > >> > > On Wed, Feb 11, 2015 at 11:10 PM, Jay Kreps <jay.kr...@gmail.com
>> >
>> > >> wrote:
>> > >> > >
>> > >> > > > Hey Andrii,
>> > >> > > >
>> > >> > > > To answer your earlier question we just really can't be adding
>> any
>> > >> more
>> > >> > > > scala protocol objects. These things are super hard to maintain
>> > >> because
>> > >> > > > they hand code the byte parsing and don't have good versioning
>> > >> support.
>> > >> > > > Since we are already planning on converting we definitely don't
>> > >> want to
>> > >> > > add
>> > >> > > > a ton more of these--they are total tech debt.
>> > >> > > >
>> > >> > > > What does it mean that the changes are isolated from the
>> current
>> > >> code
>> > >> > > base?
>> > >> > > >
>> > >> > > > I actually didn't understand the remaining comments, which of
>> the
>> > >> > points
>> > >> > > > are you responding to?
>> > >> > > >
>> > >> > > > Maybe one sticking point here is that it seems like you want to
>> > make
>> > >> > some
>> > >> > > > kind of tool, and you have made a 1-1 mapping between commands
>> you
>> > >> > > imagine
>> > >> > > > in the tool and protocol additions. I want to make sure we
>> don't
>> > do
>> > >> > that.
>> > >> > > > The protocol needs to be really really well thought out against
>> > many
>> > >> > use
>> > >> > > > cases so it should make perfect logical sense in the absence of
>> > >> knowing
>> > >> > > the
>> > >> > > > command line tool, right?
>> > >> > > >
>> > >> > > > -Jay
>> > >> > > >
>> > >> > > > On Wed, Feb 11, 2015 at 11:57 AM, Andrii Biletskyi <
>> > >> > > > andrii.bilets...@stealth.ly> wrote:
>> > >> > > >
>> > >> > > > > Hey Jay,
>> > >> > > > >
>> > >> > > > > I would like to continue this discussion as it seem there is
>> no
>> > >> > > progress
>> > >> > > > > here.
>> > >> > > > >
>> > >> > > > > First of all, could you please explain what did you mean in
>> 2?
>> > How
>> > >> > > > exactly
>> > >> > > > > are we going to migrate to the new java protocol definitions.
>> > And
>> > >> why
>> > >> > > > it's
>> > >> > > > > a blocker for centralized CLI?
>> > >> > > > >
>> > >> > > > > I agree with you, this feature includes lots of stuff, but
>> > >> thankfully
>> > >> > > > > almost all changes are isolated from the current code base,
>> > >> > > > > so the main thing, I think, we need to agree is RQ/RP format.
>> > >> > > > > So how can we start discussion about the concrete messages
>> > format?
>> > >> > > > > Can we take (
>> > >> > > > >
>> > >> > > > >
>> > >> > > >
>> > >> > >
>> > >> >
>> > >>
>> >
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations#KIP-4-Commandlineandcentralizedadministrativeoperations-ProposedRQ/RPFormat
>> > >> > > > > )
>> > >> > > > > as starting point?
>> > >> > > > >
>> > >> > > > > We had some doubts earlier whether it worth introducing one
>> > >> generic
>> > >> > > Admin
>> > >> > > > > Request for all commands (
>> > >> > > > https://issues.apache.org/jira/browse/KAFKA-1694
>> > >> > > > > )
>> > >> > > > > but then everybody agreed it would be better to have separate
>> > >> message
>> > >> > > for
>> > >> > > > > each admin command. The Request part is really dictated from
>> the
>> > >> > > command
>> > >> > > > > (e.g. TopicCommand) arguments itself, so the proposed version
>> > >> should
>> > >> > be
>> > >> > > > > fine (let's put aside for now remarks about Optional type,
>> > >> batching,
>> > >> > > > > configs normalization - I agree with all of them).
>> > >> > > > > So the second part is Response. I see there are two cases
>> here.
>> > >> > > > > a) "Mutate" requests - Create/Alter/... ; b) "Get" requests -
>> > >> > > > > List/Describe...
>> > >> > > > >
>> > >> > > > > a) should only hold request result (regardless what we decide
>> > >> about
>> > >> > > > > blocking/non-blocking commands execution).
>> > >> > > > > Usually we provide error code in response but since we will
>> use
>> > >> this
>> > >> > in
>> > >> > > > > interactive shell we need some human readable error
>> description
>> > -
>> > >> so
>> > >> > I
>> > >> > > > > added errorDesription field where you can at least leave
>> > >> > > > > exception.getMessage.
>> > >> > > > >
>> > >> > > > > b) in addition to previous item message should hold command
>> > >> specific
>> > >> > > > > response data. We can discuss in detail each of them but
>> let's
>> > for
>> > >> > now
>> > >> > > > > agree about the overall pattern.
>> > >> > > > >
>> > >> > > > > Thanks,
>> > >> > > > > Andrii Biletskyi
>> > >> > > > >
>> > >> > > > > On Fri, Jan 23, 2015 at 6:59 AM, Jay Kreps <
>> jay.kr...@gmail.com
>> > >
>> > >> > > wrote:
>> > >> > > > >
>> > >> > > > > > Hey Joe,
>> > >> > > > > >
>> > >> > > > > > This is great. A few comments on KIP-4
>> > >> > > > > >
>> > >> > > > > > 1. This is much needed functionality, but there are a lot
>> of
>> > >> the so
>> > >> > > > let's
>> > >> > > > > > really think these protocols through. We really want to
>> end up
>> > >> > with a
>> > >> > > > set
>> > >> > > > > > of well thought-out, orthoganol apis. For this reason I
>> think
>> > >> it is
>> > >> > > > > really
>> > >> > > > > > important to think through the end state even if that
>> includes
>> > >> APIs
>> > >> > > we
>> > >> > > > > > won't implement in the first phase.
>> > >> > > > > >
>> > >> > > > > > 2. Let's please please please wait until we have switched
>> the
>> > >> > server
>> > >> > > > over
>> > >> > > > > > to the new java protocol definitions. If we add upteen
>> more ad
>> > >> hoc
>> > >> > > > scala
>> > >> > > > > > objects that is just generating more work for the
>> conversion
>> > we
>> > >> > know
>> > >> > > we
>> > >> > > > > > have to do.
>> > >> > > > > >
>> > >> > > > > > 3. This proposal introduces a new type of optional
>> parameter.
>> > >> This
>> > >> > is
>> > >> > > > > > inconsistent with everything else in the protocol where we
>> use
>> > >> -1
>> > >> > or
>> > >> > > > some
>> > >> > > > > > other marker value. You could argue either way but let's
>> stick
>> > >> with
>> > >> > > > that
>> > >> > > > > > for consistency. For clients that implemented the protocol
>> in
>> > a
>> > >> > > better
>> > >> > > > > way
>> > >> > > > > > than our scala code these basic primitives are hard to
>> change.
>> > >> > > > > >
>> > >> > > > > > 4. ClusterMetadata: This seems to duplicate
>> > TopicMetadataRequest
>> > >> > > which
>> > >> > > > > has
>> > >> > > > > > brokers, topics, and partitions. I think we should rename
>> that
>> > >> > > request
>> > >> > > > > > ClusterMetadataRequest (or just MetadataRequest) and
>> include
>> > >> the id
>> > >> > > of
>> > >> > > > > the
>> > >> > > > > > controller. Or are there other things we could add here?
>> > >> > > > > >
>> > >> > > > > > 5. We have a tendency to try to make a lot of requests that
>> > can
>> > >> > only
>> > >> > > go
>> > >> > > > > to
>> > >> > > > > > particular nodes. This adds a lot of burden for client
>> > >> > > implementations
>> > >> > > > > (it
>> > >> > > > > > sounds easy but each discovery can fail in many parts so it
>> > >> ends up
>> > >> > > > > being a
>> > >> > > > > > full state machine to do right). I think we should consider
>> > >> making
>> > >> > > > admin
>> > >> > > > > > commands and ideally as many of the other apis as possible
>> > >> > available
>> > >> > > on
>> > >> > > > > all
>> > >> > > > > > brokers and just redirect to the controller on the broker
>> > side.
>> > >> > > Perhaps
>> > >> > > > > > there would be a general way to encapsulate this re-routing
>> > >> > behavior.
>> > >> > > > > >
>> > >> > > > > > 6. We should probably normalize the key value pairs used
>> for
>> > >> > configs
>> > >> > > > > rather
>> > >> > > > > > than embedding a new formatting. So two strings rather than
>> > one
>> > >> > with
>> > >> > > an
>> > >> > > > > > internal equals sign.
>> > >> > > > > >
>> > >> > > > > > 7. Is the postcondition of these APIs that the command has
>> > >> begun or
>> > >> > > > that
>> > >> > > > > > the command has been completed? It is a lot more usable if
>> the
>> > >> > > command
>> > >> > > > > has
>> > >> > > > > > been completed so you know that if you create a topic and
>> then
>> > >> > > publish
>> > >> > > > to
>> > >> > > > > > it you won't get an exception about there being no such
>> topic.
>> > >> > > > > >
>> > >> > > > > > 8. Describe topic and list topics duplicate a lot of stuff
>> in
>> > >> the
>> > >> > > > > metadata
>> > >> > > > > > request. Is there a reason to give back topics marked for
>> > >> > deletion? I
>> > >> > > > > feel
>> > >> > > > > > like if we just make the post-condition of the delete
>> command
>> > be
>> > >> > that
>> > >> > > > the
>> > >> > > > > > topic is deleted that will get rid of the need for this
>> right?
>> > >> And
>> > >> > it
>> > >> > > > > will
>> > >> > > > > > be much more intuitive.
>> > >> > > > > >
>> > >> > > > > > 9. Should we consider batching these requests? We have
>> > generally
>> > >> > > tried
>> > >> > > > to
>> > >> > > > > > allow multiple operations to be batched. My suspicion is
>> that
>> > >> > without
>> > >> > > > > this
>> > >> > > > > > we will get a lot of code that does something like
>> > >> > > > > >    for(topic: adminClient.listTopics())
>> > >> > > > > >       adminClient.describeTopic(topic)
>> > >> > > > > > this code will work great when you test on 5 topics but
>> not do
>> > >> as
>> > >> > > well
>> > >> > > > if
>> > >> > > > > > you have 50k.
>> > >> > > > > >
>> > >> > > > > > 10. I think we should also discuss how we want to expose a
>> > >> > > programmatic
>> > >> > > > > JVM
>> > >> > > > > > client api for these operations. Currently people rely on
>> > >> > AdminUtils
>> > >> > > > > which
>> > >> > > > > > is totally sketchy. I think we probably need another client
>> > >> under
>> > >> > > > > clients/
>> > >> > > > > > that exposes administrative functionality. We will need
>> this
>> > >> just
>> > >> > to
>> > >> > > > > > properly test the new apis, I suspect. We should figure out
>> > that
>> > >> > API.
>> > >> > > > > >
>> > >> > > > > > 11. The other information that would be really useful to
>> get
>> > >> would
>> > >> > be
>> > >> > > > > > information about partitions--how much data is in the
>> > partition,
>> > >> > what
>> > >> > > > are
>> > >> > > > > > the segment offsets, what is the log-end offset (i.e. last
>> > >> offset),
>> > >> > > > what
>> > >> > > > > is
>> > >> > > > > > the compaction point, etc. I think that done right this
>> would
>> > be
>> > >> > the
>> > >> > > > > > successor to the very awkward OffsetRequest we have today.
>> > >> > > > > >
>> > >> > > > > > -Jay
>> > >> > > > > >
>> > >> > > > > > On Wed, Jan 21, 2015 at 10:27 PM, Joe Stein <
>> > >> joe.st...@stealth.ly>
>> > >> > > > > wrote:
>> > >> > > > > >
>> > >> > > > > > > Hi, created a KIP
>> > >> > > > > > >
>> > >> > > > > > >
>> > >> > > > > >
>> > >> > > > >
>> > >> > > >
>> > >> > >
>> > >> >
>> > >>
>> >
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations
>> > >> > > > > > >
>> > >> > > > > > > JIRA https://issues.apache.org/jira/browse/KAFKA-1694
>> > >> > > > > > >
>> > >> > > > > > > /*******************************************
>> > >> > > > > > >  Joe Stein
>> > >> > > > > > >  Founder, Principal Consultant
>> > >> > > > > > >  Big Data Open Source Security LLC
>> > >> > > > > > >  http://www.stealth.ly
>> > >> > > > > > >  Twitter: @allthingshadoop <
>> > >> > http://www.twitter.com/allthingshadoop
>> > >> > > >
>> > >> > > > > > > ********************************************/
>> > >> > > > > > >
>> > >> > > > > >
>> > >> > > > >
>> > >> > > >
>> > >> > >
>> > >> >
>> > >>
>> > >>
>> > >>
>> > >> --
>> > >> -- Guozhang
>> > >>
>> > >
>> > >
>> >
>>
>
>

Reply via email to