Yes and no. I did overload the term "control message". EOS control messages are for client-broker communication and thus never exposed to any application. And I think this is a good design because broker needs to understand those control messages. Thus, this should be a protocol change.
The type of control messages I have in mind are for client-client (application-application) communication and the broker is agnostic to them. Thus, it should not be a protocol change. -Matthias On 12/14/16 9:42 AM, radai wrote: > arent control messages getting pushed as their own top level protocol > change (and a fairly massive one) for the transactions KIP ? > > On Tue, Dec 13, 2016 at 5:54 PM, Matthias J. Sax <matth...@confluent.io> > wrote: > >> Hi, >> >> I want to add a completely new angle to this discussion. For this, I >> want to propose an extension for the headers feature that enables new >> uses cases -- and those new use cases might convince people to support >> headers (of course including the larger scoped proposal). >> >> Extended Proposal: >> >> Allow messages with a certain header key to be special "control >> messages" (w/ o w/o payload) that are not exposed to an application via >> .poll(). >> >> Thus, a consumer client would automatically skip over those messages. If >> an application knows about embedded control messages, it can "sing up" >> to those messages by the consumer client and either get a callback or >> the consumer auto-drop for this messages gets disabled (allowing to >> consumer those messages via poll()). >> >> (The details need further considerations/discussion. I just want to >> sketch the main idea.) >> >> Usage: >> >> There is a shared topic (ie, used by multiple applications) and a >> producer application wants to embed a special message in the topic for a >> dedicated consumer application. Because only one application will >> understand this message, it cannot be a regular message as this would >> break all applications that do not understand this message. The producer >> application would set a special metadata key and no consumer application >> would see this control message by default because they did not enable >> their consumer client to return this message in poll() (and the client >> would just drop this message with special metadata key). Only the single >> application that should receive this message, will subscribe to this >> message on its consumer client and process it. >> >> >> Concrete Use Case: Kafka Streams >> >> In Kafka Streams, we would like to propagate "control messages" from >> subtopology to subtopology. There are multiple scenarios for which this >> would be useful. For example, currently we do not guarantee a >> "consistent shutdown" of an application. By this, I mean that input >> records might not be completely processed by the whole topology because >> the application shutdown happens "in between" and an intermediate result >> topic gets "stock" in an intermediate topic. Thus, a user would see an >> committed offset of the source topic of the application, but no >> corresponding result record in the output topic. >> >> Having "shutdown markers" would allow us, to first stop the upstream >> subtopology and write this marker into the intermediate topic and the >> downstream subtopology would only shut down itself after is sees the >> "shutdown marker". Thus, we can guarantee on shutdown, that no >> "in-flight" messages got stuck in intermediate topics. >> >> >> A similar usage would be for KIP-95 (Incremental Batch Processing). >> There was a discussion about the proposed metadata topic, and we could >> avoid this metadata topic if we would have "control messages". >> >> >> Right now, we cannot insert an "application control message" because >> Kafka Streams does not own all topics it read/writes and thus might >> break other consumer application (as described above) if we inject >> random messages that are not understood by other apps. >> >> >> Of course, one can work around "embedded control messaged" by using an >> additional topic to propagate control messaged between application (as >> suggestion in KIP-95 via a metadata topic for Kafka Streams). But there >> are major concerns about adding this metadata topic in the KIP and this >> shows that other application that need a similar pattern might profit >> from topic embedded "control messages", too. >> >> >> One last important consideration: those "control messages" are used for >> client to client communication and are not understood by the broker. >> Thus, those messages should not be enabled within the message format >> (c.f. tombstone flag -- KIP-87). However, "client land" record headers >> would be a nice way to implement them. Because KIP-82 did consider key >> namespaces for metatdata keys, this extension should not be an own KIP >> but should be included in KIP-82 to reserve a namespace for "control >> message" in the first place. >> >> >> Sorry for the long email... Looking forward to your feedback. >> >> >> -Matthias >> >> >> >> >> >> >> >> >> >> On 12/8/16 12:12 AM, Michael Pearce wrote: >>> Hi Jun >>> >>> 100) each time a transaction exits a jvm for a remote system (HTTP/JMS/ >> Hopefully one day kafka) the APM tools stich in a unique id (though I >> believe it contains the end2end uuid embedded in this id), on receiving the >> message at the receiving JVM the apm code takes this out, and continues its >> tracing on the that new thread. Both JVM’s (and other languages the APM >> tool supports) send this data async back to the central controllers where >> the stiching togeather occurs. For this they need some header space for >> them to put this id. >>> >>> 101) Yes indeed we have a business transaction Id in the payload. Though >> this is a system level tracing, that we need to have marry up. Also as per >> note on end2end encryption we’d be unable to prove the flow if the payload >> is encrypted as we’d not have access to this at certain points of the flow >> through the infrastructure/platform. >>> >>> >>> 103) As said we use this mechanism in IG very successfully, as stated >> per key we guarantee the transaction producing app to handle the >> transaction of a key at one DC unless at point of critical failure where we >> have to flip processing to another. We care about key ordering. >>> I disagree on the offset comment for the partition solution unless you >> do full ISR, or expensive full XA transactions even with partitions you >> cannot fully guarantee offsets would match. >>> >>> 105) Very much so, I need to have access at the platform level to the >> other meta data all mentioned, without having to need to have access to the >> encryption keys of the payload. >>> >>> 106) >>> Techincally yes for AZ/Region/Cluster, but then we’d need to have a >> global producerId register which would be very hard to enforce/ensure is >> current and correct, just to understand the message origins of its >> region/az/cluster for routing. >>> The client wrapper version, producerId can be the same, as obviously the >> producer could upgrade its wrapper, as such we need to know what wrapper >> version the message is created with. >>> Likewise the IP address, as stated we can have our producer move, where >> its IP would change. >>> >>> 107) >>> UUID is set on the message by interceptors before actual producer >> transport send. This is for platform level message dedupe guarantee, the >> business payload should be agnostic to this. Please see >> https://activemq.apache.org/artemis/docs/1.5.0/duplicate-detection.html >> note this is not touching business payloads. >>> >>> >>> >>> On 06/12/2016, 18:22, "Jun Rao" <j...@confluent.io> wrote: >>> >>> Hi, Michael, >>> >>> Thanks for the reply. I find it very helpful. >>> >>> Data lineage: >>> 100. I'd like to understand the APM use case a bit more. It sounds >> like >>> that those APM plugins can generate a transaction id that we could >>> potentially put in the header of every message. How would you >> typically >>> make use of such transaction ids? Are there other metadata >> associated with >>> the transaction id and if so, how are they propagated downstream? >>> >>> 101. For the finance use case, if the concept of transaction is >> important, >>> wouldn't it be typically included in the message payload instead of >> as an >>> optional header field? >>> >>> 102. The data lineage that Altas and Navigator support seems to be >> at the >>> dataset level, not per record level? So, not sure if per message >> headers >>> are relevant there. >>> >>> Mirroring: >>> 103. The benefit of using separate partitions is that it potentially >> makes >>> it easy to preserve offsets during mirroring. This will make it >> easier for >>> consumer to switch clusters. Currently, the consumers can switch >> clusters >>> by using the timestampToOffset() api, but it has to deal with >> duplicates. >>> Good point on the issue with log compact and I am not sure how to >> address >>> this. However, even if we mirror into the existing partitions, the >> ordering >>> for messages generated from different clusters seems >> non-deterministic >>> anyway. So, it seems that the consumers already have to deal with >> that? If >>> a topic is compacted, does that mean which messages are preserved is >> also >>> non-deterministic across clusters? >>> >>> 104. Good point on partition key. >>> >>> End-to-end encryption: >>> 105. So, it seems end-to-end encryption is useful. Are headers >> useful there? >>> >>> Auditing: >>> 106. It seems other than the UUID, all other metadata are per >> producer? >>> >>> EOS: >>> 107. How are those UUIDs generated? I am not sure if they can be >> generated >>> in the producer library. An application may send messages through a >> load >>> balancer and on retry, the same message could be routed to a >> different >>> producer instance. So, it seems that the application has to generate >> the >>> UUIDs. In that case, shouldn't the application just put the UUID in >> the >>> payload? >>> >>> Thanks, >>> >>> Jun >>> >>> >>> On Fri, Dec 2, 2016 at 4:57 PM, Michael Pearce < >> michael.pea...@ig.com> >>> wrote: >>> >>> > Hi Jun. >>> > >>> > Per Transaction Tracing / Data Lineage. >>> > >>> > As Stated in the KIP this has the first use case of how many APM >> tools now >>> > work. >>> > I would find it impossible for any one to argue this is not >> important or a >>> > niche market as it has its own gartner report for this space. Such >>> > companies as Appdynamics, NewRelic, Dynatrace, Hawqular are but a >> few. >>> > >>> > Likewise these APM tools can help very rapidly track down issues >> and >>> > automatically capture metrics, perform actions based on unexpected >> behavior >>> > to auto recover services. >>> > >>> > Before mentioning looking at aggregated stats, in these cases where >>> > actually on critical flows we cannot afford to have aggregated >> rolled up >>> > stats only. >>> > >>> > With the APM tool we use its actually able to detect a single >> transaction >>> > failure and capture the thread traces in the JVM where it failed >> and >>> > everything for us, to the point it sends us alerts where we have >> this >>> > giving the line number of the code that caused it, the transaction >> trace >>> > through all the services and endpoints (supported) upto the point >> of >>> > failure, it can also capture the data in and out (so we can >> replay). >>> > Because atm Kafka doesn’t support us being able to stich in these >> tracing >>> > transaction ids natively, we cannot get these benefits as such is >> limiting >>> > our ability support apps and monitor them to the same standards we >> come to >>> > expect when on a kafka flow. >>> > >>> > This actually ties in with Data Lineage, as the same tracing can >> be used >>> > to back stich this. Essentially many times due to the sums of money >>> > involved there are disputes, and typically as a financial >> institute the >>> > easiest and cleanest way to prove when disputes arise is to >> present the >>> > actual flow and processes involved in a transaction. >>> > >>> > Likewise as Hadoop matures its evident this case is important, as >> tools >>> > such as Atlas (Hortonworks led) and Navigator (cloudera led) are >> evident >>> > also I believe the importance here is very much NOT just a >> financial issue. >>> > >>> > From a MDM point of view any company wanting to care about Data >> Quality >>> > and Data Governance - Data Lineage is a key piece in this puzzle. >>> > >>> > >>> > >>> > RE Mirroring, >>> > >>> > As per the KIP in-fact this is exactly what we do re cluster id, >> to mirror >>> > a network of clusters between AZ’s / Regions. We know a >> transaction for a >>> > key will be done within a AZ/Region, as such we know the write to >> kafka >>> > would be ordered per key. But we need eventual view of that across >> in our >>> > other regions/az’s. When we have complete AZ or Region failure we >> know >>> > there will be a brief interruption whilst those transactions are >> moved to >>> > another region but we expect after it to continue. >>> > >>> > As mentioned having separate Partions to do this starts to get >>> > ugly/complicated for us: >>> > how would I do compaction where a key is in two partitions? >>> > How do we balance consumers so where multiple partitions with the >> same key >>> > goto the same consumer >>> > What do you do if cluster 1 has 5 partitions but cluster 20 has 10 >> because >>> > its larger kit in our more core DC’s, as such key to partition >> mappings for >>> > consumers get even more complicated. >>> > What do you do if we add or remove a complete region >>> > >>> > Where as simple mirror will work we just need to ensure we don’t >> have a >>> > cycle which we can do with clusterId. >>> > >>> > We even have started to look at shortest path mirror routing based >> on >>> > clusterId, if we also had the region and az info on the originating >>> > message, this we have not implemented but some ideas come from >> network >>> > routing, and also the dispatcher router in apache qpid. >>> > >>> > Also we need to have data perimeters e.g. certain data cannot leave >>> > certain countries borders. We want this all automated so that at >> the >>> > platform level without having to touch or look at the business >> data inside >>> > we can have headers we can put tags into so that we can ensure >> this doesn’t >>> > occur when we mirror. (actually links in to data lineage / tracing >> as again >>> > we need to tag messages at a platform level) Examples are we are >> not >>> > allowed Private customer details to leave Switzerland, yet we need >> those >>> > systems integrated. >>> > >>> > Lastly around mirroring we have a partionKey field, as the key >> used for >>> > portioning logic != compaction key all the time but we want to >> preserve it >>> > for when we mirror so that if source cluster partition count != >> destination >>> > cluster partition count we can honour the same partitioning logic. >>> > >>> > >>> > >>> > RE End 2 End encryption >>> > >>> > As I believe mentioned just before, the solution you mention just >> doesn’t >>> > cut the mustard these days with many regulators. An operations >> person with >>> > access to the box should not be able to have access to the data. >> Many now >>> > actually impose quite literally the implementation expected being >> end2end >>> > encryption for certain data (Singapore for us is one that I am >> most aware >>> > of). In fact we’re even now needing encrypt the data and store the >> keys in >>> > HSM modules. >>> > >>> > Likewise the performance penalty on encrypting decrypting as you >> produce >>> > over wire, then again encrypt decrypt as the data is stored on the >> brokers >>> > disks and back again, then again encrypted and decrypted back over >> the wire >>> > each time for each consumer all adds up, ignoring this doubling >> with mirror >>> > makers etc. simply encrypting the value once on write by the >> client and >>> > again decrypting on consume by the consumer is far more >> performant, but >>> > then the routing and platform meta data needs to be separate (thus >> headers) >>> > >>> > >>> > >>> > RE Auditing: >>> > >>> > Our Auditing needs are: >>> > Producer Id, >>> > Origin Cluster Id that message first produced into >>> > Origin AZ – agreed we can derive this if we have cluster id, but >> it makes >>> > resolving this for audit reporting a lot easier. >>> > Origin Region – agreed we can derive this if we have cluster id, >> but it >>> > makes resolving this for audit reporting a lot easier. >>> > Unique Message Identification (this is not the same as transaction >>> > tracing) – note offset and partition are not the same, as when we >> mirror or >>> > have for what ever system failure duplicate send, >>> > Custom Client wrapper version (where organizations have to wrap >> the kafka >>> > client for added features) so we know what version of the wrapper >> is used >>> > Producer IP address (in case of clients being in our vm/open stack >> infra >>> > where they can move around, producer id will stay the same but >> this would >>> > change) >>> > >>> > >>> > >>> > RE Once and only once delivery case >>> > >>> > Using the same Message UUID for auditing we can achieve this quite >> simply. >>> > >>> > As per how some other brokers do this (cough qpid, artemis) >> message uuid >>> > are used to dedupe where message is sent and produced but the >> client didn’t >>> > receive the ack, and there for replays the send, by having a >> unique message >>> > id per message, this can be filtered out, on consumers where >> message >>> > delivery may occur twice for what ever reasons a message uuid can >> be used >>> > to remove duplicates being deliverd , like wise we can do this in >> the >>> > mirrormakers so if we detect a dupe message we can avoid >> replicating it. >>> > >>> > >>> > >>> > >>> > Cheers >>> > Mike >>> > >>> > >>> > >>> > On 02/12/2016, 22:09, "Jun Rao" <j...@confluent.io> wrote: >>> > >>> > Since this KIP affects message format, wire protocol, apis, I >> think >>> > it's >>> > worth spending a bit more time to nail down the concrete use >> cases. It >>> > would be bad if we add this feature, but when start >> implementing it >>> > for say >>> > mirroring, we then realize that header is not the best >> approach. >>> > Initially, >>> > I thought I was convinced of the use cases of headers and was >> trying to >>> > write down a few use cases to convince others. That's when I >> became >>> > less >>> > certain. For me to be convinced, I just want to see two strong >> use >>> > cases >>> > (instead of 10 maybe use cases) in the third-party space. The >> reason is >>> > that when we discussed the use cases within a company, often >> it ends >>> > with >>> > "we can't force everyone to use this standard since we may >> have to >>> > integrate with third-party tools". >>> > >>> > At present, I am not sure why headers are useful for things >> like >>> > schemaId >>> > or encryption. In order to do anything useful to the value, >> one needs >>> > to >>> > know the schemaId or how data is encrypted, but header is >> optional. >>> > But, I >>> > can be convinced if someone (Radai, Sean, Todd?) provides more >> details >>> > on >>> > the argument. >>> > >>> > I am not very sure header is the best approach for mirroring >> either. If >>> > someone has thought about this more, I'd be happy to hear. >>> > >>> > I can see the data lineage use case. I am just not sure how >> widely >>> > applicable this is. If someone familiar with this space can >> justify >>> > this is >>> > a significant use case, say in the finance industry, this >> would be a >>> > strong >>> > use case. >>> > >>> > I can see the auditing use case. I am just not sure if a native >>> > producer id >>> > solves that problem. If there are additional metadata that's >> worth >>> > collecting but not covered by the producer id, that would make >> this a >>> > strong use case. >>> > >>> > Thanks, >>> > >>> > Jun >>> > >>> > >>> > On Fri, Dec 2, 2016 at 1:41 PM, radai < >> radai.rosenbl...@gmail.com> >>> > wrote: >>> > >>> > > this KIP is about enabling headers, nothing more nothing >> less - so >>> > no, >>> > > broker-side use of headers is not in the KIP scope. >>> > > >>> > > obviously though, once you have headers potential use cases >> could >>> > include >>> > > broker-side header-aware interceptors (which would be the >> topic of >>> > other >>> > > future KIPs). >>> > > >>> > > a trivially clear use case (to me) would be using such >> broker-side >>> > > interceptors to enforce compliance with organizational >> policies - it >>> > would >>> > > make our SREs lives much easier if instead of retroactively >>> > discovering >>> > > "rogue" topics/users those messages would have been rejected >>> > up-front. >>> > > >>> > > the kafka broker code is lacking any such extensibility >> support >>> > (beyond >>> > > maybe authorizer) which is why these use cases were left out >> of the >>> > "case >>> > > for headers" doc - broker extensibility is a separate >> discussion. >>> > > >>> > > On Fri, Dec 2, 2016 at 12:59 PM, Gwen Shapira < >> g...@confluent.io> >>> > wrote: >>> > > >>> > > > Woah, I wasn't aware this is something we'll do. It wasn't >> in the >>> > KIP, >>> > > > right? >>> > > > >>> > > > I guess we could do it the same way ACLs currently work. >>> > > > I had in mind something that will allow admins to apply >> rules to >>> > the >>> > > > new create/delete/config topic APIs. So Todd can decide to >> reject >>> > > > "create topic" requests that ask for more than 40 >> partitions, or >>> > > > require exactly 3 replicas, or no more than 50GB partition >> size, >>> > etc. >>> > > > >>> > > > ACLs were added a bit ad-hoc, if we are planning to apply >> more >>> > rules >>> > > > to requests (and I think we should), we may want a bit >> more generic >>> > > > design around that. >>> > > > >>> > > > On Fri, Dec 2, 2016 at 7:16 AM, radai < >> radai.rosenbl...@gmail.com> >>> > > wrote: >>> > > > > "wouldn't you be in the business of making sure everyone >> uses >>> > them >>> > > > > properly?" >>> > > > > >>> > > > > thats where a broker-side plugin would come handy - any >> incoming >>> > > message >>> > > > > that does not conform to org policy (read - does not >> have the >>> > proper >>> > > > > headers) gets thrown out (with an error returned to user) >>> > > > > >>> > > > > On Thu, Dec 1, 2016 at 8:44 PM, Todd Palino < >> tpal...@gmail.com> >>> > wrote: >>> > > > > >>> > > > >> Come on, I’ve done at least 2 talks on this one :) >>> > > > >> >>> > > > >> Producing counts to a topic is part of it, but that’s >> only >>> > part. So >>> > > you >>> > > > >> count you have 100 messages in topic A. When you mirror >> topic A >>> > to >>> > > > another >>> > > > >> cluster, you have 99 messages. Where was your problem? >> Or >>> > worse, you >>> > > > have >>> > > > >> 100 messages, but one producer duplicated messages and >> another >>> > one >>> > > lost >>> > > > >> messages. You need details about where the message came >> from in >>> > order >>> > > to >>> > > > >> pinpoint problems when they happen. Source producer >> info, where >>> > it was >>> > > > >> produced into your infrastructure, and when it was >> produced. >>> > This >>> > > > requires >>> > > > >> you to add the information to the message. >>> > > > >> >>> > > > >> And yes, you still need to maintain your clients. So >> maybe my >>> > original >>> > > > >> example was not the best. My thoughts on not wanting to >> be >>> > responsible >>> > > > for >>> > > > >> message formats stands, because that’s very much >> separate from >>> > the >>> > > > client. >>> > > > >> As you know, we have our own internal client library >> that can >>> > insert >>> > > the >>> > > > >> right headers, and right now inserts the right audit >>> > information into >>> > > > the >>> > > > >> message fields. If they exist, and assuming the message >> is Avro >>> > > encoded. >>> > > > >> What if someone wants to use JSON instead for a good >> reason? >>> > What if >>> > > > user X >>> > > > >> wants to encrypt messages, but user Y does not? >> Maintaining the >>> > client >>> > > > >> library is still much easier than maintaining the >> message >>> > formats. >>> > > > >> >>> > > > >> -Todd >>> > > > >> >>> > > > >> >>> > > > >> On Thu, Dec 1, 2016 at 6:21 PM, Gwen Shapira < >> g...@confluent.io >>> > > >>> > > wrote: >>> > > > >> >>> > > > >> > Based on your last sentence, consider me convinced :) >>> > > > >> > >>> > > > >> > I get why headers are critical for Mirroring (you >> need tags to >>> > > prevent >>> > > > >> > loops and sometimes to route messages to the correct >>> > destination). >>> > > > >> > But why do you need headers to audit? We are auditing >> by >>> > producing >>> > > > >> > counts to a side topic (and I was under the >> impression you do >>> > the >>> > > > >> > same), so we never need to modify the message. >>> > > > >> > >>> > > > >> > Another thing - after we added headers, wouldn't you >> be in the >>> > > > >> > business of making sure everyone uses them properly? >> Making >>> > sure >>> > > > >> > everyone includes the right headers you need, not >> using the >>> > header >>> > > > >> > names you intend to use, etc. I don't think the >> "policing" >>> > business >>> > > > >> > will ever go away. >>> > > > >> > >>> > > > >> > On Thu, Dec 1, 2016 at 5:25 PM, Todd Palino < >>> > tpal...@gmail.com> >>> > > > wrote: >>> > > > >> > > Got it. As an ops guy, I'm not very happy with the >>> > workaround. >>> > > Avro >>> > > > >> means >>> > > > >> > > that I have to be concerned with the format of the >> messages >>> > in >>> > > > order to >>> > > > >> > run >>> > > > >> > > the infrastructure (audit, mirroring, etc.). That >> means >>> > that I >>> > > have >>> > > > to >>> > > > >> > > handle the schemas, and I have to enforce rules >> about good >>> > > formats. >>> > > > >> This >>> > > > >> > is >>> > > > >> > > not something I want to be in the business of, >> because I >>> > should be >>> > > > able >>> > > > >> > to >>> > > > >> > > run a service infrastructure without needing to be >> in the >>> > weeds of >>> > > > >> > dealing >>> > > > >> > > with customer data formats. >>> > > > >> > > >>> > > > >> > > Trust me, a sizable portion of my support time is >> spent >>> > dealing >>> > > with >>> > > > >> > schema >>> > > > >> > > issues. I really would like to get away from that. >> Maybe >>> > I'd have >>> > > > more >>> > > > >> > time >>> > > > >> > > for other hobbies. Like writing. ;) >>> > > > >> > > >>> > > > >> > > -Todd >>> > > > >> > > >>> > > > >> > > On Thu, Dec 1, 2016 at 4:04 PM Gwen Shapira < >>> > g...@confluent.io> >>> > > > wrote: >>> > > > >> > > >>> > > > >> > >> I'm pretty satisfied with the current workarounds >> (Avro >>> > container >>> > > > >> > >> format), so I'm not too excited about the extra >> work >>> > required to >>> > > do >>> > > > >> > >> headers in Kafka. I absolutely don't mind it if >> you do >>> > it... >>> > > > >> > >> I think the Apache convention for "good idea, but >> not >>> > willing to >>> > > > put >>> > > > >> > >> any work toward it" is +0.5? anyway, that's what I >> was >>> > trying to >>> > > > >> > >> convey :) >>> > > > >> > >> >>> > > > >> > >> On Thu, Dec 1, 2016 at 3:05 PM, Todd Palino < >>> > tpal...@gmail.com> >>> > > > >> wrote: >>> > > > >> > >> > 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/confl >>> > uence/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 >>> > > > >> > >> > >>> > > > >> > >>> > > > >> > >>> > > > >> > >>> > > > >> > -- >>> > > > >> > 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 >>> > > > >> >>> > > > >>> > > > >>> > > > >>> > > > -- >>> > > > Gwen Shapira >>> > > > Product Manager | Confluent >>> > > > 650.450.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. >>> >> >> >
signature.asc
Description: OpenPGP digital signature