Thanks for looking into this into details!

As mentioned, I would like to keep the check, but if it's too much
overhead, I agree that it's not worth it.

Thanks.

-Matthias

On 11/14/17 10:00 AM, Guozhang Wang wrote:
> I looked into how to use a NetworkClient to replace StreamsKafkaClient to
> do this one-time checking, and the complexity is actually pretty high:
> since it is a barebone NetworkClient, we have to handle the connection /
> readiness / find a broker to send to / etc logic plus introducing all these
> dependencies into KafkaStreams class. So I have decided to not do this in
> this KIP. If people feel strongly about this let's discuss more.
> 
> 
> I'll start the voting process on the mailing list now.
> 
> 
> Guozhang
> 
> On Fri, Nov 10, 2017 at 11:47 AM, Bill Bejeck <bbej...@gmail.com> wrote:
> 
>> I'm leaning towards option 3, although option 2 is a reasonable tradeoff
>> between the two.
>>
>> Overall I'm leaning towards option 3 because:
>>
>>    1. As Guozhang has said we are failing "fast enough" with an Exception
>>    from the first rebalance.
>>    2. Less complexity/maintenance cost by not having a transient network
>>    client
>>    3. Ideally, this check should be on the AdminClient itself but adding
>>    such a check creates "scope creep" for this KIP.
>>
>> IMHO the combination of these reasons makes option 3 my preferred approach.
>>
>> Thanks,
>> Bill
>>
>> On Tue, Nov 7, 2017 at 12:48 PM, Guozhang Wang <wangg...@gmail.com> wrote:
>>
>>> Here is what I'm thinking about this trade-off: we want to fail fast when
>>> brokers do not yet support the requested API version, with the cost that
>> we
>>> need to do this one-time thing with an expensed NetworkClient plus a bit
>>> longer starting up latency. Here are a few different options:
>>>
>>> 1) we ask all the brokers: this is one extreme of the trade-off, we still
>>> need to handle UnsupportedApiVersionsException since brokers can
>>> downgrade.
>>> 2) we ask a random broker: this is what we did, and a bit weaker than 1)
>>> but saves on latency.
>>> 3) we do not ask anyone: this is the other extreme of the trade-off.
>>>
>>> To me I think 1) is an overkill, so I did not include that in my
>> proposals.
>>> Between 2) and 3) I'm slightly preferring 3) since even under this case
>> we
>>> are sort of failing fast because we will throw the exception at the first
>>> rebalance, but I can still see the value of option 2). Ideally we can
>> have
>>> some APIs from AdminClient to check API versions but this does not exist
>>> today and I do not want to drag too long with growing scope on this KIP,
>> so
>>> the current proposal's implementation uses expendable Network which is a
>>> bit fuzzy.
>>>
>>>
>>> Guozhang
>>>
>>>
>>> On Tue, Nov 7, 2017 at 2:07 AM, Matthias J. Sax <matth...@confluent.io>
>>> wrote:
>>>
>>>> I would prefer to keep the current check. We could even improve it, and
>>>> do the check to more than one brokers (even all provided
>>>> bootstrap.servers) or some random servers after we got all meta data
>>>> about the cluster.
>>>>
>>>>
>>>> -Matthias
>>>>
>>>> On 11/7/17 1:01 AM, Guozhang Wang wrote:
>>>>> Hello folks,
>>>>>
>>>>> One update I'd like to propose regarding "compatibility checking":
>>>>> currently we create a single StreamsKafkaClient at the beginning to
>>> issue
>>>>> an ApiVersionsRequest to a random broker and then check on its
>>> versions,
>>>>> and fail if it does not satisfy the version (0.10.1+ without EOS,
>>> 0.11.0
>>>>> with EOS); after this check we throw this client away. My original
>> plan
>>>> is
>>>>> to replace this logic with the NetworkClient's own apiVersions, but
>>> after
>>>>> some digging while working on the PR I found that exposing this
>>>> apiVersions
>>>>> variable from NetworkClient through AdminClient is not very straight
>>>>> forward, plus it would need an API change on the AdminClient itself
>> as
>>>> well
>>>>> to expose the versions information.
>>>>>
>>>>> On the other hand, this one-time compatibility checking's benefit may
>>> be
>>>>> not significant: 1) it asks a random broker upon starting up, and
>> hence
>>>>> does not guarantee all broker's support the corresponding API
>> versions
>>> at
>>>>> that time; 2) brokers can still be upgraded / downgraded after the
>>>> streams
>>>>> app is up and running, and hence we still need to handle
>>>>> UnsupportedVersionExceptions thrown from the producer / consumer /
>>> admin
>>>>> client during the runtime anyways.
>>>>>
>>>>> So I'd like to propose two options in this KIP:
>>>>>
>>>>> 1) we remove this one-time compatibility check on Streams starting up
>>> in
>>>>> this KIP, and solely rely on handling producer / consumer / admin
>>>> client's
>>>>> API UnsupportedVersionException throwable exceptions. Please share
>> your
>>>>> thoughts about this.
>>>>>
>>>>> 2) we create a one-time NetworkClient upon starting up, send the
>>>>> ApiVersionsRequest and get the response and do the checking; after
>> that
>>>>> throw this client away.
>>>>>
>>>>> Please let me know what do you think. Thanks!
>>>>>
>>>>>
>>>>> Guozhang
>>>>>
>>>>>
>>>>> On Mon, Nov 6, 2017 at 7:56 AM, Matthias J. Sax <
>> matth...@confluent.io
>>>>
>>>>> wrote:
>>>>>
>>>>>> Thanks for the update and clarification.
>>>>>>
>>>>>> Sounds good to me :)
>>>>>>
>>>>>>
>>>>>> -Matthias
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 11/6/17 12:16 AM, Guozhang Wang wrote:
>>>>>>> Thanks Matthias,
>>>>>>>
>>>>>>> 1) Updated the KIP page to include KAFKA-6126.
>>>>>>> 2) For passing configs, I agree, will make a pass over the existing
>>>>>> configs
>>>>>>> passed to StreamsKafkaClient and update the wiki page accordingly,
>> to
>>>>>>> capture all changes that would happen for the replacement in this
>>>> single
>>>>>>> KIP.
>>>>>>> 3) For internal topic purging, I'm not sure if we need to include
>>> this
>>>>>> as a
>>>>>>> public change since internal topics are meant for abstracted away
>>> from
>>>>>> the
>>>>>>> Streams users; they should not leverage such internal topics
>>> elsewhere
>>>>>>> themselves. The only thing I can think of is for Kafka operators
>> this
>>>>>> would
>>>>>>> mean that such internal topics would be largely reduced in their
>>>>>> footprint,
>>>>>>> but that would not be needed in the KIP as well.
>>>>>>>
>>>>>>>
>>>>>>> Guozhang
>>>>>>>
>>>>>>>
>>>>>>> On Sat, Nov 4, 2017 at 9:00 AM, Matthias J. Sax <
>>> matth...@confluent.io
>>>>>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> I like this KIP. Can you also link to
>>>>>>>> https://issues.apache.org/jira/browse/KAFKA-6126 in the KIP?
>>>>>>>>
>>>>>>>> What I am wondering though: if we start to partially (ie, step by
>>>> step)
>>>>>>>> replace the existing StreamsKafkaClient with Java AdminClient,
>> don't
>>>> we
>>>>>>>> need more KIPs? For example, if we use purge-api for internal
>>> topics,
>>>> it
>>>>>>>> seems like a change that requires a KIP. Similar for passing
>> configs
>>>> --
>>>>>>>> the old client might have different config than the old client?
>> Can
>>> we
>>>>>>>> double check this?
>>>>>>>>
>>>>>>>> Thus, it might make sense to replace the old client with the new
>> one
>>>> in
>>>>>>>> one shot.
>>>>>>>>
>>>>>>>>
>>>>>>>> -Matthias
>>>>>>>>
>>>>>>>> On 11/4/17 4:01 AM, Ted Yu wrote:
>>>>>>>>> Looks good overall.
>>>>>>>>>
>>>>>>>>> bq. the creation within StreamsPartitionAssignor
>>>>>>>>>
>>>>>>>>> Typo above: should be StreamPartitionAssignor
>>>>>>>>>
>>>>>>>>> On Fri, Nov 3, 2017 at 4:49 PM, Guozhang Wang <
>> wangg...@gmail.com>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Hello folks,
>>>>>>>>>>
>>>>>>>>>> I have filed a new KIP on adding AdminClient into Streams for
>>>> internal
>>>>>>>>>> topic management.
>>>>>>>>>>
>>>>>>>>>> Looking for feedback on
>>>>>>>>>>
>>>>>>>>>> *https://cwiki.apache.org/confluence/display/KAFKA/KIP-
>>>>>>>>>> 220%3A+Add+AdminClient+into+Kafka+Streams%27+ClientSupplier
>>>>>>>>>> <https://cwiki.apache.org/confluence/display/KAFKA/KIP-
>>>>>>>>>> 220%3A+Add+AdminClient+into+Kafka+Streams%27+ClientSupplier>*
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> -- Guozhang
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> -- Guozhang
>>>
>>
> 
> 
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to