Thanks Guozhang! Sounds good to me!

-Matthias

On 5/10/18 7:55 AM, Guozhang Wang wrote:
> Thanks for your thoughts Matthias. I think if we do want to bring KIP-244
> into 2.0 then we need to keep its scope small and well defined. For that
> I'm proposing:
> 
> 1. Make the inheritance implementation of headers consistent with what we
> had with other record context fields. I.e. pass through the record context
> in `context.forward()`. Note that within a processor node, users can
> already manipulate the Headers with the given APIs, so at the time of
> forwarding, the library can just copy what-ever is left / updated to the
> next processor node.
> 
> 2. In the sink node, where a record is being sent to the Kafka topic, we
> should consider the following:
> 
> a. For sink topics, we will set the headers into the producer record.
> b. For repartition topics, we will the headers into the producer record.
> c. For changelog topics, we will drop the headers in the produce record
> since they will not be used in restoration and not stored in the state
> store either.
> 
> 
> We can discuss about extending the current protocol and how to enable users
> override those rule, and how to expose them in the DSL layer in a future
> KIP.
> 
> 
> 
> Guozhang
> 
> 
> On Mon, May 7, 2018 at 5:49 PM, Matthias J. Sax <matth...@confluent.io>
> wrote:
> 
>> Guozhang,
>>
>> if you advocate to forward headers by default, it might be a better
>> default strategy do forward the headers for all operators (similar to
>> topic/partition/offset metadata). It's usually harder for users to
>> reason about different cases and thus I would prefer to have consistent
>> behavior, ie, only one default strategy instead of introducing different
>> cases.
>>
>> Btw: My argument about dropping headers by default only implies, that
>> users need to copy the headers explicitly to the output records in there
>> code of they want to inspect them later -- it does not imply that
>> headers cannot be forwarded downstream. (Not sure if this was clear).
>>
>> I am also ok with copying be default thought (for me, it's a 51/49
>> preference for dropping by default only).
>>
>>
>> -Matthias
>>
>> On 5/7/18 4:52 PM, Guozhang Wang wrote:
>>> Hi Matthias,
>>>
>>> My concern of setting `null` in all cases is that it would make headers
>> not
>>> very useful in KIP-244 then, because headers will only be available at
>> the
>>> source stream / table, but not in any of the following instances. In
>>> practice users may be more likely to look into the headers later in the
>>> pipeline. Personally I'd suggest we pass the headers for all stateless
>>> operators in DSL and everywhere in PAPI's context.forward(). For
>>> repartition topics and sink topics, we also set them in the produced
>>> records accordingly; for changelog topics, we do not set them since they
>>> are not going to be used anywhere in the store.
>>>
>>>
>>> Guozhang
>>>
>>>
>>> On Sun, May 6, 2018 at 9:03 PM, Matthias J. Sax <matth...@confluent.io>
>>> wrote:
>>>
>>>> I agree, that we should not block this KIP if possible. Nevertheless, we
>>>> should try to get a reasonable default strategy for inheriting the
>>>> headers so we don't need to change it later on.
>>>>
>>>> Let's see what other think. I still tend slightly to set to `null` by
>>>> default for all cases. If the default strategy is different for
>>>> different operators as you suggest, it might be confusion to users.
>>>> IMHO, the default behavior should be as simple as possible.
>>>>
>>>>
>>>> -Matthias
>>>>
>>>>
>>>> On 5/6/18 8:53 PM, Guozhang Wang wrote:
>>>>> Matthias, thanks for sharing your opinions in the inheritance protocol
>> of
>>>>> the record context. I'm thinking maybe we should make this discussion
>> as
>>>> a
>>>>> separate KIP by itself? If yes, then KIP-244's scope would be smaller,
>>>> and
>>>>> within KIP-244 we can have a simple inheritance rule that setting it to
>>>>> null when 1) going through stateful operators and 2) sending to any
>>>> topics.
>>>>>
>>>>>
>>>>> Guozhang
>>>>>
>>>>> On Sun, May 6, 2018 at 10:24 AM, Matthias J. Sax <
>> matth...@confluent.io>
>>>>> wrote:
>>>>>
>>>>>> Making the inheritance protocol a public contract seems reasonable to
>>>> me.
>>>>>>
>>>>>> In the current implementation, all output records inherits the offset,
>>>>>> timestamp, topic, and partition metadata from the input record. We
>>>>>> already added an API to change the timestamp explicitly for the output
>>>>>> record thought.
>>>>>>
>>>>>> I think it make sense to keep the inheritance of offset, topic, and
>>>>>> partition. For headers, it's worth to discuss. I see arguments for two
>>>>>> strategies: (1) inherit by default, (2) set `null` by default.
>>>>>> Independent of the default behavior, we should add an API to set
>> headers
>>>>>> for output records explicitly though (similar to the "set timestamp
>>>> API").
>>>>>>
>>>>>> From my point of view, timestamp/headers are a different
>>>>>> "class/category" of data/metadata than topic/partition/offset. For the
>>>>>> first category, it makes sense to manipulate them and it's more than
>>>>>> "plain metadata"; especially the timestamp. For the second category it
>>>>>> does not make sense to manipulate it, and to me topic/partition/offset
>>>>>> is pure metadata only---strictly speaking, it's even questionable if
>>>>>> output records should have any value for topic/partition/offset in the
>>>>>> first place, or if they should be `null`, because those attributes do
>>>>>> only make sense for source records that are consumed from a topic
>>>>>> directly only. On the other hand, if we make this difference explicit,
>>>>>> it might be useful information for the use to track the current
>>>>>> topic/partition/offset of the original source record.
>>>>>>
>>>>>> Furthermore, to me, timestamps and headers are somewhat different,
>> too.
>>>>>> For stream processing it's required that every record has a timestamp;
>>>>>> thus, it make sense to inherit the input record timestamp by default
>> (a
>>>>>> timestamp is not really metadata but actually equally important to key
>>>>>> and value from my point of view). Header however are optional, and
>> thus
>>>>>> inheriting them is not really required. It might be convenient though:
>>>>>> for example, imagine a simple "filter-only" application -- it would be
>>>>>> cumbersome for users to explicitly copy the headers from the input
>>>>>> records to the output records -- it seems to be unnecessary
>> boilerplate
>>>>>> code. On the other hand, for any other more complex use case, it's
>>>>>> questionable to inherit headers---note, that headers would be written
>> to
>>>>>> the output topics increasing the size of the messages. Overall, I am
>> not
>>>>>> sure which default strategy might be the better one for headers. Is
>>>>>> there a convincing argument for either one of them? I slightly tend to
>>>>>> think that using `null` as default might be better.
>>>>>>
>>>>>> Last, we could also make the default behavior configurable. Something
>>>>>> like `inherit.record.headers=true/false` with default value "false".
>>>>>> This would allow people to opt-in for auto-header-inheritance. Just an
>>>>>> idea I wanted to add to the discussion---not sure if it's a good one.
>>>>>>
>>>>>>
>>>>>> -Matthias
>>>>>>
>>>>>> On 5/4/18 3:13 PM, Guozhang Wang wrote:
>>>>>>> Hello Jorge,
>>>>>>>
>>>>>>>> Agree. Probably point 3 handles this. `Headers` been part of
>>>>>> `RecordContext`
>>>>>>> would be handled the same way as other attributes.
>>>>>>>
>>>>>>> Today we do not have a clear inheritance protocol for other fields of
>>>>>>> RecordContext yet: although internally we do have some criterion on
>>>>>>> topic/partition/offset and timestamp, they are not explicitly exposed
>>>> to
>>>>>>> users.
>>>>>>>
>>>>>>>
>>>>>>> I think we still need to have a defined protocol for headers itself,
>>>> but
>>>>>> I
>>>>>>> agree that it better to be scoped out side of this KIP, since this
>>>>>>> inheritance protocol itself for all the fields of RecordContext would
>>>>>>> better be a separate KIP. We can document this clearly in the wiki
>>>> page.
>>>>>>>
>>>>>>> Guozhang
>>>>>>>
>>>>>>>
>>>>>>> On Fri, May 4, 2018 at 5:26 AM, Florian Garcia <
>>>>>>> garcia.florian.pe...@gmail.com> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> For me this is a great first step to have Headers in streaming.
>>>>>>>> My current use case is about distributed tracing (Zipkin) and with
>> the
>>>>>>>> headers in the processorContext() I'll be able to manage that for
>> the
>>>>>> most
>>>>>>>> cases.
>>>>>>>> The KIP-159 should follow after this but this is where all the major
>>>>>>>> questions will arise for stateful operations (as Guozhang said).
>>>>>>>>
>>>>>>>> Thanks for the work on this Jorge.
>>>>>>>>
>>>>>>>> Le ven. 4 mai 2018 à 01:04, Jorge Esteban Quilcate Otoya <
>>>>>>>> quilcate.jo...@gmail.com> a écrit :
>>>>>>>>
>>>>>>>>> Thanks Guozhang and John for your feedback.
>>>>>>>>>
>>>>>>>>>> 1. We need to have a clear inheritance protocol of headers in our
>>>>>>>>> topology:
>>>>>>>>>> 1.a. In PAPI's context.forward() call, it should be
>>>> straight-forward.
>>>>>>>>>> 1.b. In DSL stateless operators, it should be straight-forward.
>>>>>>>>>> 1.c. What about in stateful operators like aggregates and joins?
>>>>>>>>>
>>>>>>>>> Agree. Probably point 3 handles this. `Headers` been part of
>>>>>>>>> `RecordContext` would be handled the same way as other attributes.
>>>>>>>>>
>>>>>>>>>> 3. In future work "Adding DSL Processors to use Headers to
>>>>>>>>> filter/map/branch",
>>>>>>>>> it may well be covered in KIP-159; worth taking a look at that KIP.
>>>>>>>>>
>>>>>>>>> Yes, I will point to it.
>>>>>>>>>
>>>>>>>>>> 2. In terms of internal implementations, should the state store
>>>>>>>>> cache include the headers then in order to be sent downstreams?
>>>>>>>>>
>>>>>>>>> Good question. As `LRUCacheEntry` extends `RecordContext`, I thinks
>>>>>> this
>>>>>>>> is
>>>>>>>>> already supported. I will detail this on the KIP.
>>>>>>>>>
>>>>>>>>>> 4. MINOR: "void process(K key, V value, Headers headers)", this
>>>> should
>>>>>>>> be
>>>>>>>>> removed?
>>>>>>>>>
>>>>>>>>> Fixed, thanks.
>>>>>>>>>
>>>>>>>>>> 5. MINOR: it seems to be the case that in this KIP, our scope is
>>>> only
>>>>>>>>> for exposing
>>>>>>>>> the headers for reading, and not allowing users to add / modify
>>>>>> headers,
>>>>>>>>> right? If yes, we'd better state it clearly at the "Proposed
>> Changes"
>>>>>>>>> section.
>>>>>>>>>
>>>>>>>>> As headers is exposed in the `ProcessContext`, and headers will be
>>>> send
>>>>>>>>> downstream, it can be mutated (add/remove headers).
>>>>>>>>>
>>>>>>>>>  > Also, despite the decreased scope in this KIP, I think it might
>> be
>>>>>>>>> valuable to define what will happen to headers once this change is
>>>>>>>>> implemented. For example, I think a minimal groundwork-level change
>>>>>> might
>>>>>>>>> be to make the API changes, while promising to drop all headers
>> from
>>>>>>>> input
>>>>>>>>> records.
>>>>>>>>>
>>>>>>>>> I will suggest to pass headers to downstream nodes, and don't drop
>>>>>> yhrm.
>>>>>>>>> Clients will have to drop `Headers` if they have used them.
>>>>>>>>> Or it could be something like a boolean config property that manage
>>>>>> this.
>>>>>>>>> I would like to hear feedback here.
>>>>>>>>>
>>>>>>>>>> A maximal groundwork change would be to forward the headers
>> through
>>>>>> all
>>>>>>>>> operators
>>>>>>>>> in
>>>>>>>>>
>>>>>>>>> Streams. But I think there are some unresolved questions about
>>>>>>>> forwarding,
>>>>>>>>> like "what happens to the headers in a join?"
>>>>>>>>> Probably this would be solve once KIP-159 is implemented and
>>>> supporting
>>>>>>>>> Headers.
>>>>>>>>>
>>>>>>>>>> There's of course some middle ground, but instinctively, I think
>> I'd
>>>>>>>>> prefer to have a clear definition that headers are currently *not*
>>>>>>>>> forwarded, rather than having a complex list of operators that do
>> or
>>>>>>>> don't
>>>>>>>>> forward them. Plus, I think it might be tricky to define this
>>>> behavior
>>>>>>>>> while not allowing the scope to return to that of your original
>>>>>> proposal!
>>>>>>>>>
>>>>>>>>> Agree. But `Headers` were forwarded *explicitly* in the original
>>>>>>>> proposal.
>>>>>>>>> The current one pass it as part of `RecordContext`, so if it's
>>>> forward
>>>>>> it
>>>>>>>>> or not is as the same as `RecordContext`.
>>>>>>>>> On top of this implementation, we can design how filter/map/join
>> will
>>>>>> be
>>>>>>>>> handled. Probably following KIP-159 approach.
>>>>>>>>>
>>>>>>>>> Cheers,
>>>>>>>>> Jorge.
>>>>>>>>>
>>>>>>>>> El mié., 2 may. 2018 a las 22:56, Guozhang Wang (<
>> wangg...@gmail.com
>>>>> )
>>>>>>>>> escribió:
>>>>>>>>>
>>>>>>>>>> Hi Jorge,
>>>>>>>>>>
>>>>>>>>>> Thanks for the written KIP! Made a pass over it and left some
>>>> comments
>>>>>>>>>> (some of them overlapped with John's):
>>>>>>>>>>
>>>>>>>>>> 1. We need to have a clear inheritance protocol of headers in our
>>>>>>>>> topology:
>>>>>>>>>>
>>>>>>>>>> 1.a. In PAPI's context.forward() call, it should be
>>>> straight-forward.
>>>>>>>>>> 1.b. In DSL stateless operators, it should be straight-forward.
>>>>>>>>>> 1.c. What about in stateful operators like aggregates and joins?
>>>>>>>>>>
>>>>>>>>>> 2. In terms of internal implementations, should the state store
>>>> cache
>>>>>>>>>> include the headers then in order to be sent downstreams?
>>>>>>>>>>
>>>>>>>>>> 3. In future work "Adding DSL Processors to use Headers to
>>>>>>>>>> filter/map/branch", it may well be covered in KIP-159; worth
>> taking
>>>> a
>>>>>>>>> look
>>>>>>>>>> at that KIP.
>>>>>>>>>>
>>>>>>>>>> 4. MINOR: "void process(K key, V value, Headers headers)", this
>>>> should
>>>>>>>> be
>>>>>>>>>> removed?
>>>>>>>>>>
>>>>>>>>>> 5. MINOR: it seems to be the case that in this KIP, our scope is
>>>> only
>>>>>>>> for
>>>>>>>>>> exposing the headers for reading, and not allowing users to add /
>>>>>>>> modify
>>>>>>>>>> headers, right? If yes, we'd better state it clearly at the
>>>> "Proposed
>>>>>>>>>> Changes" section.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Guozhang
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Wed, May 2, 2018 at 8:42 AM, John Roesler <j...@confluent.io>
>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi Jorge,
>>>>>>>>>>>
>>>>>>>>>>> Thanks for the design work.
>>>>>>>>>>>
>>>>>>>>>>> I agree that de-scoping the work to just the Processor API will
>>>> help
>>>>>>>>>>> contain the design and implementation complexity.
>>>>>>>>>>>
>>>>>>>>>>> In the KIP, it mentions that the headers would be available in
>> the
>>>>>>>>>>> ProcessorContext, (like "context.headers()"). It also says that
>>>>>>>>>>> implementers would need to implement the method "void process(K
>>>> key,
>>>>>>>> V
>>>>>>>>>>> value, Headers headers);". I think maybe you meant to remove the
>>>>>>>>> proposal
>>>>>>>>>>> to modify "process", since it wouldn't be necessary in
>> conjunction
>>>>>>>> with
>>>>>>>>>> the
>>>>>>>>>>> ProcessorContext change, and it's not represented in your PR.
>>>>>>>>>>>
>>>>>>>>>>> Also, despite the decreased scope in this KIP, I think it might
>> be
>>>>>>>>>> valuable
>>>>>>>>>>> to define what will happen to headers once this change is
>>>>>>>> implemented.
>>>>>>>>>> For
>>>>>>>>>>> example, I think a minimal groundwork-level change might be to
>> make
>>>>>>>> the
>>>>>>>>>> API
>>>>>>>>>>> changes, while promising to drop all headers from input records.
>>>>>>>>>>>
>>>>>>>>>>> A maximal groundwork change would be to forward the headers
>> through
>>>>>>>> all
>>>>>>>>>>> operators in Streams. But I think there are some unresolved
>>>> questions
>>>>>>>>>> about
>>>>>>>>>>> forwarding, like "what happens to the headers in a join?"
>>>>>>>>>>>
>>>>>>>>>>> There's of course some middle ground, but instinctively, I think
>>>> I'd
>>>>>>>>>> prefer
>>>>>>>>>>> to have a clear definition that headers are currently *not*
>>>>>>>> forwarded,
>>>>>>>>>>> rather than having a complex list of operators that do or don't
>>>>>>>> forward
>>>>>>>>>>> them. Plus, I think it might be tricky to define this behavior
>>>> while
>>>>>>>>> not
>>>>>>>>>>> allowing the scope to return to that of your original proposal!
>>>>>>>>>>>
>>>>>>>>>>> Thanks again for the KIP,
>>>>>>>>>>> -John
>>>>>>>>>>>
>>>>>>>>>>> On Wed, May 2, 2018 at 8:05 AM, Jorge Esteban Quilcate Otoya <
>>>>>>>>>>> quilcate.jo...@gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi Matthias,
>>>>>>>>>>>>
>>>>>>>>>>>> I've created a new JIRA to track this, updated the KIP and
>> create
>>>> a
>>>>>>>>> PR.
>>>>>>>>>>>>
>>>>>>>>>>>> Looking forward to your feedback,
>>>>>>>>>>>>
>>>>>>>>>>>> Jorge.
>>>>>>>>>>>>
>>>>>>>>>>>> El mar., 13 feb. 2018 a las 22:43, Matthias J. Sax (<
>>>>>>>>>>> matth...@confluent.io
>>>>>>>>>>>>> )
>>>>>>>>>>>> escribió:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi Jorge,
>>>>>>>>>>>>>
>>>>>>>>>>>>> I would like to unblock this KIP to make some progress. The
>>>>>>>> tricky
>>>>>>>>>>>>> question of this work, seems to be how to expose headers at DSL
>>>>>>>>>> level.
>>>>>>>>>>>>> This related to KIP-149 and KIP-159. However, for Processor
>> API,
>>>>>>>> it
>>>>>>>>>>>>> seems to be rather straight forward to add headers to the API.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thus, I would suggest to de-scope this KIP and add header
>> support
>>>>>>>>> for
>>>>>>>>>>>>> Processor API only as a first step. If this is done, we can see
>>>>>>>> in
>>>>>>>>> a
>>>>>>>>>>>>> second step, how to add headers at DSL level.
>>>>>>>>>>>>>
>>>>>>>>>>>>> WDYT about this proposal?
>>>>>>>>>>>>>
>>>>>>>>>>>>> If you agree, please update the JIRA and KIP accordingly. Note,
>>>>>>>>> that
>>>>>>>>>> we
>>>>>>>>>>>>> have two JIRA that are duplicates atm. We can scope them
>>>>>>>>> accordingly:
>>>>>>>>>>>>> one for PAPI only, and second as a dependent JIRA for DSL.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 12/30/17 3:11 PM, Jorge Esteban Quilcate Otoya wrote:
>>>>>>>>>>>>>> Thanks for your feedback!
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 1. I was adding headers to KeyValue to support groupBy, but I
>>>>>>>>> think
>>>>>>>>>>> it
>>>>>>>>>>>> is
>>>>>>>>>>>>>> not necessary. It should be enough with mapping headers to
>>>>>>>>>> key/value
>>>>>>>>>>>> and
>>>>>>>>>>>>>> then group using current KeyValue structure.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 2. Yes. IMO key/value stores, like RocksDB, rely on KV as
>>>>>>>>>> structure,
>>>>>>>>>>>>> hence
>>>>>>>>>>>>>> considering headers as part of stateful operations will not
>> fit
>>>>>>>>> in
>>>>>>>>>>> this
>>>>>>>>>>>>>> approach and increase complexity (I cannot think in a use-case
>>>>>>>>> that
>>>>>>>>>>>> need
>>>>>>>>>>>>>> this).
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 3. and 4. Changes on 1. will solve this issue.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Probably I rush a bit proposing this change, I was not aware
>> of
>>>>>>>>>>> KIP-159
>>>>>>>>>>>>> or
>>>>>>>>>>>>>> KAFKA-5632.
>>>>>>>>>>>>>> If KIP-159 is adopted and we reduce this KIP to add Headers to
>>>>>>>>>>>>>> RecordContext will be enough, but I'm not sure about the scope
>>>>>>>> of
>>>>>>>>>>>>> KIP-159.
>>>>>>>>>>>>>> If it includes stateful operations will be difficult to
>>>>>>>>> implemented
>>>>>>>>>>> as
>>>>>>>>>>>>>> stated in 2.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>> Jorge.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> El mar., 26 dic. 2017 a las 20:04, Matthias J. Sax (<
>>>>>>>>>>>>> matth...@confluent.io>)
>>>>>>>>>>>>>> escribió:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thanks for the KIP Jorge,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> As Bill pointed out already, we should be careful with adding
>>>>>>>>> new
>>>>>>>>>>>>>>> overloads as this contradicts the work done via KIP-182.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> This KIP also seems to be related to KIP-149 and KIP-159. Are
>>>>>>>>> you
>>>>>>>>>>>> aware
>>>>>>>>>>>>>>> of them? Both have quite long DISCUSS threads, but it might
>> be
>>>>>>>>>> worth
>>>>>>>>>>>>>>> browsing through them.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> A few further questions:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>  - why do you want to add the headers to `KeyValue`? I am not
>>>>>>>>> sure
>>>>>>>>>>> if
>>>>>>>>>>>> we
>>>>>>>>>>>>>>> should consider headers as optional metadata and add it to
>>>>>>>>>>>>>>> `RecordContext` similar to timestamp, offset, etc. only
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>  - You only include stateless single-record transformations
>> at
>>>>>>>>> the
>>>>>>>>>>> DSL
>>>>>>>>>>>>>>> level. Do you suggest that all other operator just drop
>>>>>>>> headers
>>>>>>>>> on
>>>>>>>>>>> the
>>>>>>>>>>>>>>> floor?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>  - Why do you only want to put headers into in-memory and
>>>>>>>> cache
>>>>>>>>>> but
>>>>>>>>>>>> not
>>>>>>>>>>>>>>> RocksDB store? What do you mean by "pass through"? IMHO, all
>>>>>>>>>> stores
>>>>>>>>>>>>>>> should behave the same at DSL level.
>>>>>>>>>>>>>>>    -> if we store the headers in the state stores, what is
>> the
>>>>>>>>>>> upgrade
>>>>>>>>>>>>>>> path?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>  - Why do we need to store record header in state in the
>> first
>>>>>>>>>>> place,
>>>>>>>>>>>> if
>>>>>>>>>>>>>>> we exclude stateful operator at DSL level?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> What is the motivation for the "border lines" you choose?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On 12/21/17 8:18 AM, Bill Bejeck wrote:
>>>>>>>>>>>>>>>> Jorge,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Thanks for the KIP, I know this is a feature others in the
>>>>>>>>>>> community
>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>> been interested in getting into Kafka Streams.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I took a quick pass over it, and I have one initial
>> question.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> We recently reduced overloads with KIP-182, and in this KIP
>>>>>>>> we
>>>>>>>>>> are
>>>>>>>>>>>>>>>> increasing them again.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I can see from the KIP why they are necessary, but I'm
>>>>>>>>> wondering
>>>>>>>>>> if
>>>>>>>>>>>>> there
>>>>>>>>>>>>>>>> is something else we can do to cut down on the overloads
>>>>>>>>>>>> introduced.  I
>>>>>>>>>>>>>>>> don't have any sound suggestions ATM, so I'll have to think
>>>>>>>>> about
>>>>>>>>>>> it
>>>>>>>>>>>>> some
>>>>>>>>>>>>>>>> more, but I wanted to put the thought out there.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>> Bill
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Thu, Dec 21, 2017 at 9:06 AM, Jorge Esteban Quilcate
>>>>>>>> Otoya <
>>>>>>>>>>>>>>>> quilcate.jo...@gmail.com> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I have created a KIP to add Record Headers support to Kafka
>>>>>>>>>>> Streams
>>>>>>>>>>>>> API:
>>>>>>>>>>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-
>>>>>>>>>>>>>>>>> 244%3A+Add+Record+Header+support+to+Kafka+Streams
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> The main goal is to be able to use headers to filter, map
>>>>>>>> and
>>>>>>>>>>>> process
>>>>>>>>>>>>>>>>> records as streams. Stateful processing (joins, windows)
>> are
>>>>>>>>> not
>>>>>>>>>>>>>>>>> considered.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Proposed changes/Draft:
>>>>>>>>>>>>>>>>> https://github.com/apache/kafka/compare/trunk...jeqo:
>>>>>>>>>>>> streams-headers
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Feedback and suggestions are more than welcome.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Jorge.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> -- Guozhang
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
> 
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to