Well I guess my question for you, then, is what is holding you back from
full support for headers? What’s the bit that you’re missing that has you
under a full +1?

-Todd


On Thu, Dec 1, 2016 at 1:59 PM, Gwen Shapira <g...@confluent.io> wrote:

> I know why people who support headers support them, and I've seen what
> the discussion is like.
>
> This is why I'm asking people who are against headers (especially
> committers) what will make them change their mind - so we can get this
> part over one way or another.
>
> If I sound frustrated it is not at Radai, Jun or you (Todd)... I am
> just looking for something concrete we can do to move the discussion
> along to the yummy design details (which is the argument I really am
> looking forward to).
>
> On Thu, Dec 1, 2016 at 1:53 PM, Todd Palino <tpal...@gmail.com> wrote:
> > So, Gwen, to your question (even though I’m not a committer)...
> >
> > I have always been a strong supporter of introducing the concept of an
> > envelope to messages, which headers accomplishes. The message key is
> > already an example of a piece of envelope information. By providing a
> means
> > to do this within Kafka itself, and not relying on use-case specific
> > implementations, you make it much easier for components to interoperate.
> It
> > simplifies development of all these things (message routing, auditing,
> > encryption, etc.) because each one does not have to reinvent the wheel.
> >
> > It also makes it much easier from a client point of view if the headers
> are
> > defined as part of the protocol and/or message format in general because
> > you can easily produce and consume messages without having to take into
> > account specific cases. For example, I want to route messages, but
> client A
> > doesn’t support the way audit implemented headers, and client B doesn’t
> > support the way encryption or routing implemented headers, so now my
> > application has to create some really fragile (my autocorrect just tried
> to
> > make that “tragic”, which is probably appropriate too) code to strip
> > everything off, rather than just consuming the messages, picking out the
> 1
> > or 2 headers it’s interested in, and performing its function.
> >
> > Honestly, this discussion has been going on for a long time, and it’s
> > always “Oh, you came up with 2 use cases, and yeah, those use cases are
> > real things that someone would want to do. Here’s an alternate way to
> > implement them so let’s not do headers.” If we have a few use cases that
> we
> > actually came up with, you can be sure that over the next year there’s a
> > dozen others that we didn’t think of that someone would like to do. I
> > really think it’s time to stop rehashing this discussion and instead
> focus
> > on a workable standard that we can adopt.
> >
> > -Todd
> >
> >
> > On Thu, Dec 1, 2016 at 1:39 PM, Todd Palino <tpal...@gmail.com> wrote:
> >
> >> C. per message encryption
> >>> One drawback of this approach is that this significantly reduce the
> >>> effectiveness of compression, which happens on a set of serialized
> >>> messages. An alternative is to enable SSL for wire encryption and rely
> on
> >>> the storage system (e.g. LUKS) for at rest encryption.
> >>
> >>
> >> Jun, this is not sufficient. While this does cover the case of removing
> a
> >> drive from the system, it will not satisfy most compliance requirements
> for
> >> encryption of data as whoever has access to the broker itself still has
> >> access to the unencrypted data. For end-to-end encryption you need to
> >> encrypt at the producer, before it enters the system, and decrypt at the
> >> consumer, after it exits the system.
> >>
> >> -Todd
> >>
> >>
> >> On Thu, Dec 1, 2016 at 1:03 PM, radai <radai.rosenbl...@gmail.com>
> wrote:
> >>
> >>> another big plus of headers in the protocol is that it would enable
> rapid
> >>> iteration on ideas outside of core kafka and would reduce the number of
> >>> future wire format changes required.
> >>>
> >>> a lot of what is currently a KIP represents use cases that are not 100%
> >>> relevant to all users, and some of them require rather invasive wire
> >>> protocol changes. a thing a good recent example of this is kip-98.
> >>> tx-utilizing traffic is expected to be a very small fraction of total
> >>> traffic and yet the changes are invasive.
> >>>
> >>> every such wire format change translates into painful and slow
> adoption of
> >>> new versions.
> >>>
> >>> i think a lot of functionality currently in KIPs could be "spun out"
> and
> >>> implemented as opt-in plugins transmitting data over headers. this
> would
> >>> keep the core wire format stable(r), core codebase smaller, and avoid
> the
> >>> "burden of proof" thats sometimes required to prove a certain feature
> is
> >>> useful enough for a wide-enough audience to warrant a wire format
> change
> >>> and code complexity additions.
> >>>
> >>> (to be clear - kip-98 goes beyond "mere" wire format changes and im not
> >>> saying it could have been completely done with headers, but
> exactly-once
> >>> delivery certainly could)
> >>>
> >>> On Thu, Dec 1, 2016 at 11:20 AM, Gwen Shapira <g...@confluent.io>
> wrote:
> >>>
> >>> > On Thu, Dec 1, 2016 at 10:24 AM, radai <radai.rosenbl...@gmail.com>
> >>> wrote:
> >>> > > "For use cases within an organization, one could always use other
> >>> > > approaches such as company-wise containers"
> >>> > > this is what linkedin has traditionally done but there are now
> cases
> >>> > (read
> >>> > > - topics) where this is not acceptable. this makes headers useful
> even
> >>> > > within single orgs for cases where one-container-fits-all cannot
> >>> apply.
> >>> > >
> >>> > > as for the particular use cases listed, i dont want this to devolve
> >>> to a
> >>> > > discussion of particular use cases - i think its enough that some
> of
> >>> them
> >>> >
> >>> > I think a main point of contention is that: We identified few
> >>> > use-cases where headers are useful, do we want Kafka to be a system
> >>> > that supports those use-cases?
> >>> >
> >>> > For example, Jun said:
> >>> > "Not sure how widely useful record-level lineage is though since the
> >>> > overhead could
> >>> > be significant."
> >>> >
> >>> > We know NiFi supports record level lineage. I don't think it was
> >>> > developed for lols, I think it is safe to assume that the NSA needed
> >>> > that functionality. We also know that certain financial institutes
> >>> > need to track tampering with records at a record level and there are
> >>> > federal regulations that absolutely require this.  They also need to
> >>> > prove that routing apps that "touches" the messages and either reads
> >>> > or updates headers couldn't have possibly modified the payload
> itself.
> >>> > They use record level encryption to do that - apps can read and
> >>> > (sometimes) modify headers but can't touch the payload.
> >>> >
> >>> > We can totally say "those are corner cases and not worth adding
> >>> > headers to Kafka for", they should use a different pubsub message for
> >>> > that (Nifi or one of the other 1000 that cater specifically to the
> >>> > financial industry).
> >>> >
> >>> > But this gets us into a catch 22:
> >>> > If we discuss a specific use-case, someone can always say it isn't
> >>> > interesting enough for Kafka. If we discuss more general trends,
> >>> > others can say "well, we are not sure any of them really needs
> headers
> >>> > specifically. This is just hand waving and not interesting.".
> >>> >
> >>> > I think discussing use-cases in specifics is super important to
> decide
> >>> > implementation details for headers (my use-cases lean toward
> numerical
> >>> > keys with namespaces and object values, others differ), but I think
> we
> >>> > need to answer the general "Are we going to have headers" question
> >>> > first.
> >>> >
> >>> > I'd love to hear from the other committers in the discussion:
> >>> > What would it take to convince you that headers in Kafka are a good
> >>> > idea in general, so we can move ahead and try to agree on the
> details?
> >>> >
> >>> > I feel like we keep moving the goal posts and this is truly
> exhausting.
> >>> >
> >>> > For the record, I mildly support adding headers to Kafka (+0.5?).
> >>> > The community can continue to find workarounds to the issue and there
> >>> > are some benefits to keeping the message format and clients simpler.
> >>> > But I see the usefulness of headers to many use-cases and if we can
> >>> > find a good and generally useful way to add it to Kafka, it will make
> >>> > Kafka easier to use for many - worthy goal in my eyes.
> >>> >
> >>> > > are interesting/feasible, but:
> >>> > > A+B. i think there are use cases for polyglot topics. especially if
> >>> kafka
> >>> > > is being used to "trunk" something else.
> >>> > > D. multiple topics would make it harder to write portable consumer
> >>> code.
> >>> > > partition remapping would mess with locality of consumption
> >>> guarantees.
> >>> > > E+F. a use case I see for lineage/metadata is billing/chargeback.
> for
> >>> > that
> >>> > > use case it is not enough to simply record the point of origin, but
> >>> every
> >>> > > replication stop (think mirror maker) must also add a record to
> form a
> >>> > > "transit log".
> >>> > >
> >>> > > as for stream processing on top of kafka - i know samza has a
> metadata
> >>> > map
> >>> > > which they carry around in addition to user values. headers are the
> >>> > perfect
> >>> > > fit for these things.
> >>> > >
> >>> > >
> >>> > >
> >>> > > On Wed, Nov 30, 2016 at 6:50 PM, Jun Rao <j...@confluent.io> wrote:
> >>> > >
> >>> > >> Hi, Michael,
> >>> > >>
> >>> > >> In order to answer the first two questions, it would be helpful
> if we
> >>> > could
> >>> > >> identify 1 or 2 strong use cases for headers in the space for
> >>> > third-party
> >>> > >> vendors. For use cases within an organization, one could always
> use
> >>> > other
> >>> > >> approaches such as company-wise containers to get around w/o
> >>> headers. I
> >>> > >> went through the use cases in the KIP and in Radai's wiki (
> >>> > >> https://cwiki.apache.org/confluence/display/KAFKA/A+
> >>> > Case+for+Kafka+Headers
> >>> > >> ).
> >>> > >> The following are the ones that that I understand and could be in
> the
> >>> > >> third-party use case category.
> >>> > >>
> >>> > >> A. content-type
> >>> > >> It seems that in general, content-type should be set at the topic
> >>> level.
> >>> > >> Not sure if mixing messages with different content types should be
> >>> > >> encouraged.
> >>> > >>
> >>> > >> B. schema id
> >>> > >> Since the value is mostly useless without schema id, it seems that
> >>> > storing
> >>> > >> the schema id together with serialized bytes in the value is
> better?
> >>> > >>
> >>> > >> C. per message encryption
> >>> > >> One drawback of this approach is that this significantly reduce
> the
> >>> > >> effectiveness of compression, which happens on a set of serialized
> >>> > >> messages. An alternative is to enable SSL for wire encryption and
> >>> rely
> >>> > on
> >>> > >> the storage system (e.g. LUKS) for at rest encryption.
> >>> > >>
> >>> > >> D. cluster ID for mirroring across Kafka clusters
> >>> > >> This is actually interesting. Today, to avoid introducing cycles
> when
> >>> > doing
> >>> > >> mirroring across data centers, one would either have to set up two
> >>> Kafka
> >>> > >> clusters (a local and an aggregate) per data center or rename
> topics.
> >>> > >> Neither is ideal. With headers, the producer could tag each
> message
> >>> with
> >>> > >> the producing cluster ID in the header. MirrorMaker could then
> avoid
> >>> > >> mirroring messages to a cluster if they are tagged with the same
> >>> cluster
> >>> > >> id.
> >>> > >>
> >>> > >> However, an alternative approach is to introduce sth like
> >>> hierarchical
> >>> > >> topic and store messages from different clusters in different
> >>> partitions
> >>> > >> under the same topic. This approach avoids filtering out unneeded
> >>> data
> >>> > and
> >>> > >> makes offset preserving easier to support. It may make compaction
> >>> > trickier
> >>> > >> though since the same key may show up in different partitions.
> >>> > >>
> >>> > >> E. record-level lineage
> >>> > >> For example, a source connector could store in the message the
> >>> metadata
> >>> > >> (e.g. UUID) of the source record. Similarly, if a stream job
> >>> transforms
> >>> > >> messages from topic A to topic B, the library could include the
> >>> source
> >>> > >> message offset in each of the transformed message in the header.
> Not
> >>> > sure
> >>> > >> how widely useful record-level lineage is though since the
> overhead
> >>> > could
> >>> > >> be significant.
> >>> > >>
> >>> > >> F. auditing metadata
> >>> > >> We could put things like clientId/host/user in the header in each
> >>> > message
> >>> > >> for auditing. These metadata are really at the producer level
> though.
> >>> > So, a
> >>> > >> more efficient way is to only include a "producerId" per message
> and
> >>> > send
> >>> > >> the producerId -> metadata mapping independently. KIP-98 is
> actually
> >>> > >> proposing including such a producerId natively in the message.
> >>> > >>
> >>> > >> So, overall, I not sure that I am fully convinced of the strong
> >>> > third-party
> >>> > >> use cases of headers yet. Perhaps we could discuss a bit more to
> make
> >>> > one
> >>> > >> or two really convincing use cases.
> >>> > >>
> >>> > >> Another orthogonal  question is whether header should be exposed
> in
> >>> > stream
> >>> > >> processing systems such Kafka stream, Samza, and Spark streaming.
> >>> > >> Currently, those systems just deal with key/value pairs. Should we
> >>> > expose a
> >>> > >> third thing header there too or somehow map header to key or
> value?
> >>> > >>
> >>> > >> Thanks,
> >>> > >>
> >>> > >> Jun
> >>> > >>
> >>> > >>
> >>> > >> On Tue, Nov 29, 2016 at 3:35 AM, Michael Pearce <
> >>> michael.pea...@ig.com>
> >>> > >> wrote:
> >>> > >>
> >>> > >> > I assume, that after a period of a week, that there is no
> concerns
> >>> now
> >>> > >> > with points 1, and 2 and now we have agreement that headers are
> >>> useful
> >>> > >> and
> >>> > >> > needed in Kafka. As such if put to a KIP vote, this wouldn’t be
> a
> >>> > reason
> >>> > >> to
> >>> > >> > reject.
> >>> > >> >
> >>> > >> > @
> >>> > >> > Ignacio on point 4).
> >>> > >> > I think for purpose of getting this KIP moving past this, we can
> >>> state
> >>> > >> the
> >>> > >> > key will be a 4 bytes space that can will be naturally
> interpreted
> >>> as
> >>> > an
> >>> > >> > Int32 (if namespacing is later wanted you can easily split this
> >>> into
> >>> > two
> >>> > >> > int16 spaces), from the wire protocol implementation this makes
> no
> >>> > >> > difference I don’t believe. Is this reasonable to all?
> >>> > >> >
> >>> > >> > On 5) as per point 4 therefor happy we keep with 32 bits.
> >>> > >> >
> >>> > >> >
> >>> > >> >
> >>> > >> >
> >>> > >> >
> >>> > >> >
> >>> > >> > On 18/11/2016, 20:34, "ignacio.so...@gmail.com on behalf of
> >>> Ignacio
> >>> > >> > Solis" <ignacio.so...@gmail.com on behalf of iso...@igso.net>
> >>> wrote:
> >>> > >> >
> >>> > >> >     Summary:
> >>> > >> >
> >>> > >> >     3) Yes - Header value as byte[]
> >>> > >> >
> >>> > >> >     4a) Int,Int - No
> >>> > >> >     4b) Int - Yes
> >>> > >> >     4c) String - Reluctant maybe
> >>> > >> >
> >>> > >> >     5) I believe the header system should take a single int.  I
> >>> think
> >>> > >> > 32bits is
> >>> > >> >     a good size, if you want to interpret this as to 16bit
> numbers
> >>> in
> >>> > the
> >>> > >> > layer
> >>> > >> >     above go right ahead.  If somebody wants to argue for 16
> bits
> >>> or
> >>> > 64
> >>> > >> > bits of
> >>> > >> >     header key space I would listen.
> >>> > >> >
> >>> > >> >
> >>> > >> >     Discussion:
> >>> > >> >     Dividing the key space into sub_key_1 and sub_key_2 makes no
> >>> > sense to
> >>> > >> > me at
> >>> > >> >     this layer.  Are we going to start providing APIs to get all
> >>> the
> >>> > >> >     sub_key_1s? or all the sub_key_2s?  If there is no
> >>> distinguishing
> >>> > >> > functions
> >>> > >> >     that are applied to each one then they should be a single
> >>> value.
> >>> > At
> >>> > >> > this
> >>> > >> >     layer all we're doing is equality.
> >>> > >> >     If the above layer wants to interpret this as 2, 3 or more
> >>> values
> >>> > >> > that's a
> >>> > >> >     different question.  I personally think it's all one
> keyspace
> >>> > that is
> >>> > >> >     getting assigned using some structure, but if you want to
> >>> > sub-assign
> >>> > >> > parts
> >>> > >> >     of it then that's fine.
> >>> > >> >
> >>> > >> >     The same discussion applies to strings.  If somebody argued
> for
> >>> > >> > strings,
> >>> > >> >     would we be arguing to divide the strings with dots ('.')
> as a
> >>> > >> > requirement?
> >>> > >> >     Would we want them to give us the different name segments
> >>> > separately?
> >>> > >> >     Would we be performing any actions on this key other than
> >>> > matching?
> >>> > >> >
> >>> > >> >     Nacho
> >>> > >> >
> >>> > >> >
> >>> > >> >
> >>> > >> >     On Fri, Nov 18, 2016 at 9:30 AM, Michael Pearce <
> >>> > >> michael.pea...@ig.com
> >>> > >> > >
> >>> > >> >     wrote:
> >>> > >> >
> >>> > >> >     > #jay #jun any concerns on 1 and 2 still?
> >>> > >> >     >
> >>> > >> >     > @all
> >>> > >> >     > To get this moving along a bit more I'd also like to ask
> to
> >>> get
> >>> > >> > clarity on
> >>> > >> >     > the below last points:
> >>> > >> >     >
> >>> > >> >     > 3) I believe we're all roughly happy with the header value
> >>> > being a
> >>> > >> > byte[]?
> >>> > >> >     >
> >>> > >> >     > 4) I believe consensus has been for an namespace based int
> >>> > approach
> >>> > >> >     > {int,int} for the key. Any objections if this is what we
> go
> >>> > with?
> >>> > >> >     >
> >>> > >> >     > 5) as we have if assumption in (4)  is correct, {int,int}
> >>> keys.
> >>> > >> >     > Should both int's be int16 or int32?
> >>> > >> >     > I'm for them being int16(2 bytes) as combined is space of
> >>> > 4bytes as
> >>> > >> > per
> >>> > >> >     > original and gives plenty of combinations for the
> >>> foreseeable,
> >>> > and
> >>> > >> > keeps
> >>> > >> >     > the overhead small.
> >>> > >> >     >
> >>> > >> >     > Do we see any benefit in another kip call to discuss
> these at
> >>> > all?
> >>> > >> >     >
> >>> > >> >     > Cheers
> >>> > >> >     > Mike
> >>> > >> >     > ________________________________________
> >>> > >> >     > From: K Burstev <k.burs...@yandex.com>
> >>> > >> >     > Sent: Friday, November 18, 2016 7:07:07 AM
> >>> > >> >     > To: dev@kafka.apache.org
> >>> > >> >     > Subject: Re: [DISCUSS] KIP-82 - Add Record Headers
> >>> > >> >     >
> >>> > >> >     > For what it is worth also i agree. As a user:
> >>> > >> >     >
> >>> > >> >     >  1) Yes - Headers are worthwhile
> >>> > >> >     >  2) Yes - Headers should be a top level option
> >>> > >> >     >
> >>> > >> >     > 14.11.2016, 21:15, "Ignacio Solis" <iso...@igso.net>:
> >>> > >> >     > > 1) Yes - Headers are worthwhile
> >>> > >> >     > > 2) Yes - Headers should be a top level option
> >>> > >> >     > >
> >>> > >> >     > > On Mon, Nov 14, 2016 at 9:16 AM, Michael Pearce <
> >>> > >> > michael.pea...@ig.com>
> >>> > >> >     > > wrote:
> >>> > >> >     > >
> >>> > >> >     > >>  Hi Roger,
> >>> > >> >     > >>
> >>> > >> >     > >>  The kip details/examples the original proposal for key
> >>> > spacing
> >>> > >> ,
> >>> > >> > not
> >>> > >> >     > the
> >>> > >> >     > >>  new mentioned as per discussion namespace idea.
> >>> > >> >     > >>
> >>> > >> >     > >>  We will need to update the kip, when we get agreement
> >>> this
> >>> > is a
> >>> > >> > better
> >>> > >> >     > >>  approach (which seems to be the case if I have
> understood
> >>> > the
> >>> > >> > general
> >>> > >> >     > >>  feeling in the conversation)
> >>> > >> >     > >>
> >>> > >> >     > >>  Re the variable ints, at very early stage we did think
> >>> about
> >>> > >> > this. I
> >>> > >> >     > think
> >>> > >> >     > >>  the added complexity for the saving isn't worth it.
> I'd
> >>> > rather
> >>> > >> go
> >>> > >> >     > with, if
> >>> > >> >     > >>  we want to reduce overheads and size int16 (2bytes)
> keys
> >>> as
> >>> > it
> >>> > >> > keeps it
> >>> > >> >     > >>  simple.
> >>> > >> >     > >>
> >>> > >> >     > >>  On the note of no headers, there is as per the kip as
> we
> >>> > use an
> >>> > >> >     > attribute
> >>> > >> >     > >>  bit to denote if headers are present or not as such
> >>> > provides a
> >>> > >> > zero
> >>> > >> >     > >>  overhead currently if headers are not used.
> >>> > >> >     > >>
> >>> > >> >     > >>  I think as radai mentions would be good first if we
> can
> >>> get
> >>> > >> > clarity if
> >>> > >> >     > do
> >>> > >> >     > >>  we now have general consensus that (1) headers are
> >>> > worthwhile
> >>> > >> and
> >>> > >> >     > useful,
> >>> > >> >     > >>  and (2) we want it as a top level entity.
> >>> > >> >     > >>
> >>> > >> >     > >>  Just to state the obvious i believe (1) headers are
> >>> > worthwhile
> >>> > >> > and (2)
> >>> > >> >     > >>  agree as a top level entity.
> >>> > >> >     > >>
> >>> > >> >     > >>  Cheers
> >>> > >> >     > >>  Mike
> >>> > >> >     > >>  ________________________________________
> >>> > >> >     > >>  From: Roger Hoover <roger.hoo...@gmail.com>
> >>> > >> >     > >>  Sent: Wednesday, November 9, 2016 9:10:47 PM
> >>> > >> >     > >>  To: dev@kafka.apache.org
> >>> > >> >     > >>  Subject: Re: [DISCUSS] KIP-82 - Add Record Headers
> >>> > >> >     > >>
> >>> > >> >     > >>  Sorry for going a little in the weeds but thanks for
> the
> >>> > >> replies
> >>> > >> >     > regarding
> >>> > >> >     > >>  varint.
> >>> > >> >     > >>
> >>> > >> >     > >>  Agreed that a prefix and {int, int} can be the same.
> It
> >>> > doesn't
> >>> > >> > look
> >>> > >> >     > like
> >>> > >> >     > >>  that's what the KIP is saying the "Open" section. The
> >>> > example
> >>> > >> > shows
> >>> > >> >     > >>  2100001
> >>> > >> >     > >>  for New Relic and 210002 for App Dynamics implying
> that
> >>> the
> >>> > New
> >>> > >> > Relic
> >>> > >> >     > >>  organization will have only a single header id to work
> >>> > with. Or
> >>> > >> > is
> >>> > >> >     > 2100001
> >>> > >> >     > >>  a prefix? The main point of a namespace or prefix is
> to
> >>> > reduce
> >>> > >> > the
> >>> > >> >     > >>  overhead of config mapping or registration depending
> on
> >>> how
> >>> > >> >     > >>  namespaces/prefixes are managed.
> >>> > >> >     > >>
> >>> > >> >     > >>  Would love to hear more feedback on the higher-level
> >>> > questions
> >>> > >> >     > though...
> >>> > >> >     > >>
> >>> > >> >     > >>  Cheers,
> >>> > >> >     > >>
> >>> > >> >     > >>  Roger
> >>> > >> >     > >>
> >>> > >> >     > >>  On Wed, Nov 9, 2016 at 11:38 AM, radai <
> >>> > >> > radai.rosenbl...@gmail.com>
> >>> > >> >     > wrote:
> >>> > >> >     > >>
> >>> > >> >     > >>  > I think this discussion is getting a bit into the
> >>> weeds on
> >>> > >> > technical
> >>> > >> >     > >>  > implementation details.
> >>> > >> >     > >>  > I'd liek to step back a minute and try and establish
> >>> > where we
> >>> > >> > are in
> >>> > >> >     > the
> >>> > >> >     > >>  > larger picture:
> >>> > >> >     > >>  >
> >>> > >> >     > >>  > (re-wording nacho's last paragraph)
> >>> > >> >     > >>  > 1. are we all in agreement that headers are a
> >>> worthwhile
> >>> > and
> >>> > >> > useful
> >>> > >> >     > >>  > addition to have? this was contested early on
> >>> > >> >     > >>  > 2. are we all in agreement on headers as top level
> >>> entity
> >>> > vs
> >>> > >> > headers
> >>> > >> >     > >>  > squirreled-away in V?
> >>> > >> >     > >>  >
> >>> > >> >     > >>  > if there are still concerns around these #2 points
> >>> (#jay?
> >>> > >> > #jun?)?
> >>> > >> >     > >>  >
> >>> > >> >     > >>  > (and now back to our normal programming ...)
> >>> > >> >     > >>  >
> >>> > >> >     > >>  > varints are nice. having said that, its adding
> >>> complexity
> >>> > >> (see
> >>> > >> >     > >>  > https://github.com/addthis/
> stream-lib/blob/master/src/
> >>> > >> >     > >>  > main/java/com/clearspring/
> analytics/util/Varint.java
> >>> > >> >     > >>  > as 1st google result) and would require anyone
> writing
> >>> > other
> >>> > >> > clients
> >>> > >> >     > (C?
> >>> > >> >     > >>  > Python? Go? Bash? ;-) ) to get/implement the same,
> and
> >>> for
> >>> > >> > relatively
> >>> > >> >     > >>  > little gain (int vs string is order of magnitude,
> this
> >>> > isnt).
> >>> > >> >     > >>  >
> >>> > >> >     > >>  > int namespacing vs {int, int} namespacing are
> basically
> >>> > the
> >>> > >> > same
> >>> > >> >     > thing -
> >>> > >> >     > >>  > youre just namespacing an int64 and giving people
> while
> >>> > 2^32
> >>> > >> > ranges
> >>> > >> >     > at a
> >>> > >> >     > >>  > time. the part i like about this is letting people
> >>> have a
> >>> > >> large
> >>> > >> >     > swath of
> >>> > >> >     > >>  > numbers with one registration so they dont have to
> come
> >>> > back
> >>> > >> > for
> >>> > >> >     > every
> >>> > >> >     > >>  > single plugin/header they want to "reserve".
> >>> > >> >     > >>  >
> >>> > >> >     > >>  >
> >>> > >> >     > >>  > On Wed, Nov 9, 2016 at 11:01 AM, Roger Hoover <
> >>> > >> >     > roger.hoo...@gmail.com>
> >>> > >> >     > >>  > wrote:
> >>> > >> >     > >>  >
> >>> > >> >     > >>  > > Since some of the debate has been about overhead +
> >>> > >> > performance, I'm
> >>> > >> >     > >>  > > wondering if we have considered a varint encoding
> (
> >>> > >> >     > >>  > > https://developers.google.com/
> protocol-buffers/docs/
> >>> > >> >     > encoding#varints)
> >>> > >> >     > >>  > for
> >>> > >> >     > >>  > > the header length field (int32 in the proposal)
> and
> >>> for
> >>> > >> > header
> >>> > >> >     > ids? If
> >>> > >> >     > >>  > you
> >>> > >> >     > >>  > > don't use headers, the overhead would be a single
> >>> byte
> >>> > and
> >>> > >> > for each
> >>> > >> >     > >>  > header
> >>> > >> >     > >>  > > id < 128 would also need only a single byte?
> >>> > >> >     > >>  > >
> >>> > >> >     > >>  > >
> >>> > >> >     > >>  > >
> >>> > >> >     > >>  > > On Wed, Nov 9, 2016 at 6:43 AM, radai <
> >>> > >> > radai.rosenbl...@gmail.com>
> >>> > >> >     > >>  > wrote:
> >>> > >> >     > >>  > >
> >>> > >> >     > >>  > > > @magnus - and very dangerous (youre essentially
> >>> > >> > downloading and
> >>> > >> >     > >>  > executing
> >>> > >> >     > >>  > > > arbitrary code off the internet on your servers
> ...
> >>> > bad
> >>> > >> > idea
> >>> > >> >     > without
> >>> > >> >     > >>  a
> >>> > >> >     > >>  > > > sandbox, even with)
> >>> > >> >     > >>  > > >
> >>> > >> >     > >>  > > > as for it being a purely administrative task - i
> >>> > >> disagree.
> >>> > >> >     > >>  > > >
> >>> > >> >     > >>  > > > i wish it would, really, because then my earlier
> >>> > point on
> >>> > >> > the
> >>> > >> >     > >>  > complexity
> >>> > >> >     > >>  > > of
> >>> > >> >     > >>  > > > the remapping process would be invalid, but at
> >>> > linkedin,
> >>> > >> > for
> >>> > >> >     > example,
> >>> > >> >     > >>  > we
> >>> > >> >     > >>  > > > (the team im in) run kafka as a service. we dont
> >>> > really
> >>> > >> > know
> >>> > >> >     > what our
> >>> > >> >     > >>  > > users
> >>> > >> >     > >>  > > > (developing applications that use kafka) are up
> to
> >>> at
> >>> > any
> >>> > >> > given
> >>> > >> >     > >>  moment.
> >>> > >> >     > >>  > > it
> >>> > >> >     > >>  > > > is very possible (given the existance of headers
> >>> and a
> >>> > >> >     > corresponding
> >>> > >> >     > >>  > > plugin
> >>> > >> >     > >>  > > > ecosystem) for some application to "equip" their
> >>> > >> producers
> >>> > >> > and
> >>> > >> >     > >>  > consumers
> >>> > >> >     > >>  > > > with the required plugin without us knowing. i
> dont
> >>> > mean
> >>> > >> > to imply
> >>> > >> >     > >>  thats
> >>> > >> >     > >>  > > > bad, i just want to make the point that its not
> as
> >>> > simple
> >>> > >> >     > keeping it
> >>> > >> >     > >>  in
> >>> > >> >     > >>  > > > sync across a large-enough organization.
> >>> > >> >     > >>  > > >
> >>> > >> >     > >>  > > >
> >>> > >> >     > >>  > > > On Wed, Nov 9, 2016 at 6:17 AM, Magnus Edenhill
> <
> >>> > >> >     > mag...@edenhill.se>
> >>> > >> >     > >>  > > > wrote:
> >>> > >> >     > >>  > > >
> >>> > >> >     > >>  > > > > I think there is a piece missing in the
> Strings
> >>> > >> > discussion,
> >>> > >> >     > where
> >>> > >> >     > >>  > > > > pro-Stringers
> >>> > >> >     > >>  > > > > reason that by providing unique string
> >>> identifiers
> >>> > for
> >>> > >> > each
> >>> > >> >     > header
> >>> > >> >     > >>  > > > > everything will just
> >>> > >> >     > >>  > > > > magically work for all parts of the stream
> >>> pipeline.
> >>> > >> >     > >>  > > > >
> >>> > >> >     > >>  > > > > But the strings dont mean anything by
> themselves,
> >>> > and
> >>> > >> > while we
> >>> > >> >     > >>  could
> >>> > >> >     > >>  > > > > probably envision
> >>> > >> >     > >>  > > > > some auto plugin loader that downloads,
> compiles,
> >>> > links
> >>> > >> > and
> >>> > >> >     > runs
> >>> > >> >     > >>  > > plugins
> >>> > >> >     > >>  > > > > on-demand
> >>> > >> >     > >>  > > > > as soon as they're seen by a consumer, I dont
> >>> really
> >>> > >> see
> >>> > >> > a
> >>> > >> >     > use-case
> >>> > >> >     > >>  > for
> >>> > >> >     > >>  > > > > something
> >>> > >> >     > >>  > > > > so dynamic (and fragile) in practice.
> >>> > >> >     > >>  > > > >
> >>> > >> >     > >>  > > > > In the real world an application will be
> >>> configured
> >>> > >> with
> >>> > >> > a set
> >>> > >> >     > of
> >>> > >> >     > >>  > > plugins
> >>> > >> >     > >>  > > > > to either add (producer)
> >>> > >> >     > >>  > > > > or read (consumer) headers.
> >>> > >> >     > >>  > > > > This is an administrative task based on what
> >>> > features a
> >>> > >> > client
> >>> > >> >     > >>  > > > > needs/provides and results in
> >>> > >> >     > >>  > > > > some sort of configuration to enable and
> >>> configure
> >>> > the
> >>> > >> > desired
> >>> > >> >     > >>  > plugins.
> >>> > >> >     > >>  > > > >
> >>> > >> >     > >>  > > > > Since this needs to be kept somewhat in sync
> >>> across
> >>> > an
> >>> > >> >     > organisation
> >>> > >> >     > >>  > > > (there
> >>> > >> >     > >>  > > > > is no point in having producers
> >>> > >> >     > >>  > > > > add headers no consumers will read, and vice
> >>> versa),
> >>> > >> the
> >>> > >> > added
> >>> > >> >     > >>  > > complexity
> >>> > >> >     > >>  > > > > of assigning an id namespace
> >>> > >> >     > >>  > > > > for each plugin as it is being configured
> should
> >>> be
> >>> > >> > tolerable.
> >>> > >> >     > >>  > > > >
> >>> > >> >     > >>  > > > >
> >>> > >> >     > >>  > > > > /Magnus
> >>> > >> >     > >>  > > > >
> >>> > >> >     > >>  > > > > 2016-11-09 13:06 GMT+01:00 Michael Pearce <
> >>> > >> >     > michael.pea...@ig.com>:
> >>> > >> >     > >>  > > > >
> >>> > >> >     > >>  > > > > > Just following/catching up on what seems to
> be
> >>> an
> >>> > >> > active
> >>> > >> >     > night :)
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > > @Radai sorry if it may seem obvious but what
> >>> does
> >>> > MD
> >>> > >> > stand
> >>> > >> >     > for?
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > > My take on String vs Int:
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > > I will state first I am pro Int (16 or 32).
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > > I do though playing devils advocate see a
> big
> >>> plus
> >>> > >> > with the
> >>> > >> >     > >>  > argument
> >>> > >> >     > >>  > > of
> >>> > >> >     > >>  > > > > > String keys, this is around integrating
> into an
> >>> > >> > existing
> >>> > >> >     > >>  > eco-system.
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > > As many other systems use String based
> headers
> >>> > >> (Flume,
> >>> > >> > JMS)
> >>> > >> >     > it
> >>> > >> >     > >>  > makes
> >>> > >> >     > >>  > > > it
> >>> > >> >     > >>  > > > > > much easier for these to be
> >>> > incorporated/integrated
> >>> > >> > into.
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > > How with Int based headers could we provide
> a
> >>> > >> > way/guidence to
> >>> > >> >     > >>  make
> >>> > >> >     > >>  > > this
> >>> > >> >     > >>  > > > > > integration simple / easy with transition
> flows
> >>> > over
> >>> > >> to
> >>> > >> >     > kafka?
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > > * tough luck buddy you're on your own
> >>> > >> >     > >>  > > > > > * simply hash the string into int code and
> hope
> >>> > for
> >>> > >> no
> >>> > >> >     > collisions
> >>> > >> >     > >>  > > (how
> >>> > >> >     > >>  > > > to
> >>> > >> >     > >>  > > > > > convert back though?)
> >>> > >> >     > >>  > > > > > * http2 style as mentioned by nacho.
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > > cheers,
> >>> > >> >     > >>  > > > > > Mike
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > > ________________________________________
> >>> > >> >     > >>  > > > > > From: radai <radai.rosenbl...@gmail.com>
> >>> > >> >     > >>  > > > > > Sent: Wednesday, November 9, 2016 8:12 AM
> >>> > >> >     > >>  > > > > > To: dev@kafka.apache.org
> >>> > >> >     > >>  > > > > > Subject: Re: [DISCUSS] KIP-82 - Add Record
> >>> Headers
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > > thinking about it some more, the best way to
> >>> > transmit
> >>> > >> > the
> >>> > >> >     > header
> >>> > >> >     > >>  > > > > remapping
> >>> > >> >     > >>  > > > > > data to consumers would be to put it in the
> MD
> >>> > >> response
> >>> > >> >     > payload,
> >>> > >> >     > >>  so
> >>> > >> >     > >>  > > > maybe
> >>> > >> >     > >>  > > > > > it should be discussed now.
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > > On Wed, Nov 9, 2016 at 12:09 AM, radai <
> >>> > >> >     > >>  radai.rosenbl...@gmail.com
> >>> > >> >     > >>  > >
> >>> > >> >     > >>  > > > > wrote:
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > > > im not opposed to the idea of namespace
> >>> mapping.
> >>> > >> all
> >>> > >> > im
> >>> > >> >     > saying
> >>> > >> >     > >>  is
> >>> > >> >     > >>  > > > that
> >>> > >> >     > >>  > > > > > its
> >>> > >> >     > >>  > > > > > > not part of the "mvp" and, since it
> requires
> >>> no
> >>> > >> wire
> >>> > >> > format
> >>> > >> >     > >>  > change,
> >>> > >> >     > >>  > > > can
> >>> > >> >     > >>  > > > > > > always be added later.
> >>> > >> >     > >>  > > > > > > also, its not as simple as just
> configuring
> >>> MM
> >>> > to
> >>> > >> do
> >>> > >> > the
> >>> > >> >     > >>  > transform:
> >>> > >> >     > >>  > > > > lets
> >>> > >> >     > >>  > > > > > > say i've implemented large message
> support as
> >>> > >> > {666,1} and
> >>> > >> >     > on
> >>> > >> >     > >>  some
> >>> > >> >     > >>  > > > > mirror
> >>> > >> >     > >>  > > > > > > target cluster its been remapped to
> {999,1}.
> >>> the
> >>> > >> > consumer
> >>> > >> >     > >>  plugin
> >>> > >> >     > >>  > > code
> >>> > >> >     > >>  > > > > > would
> >>> > >> >     > >>  > > > > > > also need to be told to look for the large
> >>> > message
> >>> > >> > "part X
> >>> > >> >     > of
> >>> > >> >     > >>  Y"
> >>> > >> >     > >>  > > > header
> >>> > >> >     > >>  > > > > > > under {999,1}. doable, but tricky.
> >>> > >> >     > >>  > > > > > >
> >>> > >> >     > >>  > > > > > > On Tue, Nov 8, 2016 at 10:29 PM, Gwen
> >>> Shapira <
> >>> > >> >     > >>  g...@confluent.io
> >>> > >> >     > >>  > >
> >>> > >> >     > >>  > > > > wrote:
> >>> > >> >     > >>  > > > > > >
> >>> > >> >     > >>  > > > > > >> While you can do whatever you want with a
> >>> > >> namespace
> >>> > >> > and
> >>> > >> >     > your
> >>> > >> >     > >>  > code,
> >>> > >> >     > >>  > > > > > >> what I'd expect is for each app to
> >>> namespaces
> >>> > >> >     > configurable...
> >>> > >> >     > >>  > > > > > >>
> >>> > >> >     > >>  > > > > > >> So if I accidentally used 666 for my HR
> >>> > >> department,
> >>> > >> > and
> >>> > >> >     > still
> >>> > >> >     > >>  > want
> >>> > >> >     > >>  > > > to
> >>> > >> >     > >>  > > > > > >> run RadaiApp, I can config "namespace=42"
> >>> for
> >>> > >> > RadaiApp and
> >>> > >> >     > >>  > > > everything
> >>> > >> >     > >>  > > > > > >> will look normal.
> >>> > >> >     > >>  > > > > > >>
> >>> > >> >     > >>  > > > > > >> This means you only need to sync usage
> >>> inside
> >>> > your
> >>> > >> > own
> >>> > >> >     > >>  > > organization.
> >>> > >> >     > >>  > > > > > >> Still hard, but somewhat easier than
> syncing
> >>> > with
> >>> > >> > the
> >>> > >> >     > entire
> >>> > >> >     > >>  > > world.
> >>> > >> >     > >>  > > > > > >>
> >>> > >> >     > >>  > > > > > >> On Tue, Nov 8, 2016 at 10:07 PM, radai <
> >>> > >> >     > >>  > > radai.rosenbl...@gmail.com>
> >>> > >> >     > >>  > > > > > >> wrote:
> >>> > >> >     > >>  > > > > > >> > and we can start with {namespace, id}
> and
> >>> no
> >>> > >> > re-mapping
> >>> > >> >     > >>  > support
> >>> > >> >     > >>  > > > and
> >>> > >> >     > >>  > > > > > >> always
> >>> > >> >     > >>  > > > > > >> > add it later on if/when collisions
> >>> actually
> >>> > >> > happen (i
> >>> > >> >     > dont
> >>> > >> >     > >>  > think
> >>> > >> >     > >>  > > > > > they'd
> >>> > >> >     > >>  > > > > > >> be
> >>> > >> >     > >>  > > > > > >> > a problem).
> >>> > >> >     > >>  > > > > > >> >
> >>> > >> >     > >>  > > > > > >> > every interested party (so orgs or
> >>> > individuals)
> >>> > >> > could
> >>> > >> >     > then
> >>> > >> >     > >>  > > > register
> >>> > >> >     > >>  > > > > a
> >>> > >> >     > >>  > > > > > >> > prefix (0 = reserved, 1 = confluent ...
> >>> 666
> >>> > = me
> >>> > >> > :-) )
> >>> > >> >     > and
> >>> > >> >     > >>  do
> >>> > >> >     > >>  > > > > whatever
> >>> > >> >     > >>  > > > > > >> with
> >>> > >> >     > >>  > > > > > >> > the 2nd ID - so once linkedin
> registers,
> >>> say
> >>> > 3,
> >>> > >> > then
> >>> > >> >     > >>  linkedin
> >>> > >> >     > >>  > > devs
> >>> > >> >     > >>  > > > > are
> >>> > >> >     > >>  > > > > > >> free
> >>> > >> >     > >>  > > > > > >> > to use {3, *} with a reasonable
> >>> expectation
> >>> > to
> >>> > >> to
> >>> > >> >     > collide
> >>> > >> >     > >>  with
> >>> > >> >     > >>  > > > > > anything
> >>> > >> >     > >>  > > > > > >> > else. further partitioning of that *
> >>> becomes
> >>> > >> > linkedin's
> >>> > >> >     > >>  > problem,
> >>> > >> >     > >>  > > > but
> >>> > >> >     > >>  > > > > > the
> >>> > >> >     > >>  > > > > > >> > "upstream registration" of a namespace
> >>> only
> >>> > has
> >>> > >> to
> >>> > >> >     > happen
> >>> > >> >     > >>  > once.
> >>> > >> >     > >>  > > > > > >> >
> >>> > >> >     > >>  > > > > > >> > On Tue, Nov 8, 2016 at 9:03 PM, James
> >>> Cheng <
> >>> > >> >     > >>  > > wushuja...@gmail.com
> >>> > >> >     > >>  > > > >
> >>> > >> >     > >>  > > > > > >> wrote:
> >>> > >> >     > >>  > > > > > >> >
> >>> > >> >     > >>  > > > > > >> >>
> >>> > >> >     > >>  > > > > > >> >>
> >>> > >> >     > >>  > > > > > >> >>
> >>> > >> >     > >>  > > > > > >> >> > On Nov 8, 2016, at 5:54 PM, Gwen
> >>> Shapira <
> >>> > >> >     > >>  > g...@confluent.io>
> >>> > >> >     > >>  > > > > > wrote:
> >>> > >> >     > >>  > > > > > >> >> >
> >>> > >> >     > >>  > > > > > >> >> > Thank you so much for this clear and
> >>> fair
> >>> > >> > summary of
> >>> > >> >     > the
> >>> > >> >     > >>  > > > > arguments.
> >>> > >> >     > >>  > > > > > >> >> >
> >>> > >> >     > >>  > > > > > >> >> > I'm in favor of ints. Not a
> >>> deal-breaker,
> >>> > but
> >>> > >> > in
> >>> > >> >     > favor.
> >>> > >> >     > >>  > > > > > >> >> >
> >>> > >> >     > >>  > > > > > >> >> > Even more in favor of Magnus's
> >>> > decentralized
> >>> > >> >     > suggestion
> >>> > >> >     > >>  > with
> >>> > >> >     > >>  > > > > > Roger's
> >>> > >> >     > >>  > > > > > >> >> > tweak: add a namespace for headers.
> >>> This
> >>> > will
> >>> > >> > allow
> >>> > >> >     > each
> >>> > >> >     > >>  > app
> >>> > >> >     > >>  > > to
> >>> > >> >     > >>  > > > > > just
> >>> > >> >     > >>  > > > > > >> >> > use whatever IDs it wants
> internally,
> >>> and
> >>> > >> then
> >>> > >> > let
> >>> > >> >     > the
> >>> > >> >     > >>  > admin
> >>> > >> >     > >>  > > > > > >> deploying
> >>> > >> >     > >>  > > > > > >> >> > the app figure out an available
> >>> namespace
> >>> > ID
> >>> > >> > for the
> >>> > >> >     > app
> >>> > >> >     > >>  to
> >>> > >> >     > >>  > > > live
> >>> > >> >     > >>  > > > > > in.
> >>> > >> >     > >>  > > > > > >> >> > So io.confluent.schema-registry can
> be
> >>> > >> > namespace
> >>> > >> >     > 0x01 on
> >>> > >> >     > >>  my
> >>> > >> >     > >>  > > > > > >> deployment
> >>> > >> >     > >>  > > > > > >> >> > and 0x57 on yours, and the poor guys
> >>> > >> > developing the
> >>> > >> >     > app
> >>> > >> >     > >>  > don't
> >>> > >> >     > >>  > > > > need
> >>> > >> >     > >>  > > > > > to
> >>> > >> >     > >>  > > > > > >> >> > worry about that.
> >>> > >> >     > >>  > > > > > >> >> >
> >>> > >> >     > >>  > > > > > >> >>
> >>> > >> >     > >>  > > > > > >> >> Gwen, if I understand your example
> >>> right, an
> >>> > >> >     > application
> >>> > >> >     > >>  > > deployer
> >>> > >> >     > >>  > > > > > might
> >>> > >> >     > >>  > > > > > >> >> decide to use 0x01 in one deployment,
> and
> >>> > that
> >>> > >> > means
> >>> > >> >     > that
> >>> > >> >     > >>  > once
> >>> > >> >     > >>  > > > the
> >>> > >> >     > >>  > > > > > >> message
> >>> > >> >     > >>  > > > > > >> >> is written into the broker, it will be
> >>> > saved on
> >>> > >> > the
> >>> > >> >     > broker
> >>> > >> >     > >>  > with
> >>> > >> >     > >>  > > > > that
> >>> > >> >     > >>  > > > > > >> >> specific namespace (0x01).
> >>> > >> >     > >>  > > > > > >> >>
> >>> > >> >     > >>  > > > > > >> >> If you were to mirror that message
> into
> >>> > another
> >>> > >> >     > cluster,
> >>> > >> >     > >>  the
> >>> > >> >     > >>  > > 0x01
> >>> > >> >     > >>  > > > > > would
> >>> > >> >     > >>  > > > > > >> >> accompany the message, right? What if
> the
> >>> > >> > deployers of
> >>> > >> >     > the
> >>> > >> >     > >>  > same
> >>> > >> >     > >>  > > > app
> >>> > >> >     > >>  > > > > > in
> >>> > >> >     > >>  > > > > > >> the
> >>> > >> >     > >>  > > > > > >> >> other cluster uses 0x57? They won't
> >>> > understand
> >>> > >> > each
> >>> > >> >     > other?
> >>> > >> >     > >>  > > > > > >> >>
> >>> > >> >     > >>  > > > > > >> >> I'm not sure that's an avoidable
> >>> problem. I
> >>> > >> > think it
> >>> > >> >     > simply
> >>> > >> >     > >>  > > means
> >>> > >> >     > >>  > > > > > that
> >>> > >> >     > >>  > > > > > >> in
> >>> > >> >     > >>  > > > > > >> >> order to share data, you have to also
> >>> have a
> >>> > >> > shared
> >>> > >> >     > (agreed
> >>> > >> >     > >>  > > upon)
> >>> > >> >     > >>  > > > > > >> >> understanding of what the namespaces
> >>> mean.
> >>> > >> Which
> >>> > >> > I
> >>> > >> >     > think
> >>> > >> >     > >>  > makes
> >>> > >> >     > >>  > > > > sense,
> >>> > >> >     > >>  > > > > > >> >> because the alternate (sharing
> *nothing*
> >>> at
> >>> > >> all)
> >>> > >> > would
> >>> > >> >     > mean
> >>> > >> >     > >>  > > that
> >>> > >> >     > >>  > > > > > there
> >>> > >> >     > >>  > > > > > >> >> would be no way to understand each
> other.
> >>> > >> >     > >>  > > > > > >> >>
> >>> > >> >     > >>  > > > > > >> >> -James
> >>> > >> >     > >>  > > > > > >> >>
> >>> > >> >     > >>  > > > > > >> >> > Gwen
> >>> > >> >     > >>  > > > > > >> >> >
> >>> > >> >     > >>  > > > > > >> >> > On Tue, Nov 8, 2016 at 4:23 PM,
> radai <
> >>> > >> >     > >>  > > > > radai.rosenbl...@gmail.com>
> >>> > >> >     > >>  > > > > > >> >> wrote:
> >>> > >> >     > >>  > > > > > >> >> >> +1 for sean's document. it covers
> >>> pretty
> >>> > >> much
> >>> > >> > all
> >>> > >> >     > the
> >>> > >> >     > >>  > > > trade-offs
> >>> > >> >     > >>  > > > > > and
> >>> > >> >     > >>  > > > > > >> >> >> provides concrete figures to argue
> >>> about
> >>> > :-)
> >>> > >> >     > >>  > > > > > >> >> >> (nit-picking - used the same xkcd
> >>> twice,
> >>> > >> also
> >>> > >> > trove
> >>> > >> >     > has
> >>> > >> >     > >>  > been
> >>> > >> >     > >>  > > > > > >> superceded
> >>> > >> >     > >>  > > > > > >> >> for
> >>> > >> >     > >>  > > > > > >> >> >> purposes of high performance
> >>> collections:
> >>> > >> > look at
> >>> > >> >     > >>  > > > > > >> >> >> https://github.com/leventov/
> Koloboke)
> >>> > >> >     > >>  > > > > > >> >> >>
> >>> > >> >     > >>  > > > > > >> >> >> so to sum up the string vs int
> debate:
> >>> > >> >     > >>  > > > > > >> >> >>
> >>> > >> >     > >>  > > > > > >> >> >> performance - you can do 140k
> ops/sec
> >>> > _per
> >>> > >> > thread_
> >>> > >> >     > with
> >>> > >> >     > >>  > > string
> >>> > >> >     > >>  > > > > > >> headers.
> >>> > >> >     > >>  > > > > > >> >> you
> >>> > >> >     > >>  > > > > > >> >> >> could do x2-3 better with ints.
> >>> there's
> >>> > no
> >>> > >> > arguing
> >>> > >> >     > the
> >>> > >> >     > >>  > > > relative
> >>> > >> >     > >>  > > > > > diff
> >>> > >> >     > >>  > > > > > >> >> >> between the two, there's only the
> >>> > question
> >>> > >> of
> >>> > >> >     > whether or
> >>> > >> >     > >>  > not
> >>> > >> >     > >>  > > > > _the
> >>> > >> >     > >>  > > > > > >> rest
> >>> > >> >     > >>  > > > > > >> >> of
> >>> > >> >     > >>  > > > > > >> >> >> kafka_ operates fast enough to
> care.
> >>> if
> >>> > we
> >>> > >> > want to
> >>> > >> >     > make
> >>> > >> >     > >>  > > > choices
> >>> > >> >     > >>  > > > > > >> solely
> >>> > >> >     > >>  > > > > > >> >> >> based on performance we need ints.
> if
> >>> we
> >>> > are
> >>> > >> >     > willing to
> >>> > >> >     > >>  > > > > > >> >> settle/compromise
> >>> > >> >     > >>  > > > > > >> >> >> for a nicer (to some) API than
> strings
> >>> > are
> >>> > >> > good
> >>> > >> >     > enough
> >>> > >> >     > >>  for
> >>> > >> >     > >>  > > the
> >>> > >> >     > >>  > > > > > >> current
> >>> > >> >     > >>  > > > > > >> >> >> state of affairs.
> >>> > >> >     > >>  > > > > > >> >> >>
> >>> > >> >     > >>  > > > > > >> >> >> message size - with batching and
> >>> > compression
> >>> > >> > it
> >>> > >> >     > comes
> >>> > >> >     > >>  down
> >>> > >> >     > >>  > > to
> >>> > >> >     > >>  > > > a
> >>> > >> >     > >>  > > > > > ~5%
> >>> > >> >     > >>  > > > > > >> >> >> difference (internal testing, not
> in
> >>> the
> >>> > >> doc.
> >>> > >> > maybe
> >>> > >> >     > >>  would
> >>> > >> >     > >>  > > help
> >>> > >> >     > >>  > > > > > >> adding if
> >>> > >> >     > >>  > > > > > >> >> >> this becomes a point of
> contention?).
> >>> > this
> >>> > >> > means it
> >>> > >> >     > wont
> >>> > >> >     > >>  > > > really
> >>> > >> >     > >>  > > > > > >> affect
> >>> > >> >     > >>  > > > > > >> >> >> kafka in "throughput mode" (large,
> >>> > >> compressed
> >>> > >> >     > batches).
> >>> > >> >     > >>  in
> >>> > >> >     > >>  > > > "low
> >>> > >> >     > >>  > > > > > >> latency"
> >>> > >> >     > >>  > > > > > >> >> >> mode (meaning less/no batching and
> >>> > >> > compression) the
> >>> > >> >     > >>  > > difference
> >>> > >> >     > >>  > > > > can
> >>> > >> >     > >>  > > > > > >> be
> >>> > >> >     > >>  > > > > > >> >> >> extreme (it'll easily be an order
> of
> >>> > >> > magnitude with
> >>> > >> >     > >>  small
> >>> > >> >     > >>  > > > > payloads
> >>> > >> >     > >>  > > > > > >> like
> >>> > >> >     > >>  > > > > > >> >> >> stock ticks and header keys of the
> >>> form
> >>> > >> >     > >>  > > > > > >> >> >> "com.acme.infraTeam.kafka.
> >>> > >> hiMom.auditPlugin").
> >>> > >> > we
> >>> > >> >     > have
> >>> > >> >     > >>  a
> >>> > >> >     > >>  > > few
> >>> > >> >     > >>  > > > > such
> >>> > >> >     > >>  > > > > > >> >> topics at
> >>> > >> >     > >>  > > > > > >> >> >> linkedin where actual payloads are
> ~2
> >>> > ints
> >>> > >> > and are
> >>> > >> >     > >>  > eclipsed
> >>> > >> >     > >>  > > by
> >>> > >> >     > >>  > > > > our
> >>> > >> >     > >>  > > > > > >> >> in-house
> >>> > >> >     > >>  > > > > > >> >> >> audit "header" which is why we
> liked
> >>> > ints to
> >>> > >> > begin
> >>> > >> >     > with.
> >>> > >> >     > >>  > > > > > >> >> >>
> >>> > >> >     > >>  > > > > > >> >> >> "ease of use" - strings would
> probably
> >>> > still
> >>> > >> > require
> >>> > >> >     > >>  > _some_
> >>> > >> >     > >>  > > > > degree
> >>> > >> >     > >>  > > > > > >> of
> >>> > >> >     > >>  > > > > > >> >> >> partitioning by convention
> (imagine if
> >>> > >> > everyone
> >>> > >> >     > used the
> >>> > >> >     > >>  > key
> >>> > >> >     > >>  > > > > > >> "infra"...)
> >>> > >> >     > >>  > > > > > >> >> >> but its very intuitive for java
> devs
> >>> to
> >>> > do
> >>> > >> > anyway
> >>> > >> >     > >>  > > > > (reverse-domain
> >>> > >> >     > >>  > > > > > is
> >>> > >> >     > >>  > > > > > >> >> >> ingrained into java developers at a
> >>> young
> >>> > >> age
> >>> > >> > :-) ).
> >>> > >> >     > >>  also
> >>> > >> >     > >>  > > most
> >>> > >> >     > >>  > > > > > java
> >>> > >> >     > >>  > > > > > >> devs
> >>> > >> >     > >>  > > > > > >> >> >> find Map<String, whatever> more
> >>> intuitive
> >>> > >> than
> >>> > >> >     > >>  > Map<Integer,
> >>> > >> >     > >>  > > > > > >> whatever> -
> >>> > >> >     > >>  > > > > > >> >> >> probably because of other
> text-based
> >>> > >> > protocols like
> >>> > >> >     > >>  http.
> >>> > >> >     > >>  > > ints
> >>> > >> >     > >>  > > > > > would
> >>> > >> >     > >>  > > > > > >> >> >> require a number registry. if you
> >>> think
> >>> > >> number
> >>> > >> >     > >>  registries
> >>> > >> >     > >>  > > are
> >>> > >> >     > >>  > > > > hard
> >>> > >> >     > >>  > > > > > >> just
> >>> > >> >     > >>  > > > > > >> >> >> look at the wiki page for KIPs
> >>> > (specifically
> >>> > >> > the
> >>> > >> >     > number
> >>> > >> >     > >>  > for
> >>> > >> >     > >>  > > > next
> >>> > >> >     > >>  > > > > > >> >> available
> >>> > >> >     > >>  > > > > > >> >> >> KIP) and think again - we are
> probably
> >>> > >> talking
> >>> > >> >     > about the
> >>> > >> >     > >>  > > same
> >>> > >> >     > >>  > > > > > >> volume of
> >>> > >> >     > >>  > > > > > >> >> >> requests. also this would only be
> >>> > "required"
> >>> > >> > (good
> >>> > >> >     > >>  > > > citizenship,
> >>> > >> >     > >>  > > > > > more
> >>> > >> >     > >>  > > > > > >> >> like)
> >>> > >> >     > >>  > > > > > >> >> >> if you want to publish your plugin
> for
> >>> > >> others
> >>> > >> > to
> >>> > >> >     > use.
> >>> > >> >     > >>  > within
> >>> > >> >     > >>  > > > > your
> >>> > >> >     > >>  > > > > > >> org do
> >>> > >> >     > >>  > > > > > >> >> >> whatever you want - just know that
> if
> >>> you
> >>> > >> use
> >>> > >> > [some
> >>> > >> >     > >>  > > "reserved"
> >>> > >> >     > >>  > > > > > >> range]
> >>> > >> >     > >>  > > > > > >> >> and a
> >>> > >> >     > >>  > > > > > >> >> >> future kafka update breaks it its
> your
> >>> > >> > problem.
> >>> > >> >     > RTFM.
> >>> > >> >     > >>  > > > > > >> >> >>
> >>> > >> >     > >>  > > > > > >> >> >> personally im in favor of ints.
> >>> > >> >     > >>  > > > > > >> >> >>
> >>> > >> >     > >>  > > > > > >> >> >> having said that (and like nacho) I
> >>> will
> >>> > >> > settle if
> >>> > >> >     > int
> >>> > >> >     > >>  vs
> >>> > >> >     > >>  > > > string
> >>> > >> >     > >>  > > > > > >> remains
> >>> > >> >     > >>  > > > > > >> >> >> the only obstacle to this.
> >>> > >> >     > >>  > > > > > >> >> >>
> >>> > >> >     > >>  > > > > > >> >> >> On Tue, Nov 8, 2016 at 3:53 PM,
> Nacho
> >>> > Solis
> >>> > >> >     > >>  > > > > > >> <nso...@linkedin.com.invalid
> >>> > >> >     > >>  > > > > > >> >> >
> >>> > >> >     > >>  > > > > > >> >> >> wrote:
> >>> > >> >     > >>  > > > > > >> >> >>
> >>> > >> >     > >>  > > > > > >> >> >>> I think it's well known I've been
> >>> > pushing
> >>> > >> > for ints
> >>> > >> >     > >>  (and I
> >>> > >> >     > >>  > > > could
> >>> > >> >     > >>  > > > > > >> switch
> >>> > >> >     > >>  > > > > > >> >> to
> >>> > >> >     > >>  > > > > > >> >> >>> 16 bit shorts if pressed).
> >>> > >> >     > >>  > > > > > >> >> >>>
> >>> > >> >     > >>  > > > > > >> >> >>> - efficient (space)
> >>> > >> >     > >>  > > > > > >> >> >>> - efficient (processing)
> >>> > >> >     > >>  > > > > > >> >> >>> - easily partitionable
> >>> > >> >     > >>  > > > > > >> >> >>>
> >>> > >> >     > >>  > > > > > >> >> >>>
> >>> > >> >     > >>  > > > > > >> >> >>> However, if the only thing that is
> >>> > keeping
> >>> > >> > us from
> >>> > >> >     > >>  > adopting
> >>> > >> >     > >>  > > > > > >> headers is
> >>> > >> >     > >>  > > > > > >> >> the
> >>> > >> >     > >>  > > > > > >> >> >>> use of strings vs ints as keys,
> then
> >>> I
> >>> > >> would
> >>> > >> > cave
> >>> > >> >     > in
> >>> > >> >     > >>  and
> >>> > >> >     > >>  > > > accept
> >>> > >> >     > >>  > > > > > >> >> strings. If
> >>> > >> >     > >>  > > > > > >> >> >>> we do so, I would like to limit
> >>> string
> >>> > keys
> >>> > >> > to 128
> >>> > >> >     > >>  bytes
> >>> > >> >     > >>  > in
> >>> > >> >     > >>  > > > > > length.
> >>> > >> >     > >>  > > > > > >> >> This
> >>> > >> >     > >>  > > > > > >> >> >>> way 1) I could use a 3 letter
> string
> >>> if
> >>> > I
> >>> > >> > wanted
> >>> > >> >     > >>  > > (effectively
> >>> > >> >     > >>  > > > > > >> using 4
> >>> > >> >     > >>  > > > > > >> >> total
> >>> > >> >     > >>  > > > > > >> >> >>> bytes), 2) limit overall impact of
> >>> > possible
> >>> > >> > keys
> >>> > >> >     > (don't
> >>> > >> >     > >>  > > > really
> >>> > >> >     > >>  > > > > > want
> >>> > >> >     > >>  > > > > > >> >> people
> >>> > >> >     > >>  > > > > > >> >> >>> to send a 16K header string key).
> >>> > >> >     > >>  > > > > > >> >> >>>
> >>> > >> >     > >>  > > > > > >> >> >>> Nacho
> >>> > >> >     > >>  > > > > > >> >> >>>
> >>> > >> >     > >>  > > > > > >> >> >>>
> >>> > >> >     > >>  > > > > > >> >> >>> On Tue, Nov 8, 2016 at 3:35 PM,
> Gwen
> >>> > >> Shapira
> >>> > >> > <
> >>> > >> >     > >>  > > > > g...@confluent.io>
> >>> > >> >     > >>  > > > > > >> >> wrote:
> >>> > >> >     > >>  > > > > > >> >> >>>
> >>> > >> >     > >>  > > > > > >> >> >>>> Forgot to mention: Thank you for
> >>> > >> > quantifying the
> >>> > >> >     > >>  > > trade-off -
> >>> > >> >     > >>  > > > > it
> >>> > >> >     > >>  > > > > > is
> >>> > >> >     > >>  > > > > > >> >> >>>> helpful and important regardless
> of
> >>> > what
> >>> > >> we
> >>> > >> > end up
> >>> > >> >     > >>  > > deciding.
> >>> > >> >     > >>  > > > > > >> >> >>>>
> >>> > >> >     > >>  > > > > > >> >> >>>> On Tue, Nov 8, 2016 at 3:12 PM,
> Sean
> >>> > >> > McCauliff
> >>> > >> >     > >>  > > > > > >> >> >>>> <smccaul...@linkedin.com.
> invalid>
> >>> > wrote:
> >>> > >> >     > >>  > > > > > >> >> >>>>> On Tue, Nov 8, 2016 at 2:15 PM,
> >>> Gwen
> >>> > >> > Shapira <
> >>> > >> >     > >>  > > > > > g...@confluent.io>
> >>> > >> >     > >>  > > > > > >> >> >>> wrote:
> >>> > >> >     > >>  > > > > > >> >> >>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>> Since Kafka specifically
> targets
> >>> > >> >     > high-throughput,
> >>> > >> >     > >>  > > > > low-latency
> >>> > >> >     > >>  > > > > > >> >> >>>>>> use-cases, I don't think we
> should
> >>> > trade
> >>> > >> > them
> >>> > >> >     > off
> >>> > >> >     > >>  that
> >>> > >> >     > >>  > > > > easily.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>> I find these kind of design
> goals
> >>> not
> >>> > to
> >>> > >> be
> >>> > >> >     > really
> >>> > >> >     > >>  > > helpful
> >>> > >> >     > >>  > > > > > unless
> >>> > >> >     > >>  > > > > > >> >> it's
> >>> > >> >     > >>  > > > > > >> >> >>>>> quantified in someway. Because
> it's
> >>> > >> always
> >>> > >> >     > possible
> >>> > >> >     > >>  to
> >>> > >> >     > >>  > > > argue
> >>> > >> >     > >>  > > > > > >> against
> >>> > >> >     > >>  > > > > > >> >> >>>>> something as either being not
> >>> > performant
> >>> > >> > or just
> >>> > >> >     > an
> >>> > >> >     > >>  > > > > > >> implementation
> >>> > >> >     > >>  > > > > > >> >> >>>> detail.
> >>> > >> >     > >>  > > > > > >> >> >>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>> This is a single threaded
> >>> benchmarks
> >>> > so
> >>> > >> > all the
> >>> > >> >     > >>  > > > measurements
> >>> > >> >     > >>  > > > > > are
> >>> > >> >     > >>  > > > > > >> per
> >>> > >> >     > >>  > > > > > >> >> >>>>> thread.
> >>> > >> >     > >>  > > > > > >> >> >>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>> For 1M messages/s/thread if
> header
> >>> > keys
> >>> > >> > are int
> >>> > >> >     > and
> >>> > >> >     > >>  > you
> >>> > >> >     > >>  > > > had
> >>> > >> >     > >>  > > > > > >> even a
> >>> > >> >     > >>  > > > > > >> >> >>>> single
> >>> > >> >     > >>  > > > > > >> >> >>>>> header key, value pair then it's
> >>> still
> >>> > >> > about 2^-2
> >>> > >> >     > >>  > > > > microseconds
> >>> > >> >     > >>  > > > > > >> which
> >>> > >> >     > >>  > > > > > >> >> >>>> means
> >>> > >> >     > >>  > > > > > >> >> >>>>> you only have another 0.75
> >>> > microseconds
> >>> > >> to
> >>> > >> > do
> >>> > >> >     > >>  > everything
> >>> > >> >     > >>  > > > else
> >>> > >> >     > >>  > > > > > you
> >>> > >> >     > >>  > > > > > >> >> want
> >>> > >> >     > >>  > > > > > >> >> >>> to
> >>> > >> >     > >>  > > > > > >> >> >>>>> do with a message (1M messages/s
> >>> > means 1
> >>> > >> > micro
> >>> > >> >     > second
> >>> > >> >     > >>  > per
> >>> > >> >     > >>  > > > > > >> message).
> >>> > >> >     > >>  > > > > > >> >> >>> With
> >>> > >> >     > >>  > > > > > >> >> >>>>> string header keys there is
> still
> >>> 0.5
> >>> > >> micro
> >>> > >> >     > seconds
> >>> > >> >     > >>  to
> >>> > >> >     > >>  > > > > process
> >>> > >> >     > >>  > > > > > a
> >>> > >> >     > >>  > > > > > >> >> >>> message.
> >>> > >> >     > >>  > > > > > >> >> >>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>> I love strings as much as the
> next
> >>> guy
> >>> > >> (we
> >>> > >> > had
> >>> > >> >     > them
> >>> > >> >     > >>  in
> >>> > >> >     > >>  > > > > Flume),
> >>> > >> >     > >>  > > > > > >> but I
> >>> > >> >     > >>  > > > > > >> >> >>>>>> was convinced by
> >>> Magnus/Michael/Radai
> >>> > >> that
> >>> > >> >     > strings
> >>> > >> >     > >>  > don't
> >>> > >> >     > >>  > > > > > >> actually
> >>> > >> >     > >>  > > > > > >> >> have
> >>> > >> >     > >>  > > > > > >> >> >>>>>> strong benefits as opposed to
> ints
> >>> > >> > (you'll need
> >>> > >> >     > a
> >>> > >> >     > >>  > string
> >>> > >> >     > >>  > > > > > >> registry
> >>> > >> >     > >>  > > > > > >> >> >>>>>> anyway - otherwise, how will
> you
> >>> know
> >>> > >> > what does
> >>> > >> >     > the
> >>> > >> >     > >>  > > > > > "profile_id"
> >>> > >> >     > >>  > > > > > >> >> >>>>>> header refers to?) and I want
> to
> >>> keep
> >>> > >> > closer to
> >>> > >> >     > our
> >>> > >> >     > >>  > > > original
> >>> > >> >     > >>  > > > > > >> design
> >>> > >> >     > >>  > > > > > >> >> >>>>>> goals for Kafka.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>> "confluent.profile_id"
> >>> > >> >     > >>  > > > > > >> >> >>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>> If someone likes strings in the
> >>> > headers
> >>> > >> > and
> >>> > >> >     > doesn't
> >>> > >> >     > >>  do
> >>> > >> >     > >>  > > > > > millions
> >>> > >> >     > >>  > > > > > >> of
> >>> > >> >     > >>  > > > > > >> >> >>>>>> messages a sec, they probably
> have
> >>> > lots
> >>> > >> > of other
> >>> > >> >     > >>  > systems
> >>> > >> >     > >>  > > > > they
> >>> > >> >     > >>  > > > > > >> can
> >>> > >> >     > >>  > > > > > >> >> use
> >>> > >> >     > >>  > > > > > >> >> >>>>>> instead.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>> None of them will scale like
> Kafka.
> >>> > >> > Horizontal
> >>> > >> >     > >>  scaling
> >>> > >> >     > >>  > > is
> >>> > >> >     > >>  > > > > > still
> >>> > >> >     > >>  > > > > > >> >> good.
> >>> > >> >     > >>  > > > > > >> >> >>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>> On Tue, Nov 8, 2016 at 1:22 PM,
> >>> Sean
> >>> > >> > McCauliff
> >>> > >> >     > >>  > > > > > >> >> >>>>>> <smccaul...@linkedin.com.
> invalid>
> >>> > >> wrote:
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> +1 for String keys.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> I've been doing some
> bechmarking
> >>> > and it
> >>> > >> > seems
> >>> > >> >     > like
> >>> > >> >     > >>  > the
> >>> > >> >     > >>  > > > > > speedup
> >>> > >> >     > >>  > > > > > >> for
> >>> > >> >     > >>  > > > > > >> >> >>>> using
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> integer keys is about 2-5
> >>> depending
> >>> > on
> >>> > >> > the
> >>> > >> >     > length
> >>> > >> >     > >>  of
> >>> > >> >     > >>  > > the
> >>> > >> >     > >>  > > > > > >> strings
> >>> > >> >     > >>  > > > > > >> >> and
> >>> > >> >     > >>  > > > > > >> >> >>>> what
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> collections are being used.
> The
> >>> > overall
> >>> > >> > amount
> >>> > >> >     > of
> >>> > >> >     > >>  > time
> >>> > >> >     > >>  > > > > spent
> >>> > >> >     > >>  > > > > > >> >> >>> parsing
> >>> > >> >     > >>  > > > > > >> >> >>>> a
> >>> > >> >     > >>  > > > > > >> >> >>>>>> set
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> of header key, value pairs
> >>> probably
> >>> > >> does
> >>> > >> > not
> >>> > >> >     > matter
> >>> > >> >     > >>  > > > unless
> >>> > >> >     > >>  > > > > > you
> >>> > >> >     > >>  > > > > > >> are
> >>> > >> >     > >>  > > > > > >> >> >>>>>> getting
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> close to 1M messages per
> >>> consumer.
> >>> > In
> >>> > >> > which
> >>> > >> >     > case
> >>> > >> >     > >>  > > > probably
> >>> > >> >     > >>  > > > > > >> don't
> >>> > >> >     > >>  > > > > > >> >> use
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> headers. There is also the
> >>> option to
> >>> > >> use
> >>> > >> > very
> >>> > >> >     > >>  short
> >>> > >> >     > >>  > > > > strings;
> >>> > >> >     > >>  > > > > > >> some
> >>> > >> >     > >>  > > > > > >> >> >>>> that
> >>> > >> >     > >>  > > > > > >> >> >>>>>> are
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> even shorter than integers.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> Partitioning the string key
> space
> >>> > will
> >>> > >> be
> >>> > >> >     > easier
> >>> > >> >     > >>  than
> >>> > >> >     > >>  > > > > > >> partitioning
> >>> > >> >     > >>  > > > > > >> >> >>> an
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> integer key space. We won't
> need
> >>> a
> >>> > >> global
> >>> > >> >     > registry.
> >>> > >> >     > >>  > > > Kafka
> >>> > >> >     > >>  > > > > > >> >> >>> internally
> >>> > >> >     > >>  > > > > > >> >> >>>> can
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> reserve some prefix like "_"
> as
> >>> its
> >>> > >> > namespace.
> >>> > >> >     > >>  > > Everyone
> >>> > >> >     > >>  > > > > else
> >>> > >> >     > >>  > > > > > >> can
> >>> > >> >     > >>  > > > > > >> >> >>> use
> >>> > >> >     > >>  > > > > > >> >> >>>>>> their
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> company or project name as
> >>> namespace
> >>> > >> > prefix and
> >>> > >> >     > >>  life
> >>> > >> >     > >>  > > > should
> >>> > >> >     > >>  > > > > > be
> >>> > >> >     > >>  > > > > > >> >> good.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> Here's the link to some of the
> >>> > >> > benchmarking
> >>> > >> >     > info:
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> https://docs.google.com/
> >>> > >> document/d/1tfT-
> >>> > >> >     > >>  > > > > > >> >> >>>> 6SZdnKOLyWGDH82kS30PnUkmgb7nPL
> >>> > >> >     > >>  > > > > > >> >> >>>>>> dw6p65pAI/edit?usp=sharing
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> --
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> Sean McCauliff
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> Staff Software Engineer
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> Kafka
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> smccaul...@linkedin.com
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> linkedin.com/in/sean-
> >>> > mccauliff-b563192
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> On Mon, Nov 7, 2016 at 11:51
> PM,
> >>> > >> Michael
> >>> > >> >     > Pearce <
> >>> > >> >     > >>  > > > > > >> >> >>>> michael.pea...@ig.com>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>> wrote:
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> +1 on this slimmer version of
> >>> our
> >>> > >> > proposal
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> I def think the Id space we
> can
> >>> > reduce
> >>> > >> > from
> >>> > >> >     > the
> >>> > >> >     > >>  > > proposed
> >>> > >> >     > >>  > > > > > >> >> >>>> int32(4bytes)
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> down to int16(2bytes) it
> saves
> >>> on
> >>> > >> space
> >>> > >> > and as
> >>> > >> >     > >>  > headers
> >>> > >> >     > >>  > > > we
> >>> > >> >     > >>  > > > > > >> wouldn't
> >>> > >> >     > >>  > > > > > >> >> >>>>>> expect
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> the number of headers being
> used
> >>> > >> > concurrently
> >>> > >> >     > >>  being
> >>> > >> >     > >>  > > that
> >>> > >> >     > >>  > > > > > high.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> I would wonder if we should
> make
> >>> > the
> >>> > >> > value
> >>> > >> >     > byte
> >>> > >> >     > >>  > array
> >>> > >> >     > >>  > > > > length
> >>> > >> >     > >>  > > > > > >> still
> >>> > >> >     > >>  > > > > > >> >> >>>> int32
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> though as This is the
> standard
> >>> Max
> >>> > >> array
> >>> > >> >     > length in
> >>> > >> >     > >>  > > Java
> >>> > >> >     > >>  > > > > > saying
> >>> > >> >     > >>  > > > > > >> >> that
> >>> > >> >     > >>  > > > > > >> >> >>>> it
> >>> > >> >     > >>  > > > > > >> >> >>>>>> is a
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> header and I guess limiting
> the
> >>> > size
> >>> > >> is
> >>> > >> >     > sensible
> >>> > >> >     > >>  and
> >>> > >> >     > >>  > > > would
> >>> > >> >     > >>  > > > > > >> work
> >>> > >> >     > >>  > > > > > >> >> for
> >>> > >> >     > >>  > > > > > >> >> >>>> all
> >>> > >> >     > >>  > > > > > >> >> >>>>>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> use cases we have in mind so
> >>> happy
> >>> > >> with
> >>> > >> >     > limiting
> >>> > >> >     > >>  > this.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Do people generally concur on
> >>> > Magnus's
> >>> > >> > slimmer
> >>> > >> >     > >>  > > version?
> >>> > >> >     > >>  > > > > > >> Anyone see
> >>> > >> >     > >>  > > > > > >> >> >>>> any
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> issues if we moved from
> int32 to
> >>> > >> int16?
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Re configurable ids per
> plugin
> >>> > over a
> >>> > >> > global
> >>> > >> >     > >>  > registry
> >>> > >> >     > >>  > > > also
> >>> > >> >     > >>  > > > > > >> would
> >>> > >> >     > >>  > > > > > >> >> >>> work
> >>> > >> >     > >>  > > > > > >> >> >>>>>> for
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> us. As such if this has
> better
> >>> > >> > concensus over
> >>> > >> >     > the
> >>> > >> >     > >>  > > > > proposed
> >>> > >> >     > >>  > > > > > >> global
> >>> > >> >     > >>  > > > > > >> >> >>>>>> registry
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> I'd be happy to change that.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> I was already sold on ints
> over
> >>> > >> strings
> >>> > >> > for
> >>> > >> >     > keys
> >>> > >> >     > >>  ;)
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Cheers
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Mike
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> ______________________________
> >>> > >> > __________
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> From: Magnus Edenhill <
> >>> > >> > mag...@edenhill.se>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Sent: Monday, November 7,
> 2016
> >>> > >> 10:10:21
> >>> > >> > PM
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> To: dev@kafka.apache.org
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Subject: Re: [DISCUSS]
> KIP-82 -
> >>> Add
> >>> > >> > Record
> >>> > >> >     > Headers
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Hi,
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> I'm +1 for adding generic
> >>> message
> >>> > >> > headers,
> >>> > >> >     > but I
> >>> > >> >     > >>  do
> >>> > >> >     > >>  > > > share
> >>> > >> >     > >>  > > > > > the
> >>> > >> >     > >>  > > > > > >> >> >>>> concerns
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> previously aired on this
> thread
> >>> and
> >>> > >> > during
> >>> > >> >     > the KIP
> >>> > >> >     > >>  > > > > meeting.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> So let me propose a slimmer
> >>> > >> alternative
> >>> > >> > that
> >>> > >> >     > does
> >>> > >> >     > >>  > not
> >>> > >> >     > >>  > > > > > require
> >>> > >> >     > >>  > > > > > >> any
> >>> > >> >     > >>  > > > > > >> >> >>>> sort
> >>> > >> >     > >>  > > > > > >> >> >>>>>> of
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> global header registry, does
> not
> >>> > >> affect
> >>> > >> > broker
> >>> > >> >     > >>  > > > performance
> >>> > >> >     > >>  > > > > > or
> >>> > >> >     > >>  > > > > > >> >> >>>>>> operations,
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> and adds as little overhead
> as
> >>> > >> possible.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Message
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> ------------
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> The protocol Message type is
> >>> > extended
> >>> > >> > with a
> >>> > >> >     > >>  Headers
> >>> > >> >     > >>  > > > array
> >>> > >> >     > >>  > > > > > >> >> consting
> >>> > >> >     > >>  > > > > > >> >> >>>> of
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Tags, where a Tag is defined
> as:
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> int16 Id
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> int16 Len // binary_data
> length
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> binary_data[Len] // opaque
> >>> binary
> >>> > data
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Ids
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> ---
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> The Id space is not centrally
> >>> > managed,
> >>> > >> > so
> >>> > >> >     > whenever
> >>> > >> >     > >>  > an
> >>> > >> >     > >>  > > > > > >> application
> >>> > >> >     > >>  > > > > > >> >> >>>> needs
> >>> > >> >     > >>  > > > > > >> >> >>>>>> to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> add headers, or use an
> >>> eco-system
> >>> > >> > plugin that
> >>> > >> >     > >>  does,
> >>> > >> >     > >>  > > its
> >>> > >> >     > >>  > > > Id
> >>> > >> >     > >>  > > > > > >> >> >>> allocation
> >>> > >> >     > >>  > > > > > >> >> >>>>>> will
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> need to be manually
> configured.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> This moves the allocation
> >>> concern
> >>> > from
> >>> > >> > the
> >>> > >> >     > global
> >>> > >> >     > >>  > > space
> >>> > >> >     > >>  > > > > down
> >>> > >> >     > >>  > > > > > >> to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> organization level and avoids
> >>> the
> >>> > risk
> >>> > >> > for id
> >>> > >> >     > >>  > > conflicts.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Example pseudo-config for
> some
> >>> app:
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> sometrackerplugin.tag.sourcev3
> >>> .id
> >>> > >> =1000
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> dbthing.tag.tablename.id
> =1001
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> myschemareg.tag.schemaname.id=
> >>> 1002
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> myschemareg.tag.schemaversion.
> >>> id
> >>> > =1003
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Each header-writing or
> >>> > header-reading
> >>> > >> > plugin
> >>> > >> >     > must
> >>> > >> >     > >>  > > > provide
> >>> > >> >     > >>  > > > > > >> means
> >>> > >> >     > >>  > > > > > >> >> >>>>>> (typically
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> through configuration) to
> >>> specify
> >>> > the
> >>> > >> > tag for
> >>> > >> >     > each
> >>> > >> >     > >>  > > > header
> >>> > >> >     > >>  > > > > it
> >>> > >> >     > >>  > > > > > >> uses.
> >>> > >> >     > >>  > > > > > >> >> >>>>>> Defaults
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> should be avoided.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> A consumer silently ignores
> >>> tags it
> >>> > >> > does not
> >>> > >> >     > have
> >>> > >> >     > >>  a
> >>> > >> >     > >>  > > > > mapping
> >>> > >> >     > >>  > > > > > >> for
> >>> > >> >     > >>  > > > > > >> >> >>>> (since
> >>> > >> >     > >>  > > > > > >> >> >>>>>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> binary_data can't be parsed
> >>> without
> >>> > >> > knowing
> >>> > >> >     > what
> >>> > >> >     > >>  it
> >>> > >> >     > >>  > > is).
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Id range 0..999 is reserved
> for
> >>> > future
> >>> > >> > use by
> >>> > >> >     > the
> >>> > >> >     > >>  > > broker
> >>> > >> >     > >>  > > > > and
> >>> > >> >     > >>  > > > > > >> must
> >>> > >> >     > >>  > > > > > >> >> >>>> not be
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> used by plugins.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Broker
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> ---------
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> The broker does not process
> the
> >>> > tags
> >>> > >> > (other
> >>> > >> >     > than
> >>> > >> >     > >>  the
> >>> > >> >     > >>  > > > > > standard
> >>> > >> >     > >>  > > > > > >> >> >>>> protocol
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> syntax verification), it
> simply
> >>> > stores
> >>> > >> > and
> >>> > >> >     > >>  forwards
> >>> > >> >     > >>  > > them
> >>> > >> >     > >>  > > > > as
> >>> > >> >     > >>  > > > > > >> opaque
> >>> > >> >     > >>  > > > > > >> >> >>>> data.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Standard message translation
> >>> > (removal
> >>> > >> of
> >>> > >> >     > Headers)
> >>> > >> >     > >>  > > kicks
> >>> > >> >     > >>  > > > in
> >>> > >> >     > >>  > > > > > for
> >>> > >> >     > >>  > > > > > >> >> >>> older
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> clients.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Why not string ids?
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> -------------------------
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> String ids might seem like a
> >>> good
> >>> > >> idea,
> >>> > >> > but:
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> * does not really solve
> >>> uniqueness
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> * consumes a lot of space (2
> >>> byte
> >>> > >> string
> >>> > >> >     > length +
> >>> > >> >     > >>  > > > string,
> >>> > >> >     > >>  > > > > > per
> >>> > >> >     > >>  > > > > > >> >> >>>> header)
> >>> > >> >     > >>  > > > > > >> >> >>>>>> to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> be meaningful
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> * doesn't really say anything
> >>> how
> >>> > to
> >>> > >> > parse the
> >>> > >> >     > >>  tag's
> >>> > >> >     > >>  > > > data,
> >>> > >> >     > >>  > > > > > so
> >>> > >> >     > >>  > > > > > >> it
> >>> > >> >     > >>  > > > > > >> >> >>> is
> >>> > >> >     > >>  > > > > > >> >> >>>> in
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> effect useless on its own.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Regards,
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Magnus
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> 2016-11-07 18:32 GMT+01:00
> >>> Michael
> >>> > >> > Pearce <
> >>> > >> >     > >>  > > > > > >> michael.pea...@ig.com
> >>> > >> >     > >>  > > > > > >> >> >:
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> Hi Roger,
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> Thanks for the support.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> I think the key thing is to
> >>> have a
> >>> > >> > common key
> >>> > >> >     > >>  space
> >>> > >> >     > >>  > > to
> >>> > >> >     > >>  > > > > make
> >>> > >> >     > >>  > > > > > >> an
> >>> > >> >     > >>  > > > > > >> >> >>>>>> ecosystem,
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> there does have to be some
> >>> level
> >>> > of
> >>> > >> > contract
> >>> > >> >     > for
> >>> > >> >     > >>  > > people
> >>> > >> >     > >>  > > > > to
> >>> > >> >     > >>  > > > > > >> play
> >>> > >> >     > >>  > > > > > >> >> >>>>>> nicely.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> Having map<String, byte[]>
> or
> >>> as
> >>> > per
> >>> > >> > current
> >>> > >> >     > >>  > proposed
> >>> > >> >     > >>  > > > in
> >>> > >> >     > >>  > > > > > kip
> >>> > >> >     > >>  > > > > > >> of
> >>> > >> >     > >>  > > > > > >> >> >>>>>> having a
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> numerical key space of
> map<int,
> >>> > >> > byte[]> is a
> >>> > >> >     > >>  level
> >>> > >> >     > >>  > > of
> >>> > >> >     > >>  > > > > the
> >>> > >> >     > >>  > > > > > >> >> >>> contract
> >>> > >> >     > >>  > > > > > >> >> >>>>>> that
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> most people would expect.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> I think the example in a
> >>> previous
> >>> > >> > comment
> >>> > >> >     > someone
> >>> > >> >     > >>  > > else
> >>> > >> >     > >>  > > > > made
> >>> > >> >     > >>  > > > > > >> >> >>>> linking to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> AWS
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> blog and also implemented
> api
> >>> > where
> >>> > >> >     > originally
> >>> > >> >     > >>  they
> >>> > >> >     > >>  > > > > didn't
> >>> > >> >     > >>  > > > > > >> have a
> >>> > >> >     > >>  > > > > > >> >> >>>>>> header
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> space but not they do, where
> >>> keys
> >>> > are
> >>> > >> >     > uniform but
> >>> > >> >     > >>  > the
> >>> > >> >     > >>  > > > > value
> >>> > >> >     > >>  > > > > > >> can
> >>> > >> >     > >>  > > > > > >> >> >>> be
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> string,
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> int, anything is a good
> >>> example.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> Having a custom
> >>> > MetadataSerializer is
> >>> > >> >     > something
> >>> > >> >     > >>  we
> >>> > >> >     > >>  > > had
> >>> > >> >     > >>  > > > > > played
> >>> > >> >     > >>  > > > > > >> >> >>> with,
> >>> > >> >     > >>  > > > > > >> >> >>>>>> but
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> discounted the idea, as if
> you
> >>> > wanted
> >>> > >> >     > everyone to
> >>> > >> >     > >>  > > work
> >>> > >> >     > >>  > > > > the
> >>> > >> >     > >>  > > > > > >> same
> >>> > >> >     > >>  > > > > > >> >> >>>> way in
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> ecosystem, having to have
> this
> >>> > also
> >>> > >> >     > customizable
> >>> > >> >     > >>  > > makes
> >>> > >> >     > >>  > > > > it a
> >>> > >> >     > >>  > > > > > >> bit
> >>> > >> >     > >>  > > > > > >> >> >>>>>> harder.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> Think about making the whole
> >>> > message
> >>> > >> > record
> >>> > >> >     > >>  custom
> >>> > >> >     > >>  > > > > > >> serializable,
> >>> > >> >     > >>  > > > > > >> >> >>>> this
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> would
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> make it fairly tricky
> (though
> >>> it
> >>> > >> would
> >>> > >> > not be
> >>> > >> >     > >>  > > > impossible)
> >>> > >> >     > >>  > > > > > to
> >>> > >> >     > >>  > > > > > >> have
> >>> > >> >     > >>  > > > > > >> >> >>>> made
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> work
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> nicely. Having the value
> >>> > customizable
> >>> > >> > we
> >>> > >> >     > thought
> >>> > >> >     > >>  > is a
> >>> > >> >     > >>  > > > > > >> reasonable
> >>> > >> >     > >>  > > > > > >> >> >>>>>> tradeoff
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> here of flexibility over
> >>> contract
> >>> > of
> >>> > >> >     > interaction
> >>> > >> >     > >>  > > > between
> >>> > >> >     > >>  > > > > > >> >> >>> different
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> parties.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> Is there a particular case
> or
> >>> > benefit
> >>> > >> > of
> >>> > >> >     > having
> >>> > >> >     > >>  > > > > > serialization
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> customizable
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> that you have in mind?
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> Saying this it is obviously
> >>> > something
> >>> > >> > that
> >>> > >> >     > could
> >>> > >> >     > >>  be
> >>> > >> >     > >>  > > > > > >> implemented,
> >>> > >> >     > >>  > > > > > >> >> >>> if
> >>> > >> >     > >>  > > > > > >> >> >>>>>> there
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> is a need. If we did go this
> >>> > avenue I
> >>> > >> > think a
> >>> > >> >     > >>  > > defaulted
> >>> > >> >     > >>  > > > > > >> >> >>> serializer
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> implementation should exist
> so
> >>> for
> >>> > >> the
> >>> > >> > 80:20
> >>> > >> >     > >>  rule,
> >>> > >> >     > >>  > > > people
> >>> > >> >     > >>  > > > > > can
> >>> > >> >     > >>  > > > > > >> >> >>> just
> >>> > >> >     > >>  > > > > > >> >> >>>>>> have
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> broker and clients get
> default
> >>> > >> > behavior.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> Cheers
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> Mike
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> On 11/6/16, 5:25 PM,
> "radai" <
> >>> > >> >     > >>  > > > radai.rosenbl...@gmail.com
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > > > >> wrote:
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> making header _key_
> >>> serialization
> >>> > >> >     > configurable
> >>> > >> >     > >>  > > > > > potentially
> >>> > >> >     > >>  > > > > > >> >> >>>>>> undermines
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> board usefulness of the
> feature
> >>> > (any
> >>> > >> > point
> >>> > >> >     > >>  along
> >>> > >> >     > >>  > > the
> >>> > >> >     > >>  > > > > > path
> >>> > >> >     > >>  > > > > > >> >> >>> must
> >>> > >> >     > >>  > > > > > >> >> >>>> be
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> able
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> read the header keys. the
> >>> values
> >>> > may
> >>> > >> be
> >>> > >> >     > >>  whatever
> >>> > >> >     > >>  > > and
> >>> > >> >     > >>  > > > > > >> require
> >>> > >> >     > >>  > > > > > >> >> >>>> more
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> intimate
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> knowledge of the code that
> >>> > produced
> >>> > >> > specific
> >>> > >> >     > >>  > > > headers,
> >>> > >> >     > >>  > > > > > but
> >>> > >> >     > >>  > > > > > >> >> >>> keys
> >>> > >> >     > >>  > > > > > >> >> >>>>>> should
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> be
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> universally readable).
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> it would also make it hard
> to
> >>> > write
> >>> > >> > really
> >>> > >> >     > >>  > > portable
> >>> > >> >     > >>  > > > > > >> plugins -
> >>> > >> >     > >>  > > > > > >> >> >>>> say
> >>> > >> >     > >>  > > > > > >> >> >>>>>> i
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> wrote a
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> large message
> >>> splitter/combiner -
> >>> > if
> >>> > >> i
> >>> > >> > rely
> >>> > >> >     > on
> >>> > >> >     > >>  > key
> >>> > >> >     > >>  > > > > > >> >> >>>> "largeMessage"
> >>> > >> >     > >>  > > > > > >> >> >>>>>> and
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> values of the form "1/20"
> >>> someone
> >>> > who
> >>> > >> > uses
> >>> > >> >     > >>  > > > (contrived
> >>> > >> >     > >>  > > > > > >> >> >>> example)
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> Map<Byte[],
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> Double> wouldnt be able to
> >>> re-use
> >>> > my
> >>> > >> > code.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> not the end of a the world
> >>> within
> >>> > an
> >>> > >> >     > >>  > organization,
> >>> > >> >     > >>  > > > but
> >>> > >> >     > >>  > > > > > >> >> >>>>>> problematic if
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> you
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> want to enable an ecosystem
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> On Thu, Nov 3, 2016 at 2:04
> PM,
> >>> > Roger
> >>> > >> > Hoover
> >>> > >> >     > <
> >>> > >> >     > >>  > > > > > >> >> >>>>>> roger.hoo...@gmail.com
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> wrote:
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> As others have laid out, I
> see
> >>> > >> strong
> >>> > >> >     > reasons
> >>> > >> >     > >>  for
> >>> > >> >     > >>  > a
> >>> > >> >     > >>  > > > > common
> >>> > >> >     > >>  > > > > > >> >> >>>>>> message
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> metadata structure for the
> >>> Kafka
> >>> > >> > ecosystem.
> >>> > >> >     > In
> >>> > >> >     > >>  > > > > > particular,
> >>> > >> >     > >>  > > > > > >> >> >>>> I've
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> seen that
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> even within a single
> >>> > organization,
> >>> > >> >     > >>  infrastructure
> >>> > >> >     > >>  > > > teams
> >>> > >> >     > >>  > > > > > >> >> >>> often
> >>> > >> >     > >>  > > > > > >> >> >>>>>> own
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> message metadata while
> >>> > application
> >>> > >> > teams
> >>> > >> >     > own the
> >>> > >> >     > >>  > > > > > >> >> >>>>>> application-level
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> data
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> format. Allowing metadata
> and
> >>> > >> content
> >>> > >> > to
> >>> > >> >     > have
> >>> > >> >     > >>  > > > different
> >>> > >> >     > >>  > > > > > >> >> >>>>>> structure
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> and
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> evolve separately is very
> >>> helpful
> >>> > >> for
> >>> > >> > this.
> >>> > >> >     > >>  > Also, I
> >>> > >> >     > >>  > > > > think
> >>> > >> >     > >>  > > > > > >> >> >>>>>> there's
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> a
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> lot of
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> value to having a common
> >>> metadata
> >>> > >> > structure
> >>> > >> >     > >>  shared
> >>> > >> >     > >>  > > > > across
> >>> > >> >     > >>  > > > > > >> >> >>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>> Kafka
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> ecosystem so that tools
> which
> >>> > >> leverage
> >>> > >> >     > metadata
> >>> > >> >     > >>  > can
> >>> > >> >     > >>  > > > more
> >>> > >> >     > >>  > > > > > >> >> >>>> easily
> >>> > >> >     > >>  > > > > > >> >> >>>>>> be
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> shared
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> across organizations and
> >>> > integrated
> >>> > >> >     > together.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> The question is, where does
> >>> the
> >>> > >> > metadata
> >>> > >> >     > >>  structure
> >>> > >> >     > >>  > > > > belong?
> >>> > >> >     > >>  > > > > > >> >> >>>>>> Here's
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> my take:
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> We change the Kafka wire
> and
> >>> > on-disk
> >>> > >> > format
> >>> > >> >     > to
> >>> > >> >     > >>  > from
> >>> > >> >     > >>  > > a
> >>> > >> >     > >>  > > > > > (key,
> >>> > >> >     > >>  > > > > > >> >> >>>>>> value)
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> model to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> a (key, metadata, value)
> model
> >>> > where
> >>> > >> > all
> >>> > >> >     > three
> >>> > >> >     > >>  are
> >>> > >> >     > >>  > > > byte
> >>> > >> >     > >>  > > > > > >> >> >>>> arrays
> >>> > >> >     > >>  > > > > > >> >> >>>>>> from
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> brokers point of view. The
> >>> > primary
> >>> > >> > reason
> >>> > >> >     > for
> >>> > >> >     > >>  > this
> >>> > >> >     > >>  > > is
> >>> > >> >     > >>  > > > > > that
> >>> > >> >     > >>  > > > > > >> >> >>>> it
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> provides a
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> backward compatible
> migration
> >>> > path
> >>> > >> > forward.
> >>> > >> >     > >>  > > Producers
> >>> > >> >     > >>  > > > > can
> >>> > >> >     > >>  > > > > > >> >> >>>> start
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> populating
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> metadata fields before all
> >>> > consumers
> >>> > >> >     > understand
> >>> > >> >     > >>  > the
> >>> > >> >     > >>  > > > > > >> >> >>> metadata
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> structure.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> For people who already have
> >>> > custom
> >>> > >> > envelope
> >>> > >> >     > >>  > > > structures,
> >>> > >> >     > >>  > > > > > >> >> >>> they
> >>> > >> >     > >>  > > > > > >> >> >>>> can
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> populate
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> their existing structure
> and
> >>> the
> >>> > new
> >>> > >> >     > structure
> >>> > >> >     > >>  > for a
> >>> > >> >     > >>  > > > > while
> >>> > >> >     > >>  > > > > > >> >> >>> as
> >>> > >> >     > >>  > > > > > >> >> >>>>>> they
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> make the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> transition.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> We could stop there and let
> >>> the
> >>> > >> > clients
> >>> > >> >     > plug in
> >>> > >> >     > >>  a
> >>> > >> >     > >>  > > > > > >> >> >>>> KeySerializer,
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> MetadataSerializer, and
> >>> > >> > ValueSerializer but
> >>> > >> >     > I
> >>> > >> >     > >>  > think
> >>> > >> >     > >>  > > it
> >>> > >> >     > >>  > > > > is
> >>> > >> >     > >>  > > > > > >> >> >>>> also
> >>> > >> >     > >>  > > > > > >> >> >>>>>> be
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> useful to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> have a default
> >>> MetadataSerializer
> >>> > >> that
> >>> > >> >     > >>  implements
> >>> > >> >     > >>  > a
> >>> > >> >     > >>  > > > > > >> >> >>> key-value
> >>> > >> >     > >>  > > > > > >> >> >>>>>> model
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> similar
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> to AMQP or HTTP headers.
> Or we
> >>> > could
> >>> > >> > go even
> >>> > >> >     > >>  > > further
> >>> > >> >     > >>  > > > > and
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> prescribe a
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> Map<String, byte[]> or
> >>> > Map<String,
> >>> > >> > String>
> >>> > >> >     > data
> >>> > >> >     > >>  > > model
> >>> > >> >     > >>  > > > > for
> >>> > >> >     > >>  > > > > > >> >> >>>>>> headers
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> in
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> clients (while still
> allowing
> >>> > custom
> >>> > >> >     > >>  serialization
> >>> > >> >     > >>  > > of
> >>> > >> >     > >>  > > > > the
> >>> > >> >     > >>  > > > > > >> >> >>>> header
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> data
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> model).
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> I think this would address
> >>> > Radai's
> >>> > >> > concerns:
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> 1. All client code would
> not
> >>> > need to
> >>> > >> > be
> >>> > >> >     > updated
> >>> > >> >     > >>  to
> >>> > >> >     > >>  > > > know
> >>> > >> >     > >>  > > > > > >> >> >>> about
> >>> > >> >     > >>  > > > > > >> >> >>>>>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> container.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> 2. Middleware friendly
> clients
> >>> > would
> >>> > >> > have a
> >>> > >> >     > >>  > standard
> >>> > >> >     > >>  > > > > > header
> >>> > >> >     > >>  > > > > > >> >> >>>> data
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> model to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> work with.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> 3. KIP is required both
> b/c of
> >>> > >> broker
> >>> > >> >     > changes
> >>> > >> >     > >>  and
> >>> > >> >     > >>  > > > > because
> >>> > >> >     > >>  > > > > > >> >> >>> of
> >>> > >> >     > >>  > > > > > >> >> >>>>>> client
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> API
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> changes.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> Cheers,
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> Roger
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> On Wed, Nov 2, 2016 at 4:38
> >>> PM,
> >>> > >> radai
> >>> > >> > <
> >>> > >> >     > >>  > > > > > >> >> >>>>>> radai.rosenbl...@gmail.com>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> wrote:
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>> my biggest issues with a
> >>> > "standard"
> >>> > >> > wrapper
> >>> > >> >     > >>  > format:
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>> 1. _ALL_ client _CODE_ (as
> >>> > opposed
> >>> > >> to
> >>> > >> >     > kafka lib
> >>> > >> >     > >>  > > > > version)
> >>> > >> >     > >>  > > > > > >> >> >>>> must
> >>> > >> >     > >>  > > > > > >> >> >>>>>> be
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> updated
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>> know about the container,
> >>> > because
> >>> > >> > any old
> >>> > >> >     > naive
> >>> > >> >     > >>  > > code
> >>> > >> >     > >>  > > > > > >> >> >>>> trying to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> directly
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>> deserialize its own
> payload
> >>> > would
> >>> > >> > keel
> >>> > >> >     > over and
> >>> > >> >     > >>  > die
> >>> > >> >     > >>  > > > (it
> >>> > >> >     > >>  > > > > > >> >> >>>> needs
> >>> > >> >     > >>  > > > > > >> >> >>>>>> to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> know to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>> deserialize a container,
> and
> >>> > then
> >>> > >> > dig in
> >>> > >> >     > there
> >>> > >> >     > >>  > for
> >>> > >> >     > >>  > > > its
> >>> > >> >     > >>  > > > > > >> >> >>>>>> payload).
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>> 2. in order to write
> >>> > >> > middleware-friendly
> >>> > >> >     > >>  clients
> >>> > >> >     > >>  > > that
> >>> > >> >     > >>  > > > > > >> >> >>>> utilize
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> such
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> a
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>> container one would
> basically
> >>> > have
> >>> > >> > to write
> >>> > >> >     > >>  their
> >>> > >> >     > >>  > > own
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> producer/consumer
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> API
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>> on top of the open source
> >>> kafka
> >>> > >> one.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>> 3. if you were going to go
> >>> with
> >>> > a
> >>> > >> > wrapper
> >>> > >> >     > >>  format
> >>> > >> >     > >>  > > you
> >>> > >> >     > >>  > > > > > >> >> >>> really
> >>> > >> >     > >>  > > > > > >> >> >>>>>> dont
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> need to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>> bother with a kip (just
> open
> >>> > source
> >>> > >> > your
> >>> > >> >     > own
> >>> > >> >     > >>  > client
> >>> > >> >     > >>  > > > > stack
> >>> > >> >     > >>  > > > > > >> >> >>>>>> from #2
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> above
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> so
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>> others could stop
> >>> re-inventing
> >>> > it)
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>> On Wed, Nov 2, 2016 at
> 4:25
> >>> PM,
> >>> > >> James
> >>> > >> >     > Cheng <
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> wushuja...@gmail.com>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> wrote:
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>>> How exactly would this
> >>> work? Or
> >>> > >> > maybe
> >>> > >> >     > that's
> >>> > >> >     > >>  out
> >>> > >> >     > >>  > > of
> >>> > >> >     > >>  > > > > > >> >> >>> scope
> >>> > >> >     > >>  > > > > > >> >> >>>>>> for
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> this
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>> email.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> The information contained in
> >>> this
> >>> > >> > email is
> >>> > >> >     > >>  strictly
> >>> > >> >     > >>  > > > > > >> confidential
> >>> > >> >     > >>  > > > > > >> >> >>>> and
> >>> > >> >     > >>  > > > > > >> >> >>>>>> for
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> the use of the addressee
> only,
> >>> > unless
> >>> > >> >     > otherwise
> >>> > >> >     > >>  > > > > indicated.
> >>> > >> >     > >>  > > > > > >> If you
> >>> > >> >     > >>  > > > > > >> >> >>>> are
> >>> > >> >     > >>  > > > > > >> >> >>>>>> not
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> the intended recipient,
> please
> >>> do
> >>> > not
> >>> > >> > read,
> >>> > >> >     > copy,
> >>> > >> >     > >>  > use
> >>> > >> >     > >>  > > > or
> >>> > >> >     > >>  > > > > > >> disclose
> >>> > >> >     > >>  > > > > > >> >> >>>> to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> others
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> this message or any
> attachment.
> >>> > >> Please
> >>> > >> > also
> >>> > >> >     > >>  notify
> >>> > >> >     > >>  > > the
> >>> > >> >     > >>  > > > > > >> sender by
> >>> > >> >     > >>  > > > > > >> >> >>>>>> replying
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> to this email or by
> telephone
> >>> > >> (+44(020
> >>> > >> > 7896
> >>> > >> >     > 0011)
> >>> > >> >     > >>  > and
> >>> > >> >     > >>  > > > > then
> >>> > >> >     > >>  > > > > > >> delete
> >>> > >> >     > >>  > > > > > >> >> >>>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> email
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> and any copies of it.
> Opinions,
> >>> > >> > conclusion
> >>> > >> >     > (etc)
> >>> > >> >     > >>  > that
> >>> > >> >     > >>  > > > do
> >>> > >> >     > >>  > > > > > not
> >>> > >> >     > >>  > > > > > >> >> >>>> relate to
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> official business of this
> >>> company
> >>> > >> > shall be
> >>> > >> >     > >>  > understood
> >>> > >> >     > >>  > > > as
> >>> > >> >     > >>  > > > > > >> neither
> >>> > >> >     > >>  > > > > > >> >> >>>> given
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> nor
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> endorsed by it. IG is a
> trading
> >>> > name
> >>> > >> > of IG
> >>> > >> >     > >>  Markets
> >>> > >> >     > >>  > > > > Limited
> >>> > >> >     > >>  > > > > > (a
> >>> > >> >     > >>  > > > > > >> >> >>>> company
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> registered in England and
> >>> Wales,
> >>> > >> > company
> >>> > >> >     > number
> >>> > >> >     > >>  > > > 04008957)
> >>> > >> >     > >>  > > > > > >> and IG
> >>> > >> >     > >>  > > > > > >> >> >>>> Index
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> Limited (a company
> registered
> >>> in
> >>> > >> > England and
> >>> > >> >     > >>  Wales,
> >>> > >> >     > >>  > > > > company
> >>> > >> >     > >>  > > > > > >> >> >>> number
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> 01190902). Registered
> address
> >>> at
> >>> > >> Cannon
> >>> > >> >     > Bridge
> >>> > >> >     > >>  > House,
> >>> > >> >     > >>  > > > 25
> >>> > >> >     > >>  > > > > > >> Dowgate
> >>> > >> >     > >>  > > > > > >> >> >>>> Hill,
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> London EC4R 2YA. Both IG
> >>> Markets
> >>> > >> > Limited
> >>> > >> >     > >>  (register
> >>> > >> >     > >>  > > > number
> >>> > >> >     > >>  > > > > > >> 195355)
> >>> > >> >     > >>  > > > > > >> >> >>>> and
> >>> > >> >     > >>  > > > > > >> >> >>>>>> IG
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> Index Limited (register
> number
> >>> > >> 114059)
> >>> > >> > are
> >>> > >> >     > >>  > authorised
> >>> > >> >     > >>  > > > and
> >>> > >> >     > >>  > > > > > >> >> >>>> regulated by
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>> Financial Conduct Authority.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> The information contained in
> >>> this
> >>> > >> email
> >>> > >> > is
> >>> > >> >     > >>  strictly
> >>> > >> >     > >>  > > > > > >> confidential
> >>> > >> >     > >>  > > > > > >> >> >>> and
> >>> > >> >     > >>  > > > > > >> >> >>>> for
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> the use of the addressee
> only,
> >>> > unless
> >>> > >> >     > otherwise
> >>> > >> >     > >>  > > > indicated.
> >>> > >> >     > >>  > > > > > If
> >>> > >> >     > >>  > > > > > >> you
> >>> > >> >     > >>  > > > > > >> >> >>> are
> >>> > >> >     > >>  > > > > > >> >> >>>>>> not
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> the intended recipient,
> please
> >>> do
> >>> > not
> >>> > >> > read,
> >>> > >> >     > copy,
> >>> > >> >     > >>  > use
> >>> > >> >     > >>  > > or
> >>> > >> >     > >>  > > > > > >> disclose
> >>> > >> >     > >>  > > > > > >> >> >>> to
> >>> > >> >     > >>  > > > > > >> >> >>>>>> others
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> this message or any
> attachment.
> >>> > Please
> >>> > >> > also
> >>> > >> >     > notify
> >>> > >> >     > >>  > the
> >>> > >> >     > >>  > > > > > sender
> >>> > >> >     > >>  > > > > > >> by
> >>> > >> >     > >>  > > > > > >> >> >>>>>> replying
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> to this email or by telephone
> >>> > (+44(020
> >>> > >> > 7896
> >>> > >> >     > 0011)
> >>> > >> >     > >>  > and
> >>> > >> >     > >>  > > > then
> >>> > >> >     > >>  > > > > > >> delete
> >>> > >> >     > >>  > > > > > >> >> >>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>> email
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> and any copies of it.
> Opinions,
> >>> > >> > conclusion
> >>> > >> >     > (etc)
> >>> > >> >     > >>  > that
> >>> > >> >     > >>  > > do
> >>> > >> >     > >>  > > > > not
> >>> > >> >     > >>  > > > > > >> >> relate
> >>> > >> >     > >>  > > > > > >> >> >>>> to
> >>> > >> >     > >>  > > > > > >> >> >>>>>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> official business of this
> >>> company
> >>> > >> shall
> >>> > >> > be
> >>> > >> >     > >>  > understood
> >>> > >> >     > >>  > > as
> >>> > >> >     > >>  > > > > > >> neither
> >>> > >> >     > >>  > > > > > >> >> >>>> given
> >>> > >> >     > >>  > > > > > >> >> >>>>>> nor
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> endorsed by it. IG is a
> trading
> >>> > name
> >>> > >> of
> >>> > >> > IG
> >>> > >> >     > Markets
> >>> > >> >     > >>  > > > Limited
> >>> > >> >     > >>  > > > > > (a
> >>> > >> >     > >>  > > > > > >> >> >>> company
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> registered in England and
> Wales,
> >>> > >> company
> >>> > >> >     > number
> >>> > >> >     > >>  > > > 04008957)
> >>> > >> >     > >>  > > > > > and
> >>> > >> >     > >>  > > > > > >> IG
> >>> > >> >     > >>  > > > > > >> >> >>>> Index
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Limited (a company
> registered in
> >>> > >> > England and
> >>> > >> >     > >>  Wales,
> >>> > >> >     > >>  > > > > company
> >>> > >> >     > >>  > > > > > >> number
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> 01190902). Registered
> address at
> >>> > >> Cannon
> >>> > >> > Bridge
> >>> > >> >     > >>  > House,
> >>> > >> >     > >>  > > 25
> >>> > >> >     > >>  > > > > > >> Dowgate
> >>> > >> >     > >>  > > > > > >> >> >>>> Hill,
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> London EC4R 2YA. Both IG
> Markets
> >>> > >> Limited
> >>> > >> >     > (register
> >>> > >> >     > >>  > > > number
> >>> > >> >     > >>  > > > > > >> 195355)
> >>> > >> >     > >>  > > > > > >> >> >>>> and IG
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Index Limited (register
> number
> >>> > 114059)
> >>> > >> > are
> >>> > >> >     > >>  > authorised
> >>> > >> >     > >>  > > > and
> >>> > >> >     > >>  > > > > > >> >> regulated
> >>> > >> >     > >>  > > > > > >> >> >>>> by
> >>> > >> >     > >>  > > > > > >> >> >>>>>> the
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>> Financial Conduct Authority.
> >>> > >> >     > >>  > > > > > >> >> >>>>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>>> --
> >>> > >> >     > >>  > > > > > >> >> >>>>>> Gwen Shapira
> >>> > >> >     > >>  > > > > > >> >> >>>>>> Product Manager | Confluent
> >>> > >> >     > >>  > > > > > >> >> >>>>>> 650.450.2760 <(650)%20450-2760>
> >>> | @gwenshap
> >>> > >> >     > >>  > > > > > >> >> >>>>>> Follow us: Twitter | blog
> >>> > >> >     > >>  > > > > > >> >> >>>>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>
> >>> > >> >     > >>  > > > > > >> >> >>>>
> >>> > >> >     > >>  > > > > > >> >> >>>> --
> >>> > >> >     > >>  > > > > > >> >> >>>> Gwen Shapira
> >>> > >> >     > >>  > > > > > >> >> >>>> Product Manager | Confluent
> >>> > >> >     > >>  > > > > > >> >> >>>> 650.450.2760 <(650)%20450-2760> |
> >>> @gwenshap
> >>> > >> >     > >>  > > > > > >> >> >>>> Follow us: Twitter | blog
> >>> > >> >     > >>  > > > > > >> >> >>>>
> >>> > >> >     > >>  > > > > > >> >> >>>
> >>> > >> >     > >>  > > > > > >> >> >>>
> >>> > >> >     > >>  > > > > > >> >> >>>
> >>> > >> >     > >>  > > > > > >> >> >>> --
> >>> > >> >     > >>  > > > > > >> >> >>> Nacho (Ignacio) Solis
> >>> > >> >     > >>  > > > > > >> >> >>> Kafka
> >>> > >> >     > >>  > > > > > >> >> >>> nso...@linkedin.com
> >>> > >> >     > >>  > > > > > >> >> >>>
> >>> > >> >     > >>  > > > > > >> >> >
> >>> > >> >     > >>  > > > > > >> >> >
> >>> > >> >     > >>  > > > > > >> >> >
> >>> > >> >     > >>  > > > > > >> >> > --
> >>> > >> >     > >>  > > > > > >> >> > Gwen Shapira
> >>> > >> >     > >>  > > > > > >> >> > Product Manager | Confluent
> >>> > >> >     > >>  > > > > > >> >> > 650.450.2760 <(650)%20450-2760> |
> >>> @gwenshap
> >>> > >> >     > >>  > > > > > >> >> > Follow us: Twitter | blog
> >>> > >> >     > >>  > > > > > >> >>
> >>> > >> >     > >>  > > > > > >> >>
> >>> > >> >     > >>  > > > > > >>
> >>> > >> >     > >>  > > > > > >>
> >>> > >> >     > >>  > > > > > >>
> >>> > >> >     > >>  > > > > > >> --
> >>> > >> >     > >>  > > > > > >> Gwen Shapira
> >>> > >> >     > >>  > > > > > >> Product Manager | Confluent
> >>> > >> >     > >>  > > > > > >> 650.450.2760 <(650)%20450-2760> |
> @gwenshap
> >>> > >> >     > >>  > > > > > >> Follow us: Twitter | blog
> >>> > >> >     > >>  > > > > > >>
> >>> > >> >     > >>  > > > > > >
> >>> > >> >     > >>  > > > > > >
> >>> > >> >     > >>  > > > > > The information contained in this email is
> >>> > strictly
> >>> > >> >     > confidential
> >>> > >> >     > >>  > and
> >>> > >> >     > >>  > > > for
> >>> > >> >     > >>  > > > > > the use of the addressee only, unless
> otherwise
> >>> > >> > indicated.
> >>> > >> >     > If you
> >>> > >> >     > >>  > are
> >>> > >> >     > >>  > > > not
> >>> > >> >     > >>  > > > > > the intended recipient, please do not read,
> >>> copy,
> >>> > use
> >>> > >> > or
> >>> > >> >     > disclose
> >>> > >> >     > >>  > to
> >>> > >> >     > >>  > > > > others
> >>> > >> >     > >>  > > > > > this message or any attachment. Please also
> >>> notify
> >>> > >> the
> >>> > >> >     > sender by
> >>> > >> >     > >>  > > > replying
> >>> > >> >     > >>  > > > > > to this email or by telephone (+44(020 7896
> >>> 0011)
> >>> > and
> >>> > >> > then
> >>> > >> >     > delete
> >>> > >> >     > >>  > the
> >>> > >> >     > >>  > > > > email
> >>> > >> >     > >>  > > > > > and any copies of it. Opinions, conclusion
> >>> (etc)
> >>> > that
> >>> > >> > do not
> >>> > >> >     > >>  relate
> >>> > >> >     > >>  > > to
> >>> > >> >     > >>  > > > > the
> >>> > >> >     > >>  > > > > > official business of this company shall be
> >>> > understood
> >>> > >> > as
> >>> > >> >     > neither
> >>> > >> >     > >>  > > given
> >>> > >> >     > >>  > > > > nor
> >>> > >> >     > >>  > > > > > endorsed by it. IG is a trading name of IG
> >>> Markets
> >>> > >> > Limited (a
> >>> > >> >     > >>  > company
> >>> > >> >     > >>  > > > > > registered in England and Wales, company
> number
> >>> > >> > 04008957)
> >>> > >> >     > and IG
> >>> > >> >     > >>  > > Index
> >>> > >> >     > >>  > > > > > Limited (a company registered in England and
> >>> > Wales,
> >>> > >> > company
> >>> > >> >     > >>  number
> >>> > >> >     > >>  > > > > > 01190902). Registered address at Cannon
> Bridge
> >>> > House,
> >>> > >> > 25
> >>> > >> >     > Dowgate
> >>> > >> >     > >>  > > Hill,
> >>> > >> >     > >>  > > > > > London EC4R 2YA. Both IG Markets Limited
> >>> (register
> >>> > >> > number
> >>> > >> >     > 195355)
> >>> > >> >     > >>  > and
> >>> > >> >     > >>  > > > IG
> >>> > >> >     > >>  > > > > > Index Limited (register number 114059) are
> >>> > authorised
> >>> > >> > and
> >>> > >> >     > >>  regulated
> >>> > >> >     > >>  > > by
> >>> > >> >     > >>  > > > > the
> >>> > >> >     > >>  > > > > > Financial Conduct Authority.
> >>> > >> >     > >>  > > > > >
> >>> > >> >     > >>  > > > >
> >>> > >> >     > >>  > > >
> >>> > >> >     > >>  > >
> >>> > >> >     > >>  >
> >>> > >> >     > >>  The information contained in this email is strictly
> >>> > >> confidential
> >>> > >> > and
> >>> > >> >     > for
> >>> > >> >     > >>  the use of the addressee only, unless otherwise
> >>> indicated.
> >>> > If
> >>> > >> > you are
> >>> > >> >     > not
> >>> > >> >     > >>  the intended recipient, please do not read, copy, use
> or
> >>> > >> > disclose to
> >>> > >> >     > others
> >>> > >> >     > >>  this message or any attachment. Please also notify the
> >>> > sender
> >>> > >> by
> >>> > >> >     > replying
> >>> > >> >     > >>  to this email or by telephone (+44(020 7896 0011) and
> >>> then
> >>> > >> > delete the
> >>> > >> >     > email
> >>> > >> >     > >>  and any copies of it. Opinions, conclusion (etc) that
> do
> >>> not
> >>> > >> > relate to
> >>> > >> >     > the
> >>> > >> >     > >>  official business of this company shall be understood
> as
> >>> > >> neither
> >>> > >> > given
> >>> > >> >     > nor
> >>> > >> >     > >>  endorsed by it. IG is a trading name of IG Markets
> >>> Limited
> >>> > (a
> >>> > >> > company
> >>> > >> >     > >>  registered in England and Wales, company number
> 04008957)
> >>> > and
> >>> > >> IG
> >>> > >> > Index
> >>> > >> >     > >>  Limited (a company registered in England and Wales,
> >>> company
> >>> > >> > number
> >>> > >> >     > >>  01190902). Registered address at Cannon Bridge House,
> 25
> >>> > >> Dowgate
> >>> > >> > Hill,
> >>> > >> >     > >>  London EC4R 2YA. Both IG Markets Limited (register
> number
> >>> > >> > 195355) and
> >>> > >> >     > IG
> >>> > >> >     > >>  Index Limited (register number 114059) are authorised
> and
> >>> > >> > regulated by
> >>> > >> >     > the
> >>> > >> >     > >>  Financial Conduct Authority.
> >>> > >> >     > >
> >>> > >> >     > > --
> >>> > >> >     > > Nacho - Ignacio Solis - iso...@igso.net
> >>> > >> >     > The information contained in this email is strictly
> >>> confidential
> >>> > >> and
> >>> > >> > for
> >>> > >> >     > the use of the addressee only, unless otherwise
> indicated. If
> >>> > you
> >>> > >> > are not
> >>> > >> >     > the intended recipient, please do not read, copy, use or
> >>> > disclose
> >>> > >> to
> >>> > >> > others
> >>> > >> >     > this message or any attachment. Please also notify the
> >>> sender by
> >>> > >> > replying
> >>> > >> >     > to this email or by telephone (+44(020 7896 0011) and then
> >>> > delete
> >>> > >> > the email
> >>> > >> >     > and any copies of it. Opinions, conclusion (etc) that do
> not
> >>> > relate
> >>> > >> > to the
> >>> > >> >     > official business of this company shall be understood as
> >>> neither
> >>> > >> > given nor
> >>> > >> >     > endorsed by it. IG is a trading name of IG Markets
> Limited (a
> >>> > >> company
> >>> > >> >     > registered in England and Wales, company number 04008957)
> >>> and IG
> >>> > >> > Index
> >>> > >> >     > Limited (a company registered in England and Wales,
> company
> >>> > number
> >>> > >> >     > 01190902). Registered address at Cannon Bridge House, 25
> >>> Dowgate
> >>> > >> > Hill,
> >>> > >> >     > London EC4R 2YA. Both IG Markets Limited (register number
> >>> > 195355)
> >>> > >> > and IG
> >>> > >> >     > Index Limited (register number 114059) are authorised and
> >>> > regulated
> >>> > >> > by the
> >>> > >> >     > Financial Conduct Authority.
> >>> > >> >     >
> >>> > >> >
> >>> > >> >
> >>> > >> >
> >>> > >> >     --
> >>> > >> >     Nacho - Ignacio Solis - iso...@igso.net
> >>> > >> >
> >>> > >> >
> >>> > >> > The information contained in this email is strictly confidential
> >>> and
> >>> > for
> >>> > >> > the use of the addressee only, unless otherwise indicated. If
> you
> >>> are
> >>> > not
> >>> > >> > the intended recipient, please do not read, copy, use or
> disclose
> >>> to
> >>> > >> others
> >>> > >> > this message or any attachment. Please also notify the sender by
> >>> > replying
> >>> > >> > to this email or by telephone (+44(020 7896 0011) and then
> delete
> >>> the
> >>> > >> email
> >>> > >> > and any copies of it. Opinions, conclusion (etc) that do not
> >>> relate to
> >>> > >> the
> >>> > >> > official business of this company shall be understood as neither
> >>> given
> >>> > >> nor
> >>> > >> > endorsed by it. IG is a trading name of IG Markets Limited (a
> >>> company
> >>> > >> > registered in England and Wales, company number 04008957) and IG
> >>> Index
> >>> > >> > Limited (a company registered in England and Wales, company
> number
> >>> > >> > 01190902). Registered address at Cannon Bridge House, 25 Dowgate
> >>> Hill,
> >>> > >> > London EC4R 2YA. Both IG Markets Limited (register number
> 195355)
> >>> and
> >>> > IG
> >>> > >> > Index Limited (register number 114059) are authorised and
> >>> regulated by
> >>> > >> the
> >>> > >> > Financial Conduct Authority.
> >>> > >> >
> >>> > >>
> >>> >
> >>> >
> >>> >
> >>> > --
> >>> > Gwen Shapira
> >>> > Product Manager | Confluent
> >>> > 650.450.2760 <(650)%20450-2760> | @gwenshap
> >>> > Follow us: Twitter | blog
> >>> >
> >>> >
> >>>
> >>
> >>
> >>
> >> --
> >> *Todd Palino*
> >> Staff Site Reliability Engineer
> >> Data Infrastructure Streaming
> >>
> >>
> >>
> >> linkedin.com/in/toddpalino
> >>
> >>
> >
> >
> > --
> > *Todd Palino*
> > Staff Site Reliability Engineer
> > Data Infrastructure Streaming
> >
> >
> >
> > linkedin.com/in/toddpalino
>
>
>
> --
> Gwen Shapira
> Product Manager | Confluent
> 650.450.2760 | @gwenshap
> Follow us: Twitter | blog
>



-- 
*Todd Palino*
Staff Site Reliability Engineer
Data Infrastructure Streaming



linkedin.com/in/toddpalino

Reply via email to