Makes sense! -Jay
On Mon, Dec 19, 2016 at 2:40 PM, Michael Pearce <michael.pea...@ig.com> wrote: > Wow just read that def over tired. Hopefully it makes sense. Or you get > the gist at least. > > ________________________________________ > From: Michael Pearce <michael.pea...@ig.com> > Sent: Monday, December 19, 2016 9:19:02 PM > To: dev@kafka.apache.org > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Flag > > Hi Jay, > > Agreed this stemmed as offshoot from KIP-82. > > Which our main driver for was to be able to have some headers for a null > value as such for our routing, audit, tracing and a few other bits which > currently we are forced to do with a message wrapper, if we all agreed on > KIP-82 that we need native headers and look to implement that the push for > this would dissipate. > > This KIP would allow for though one use case that comes to mind we could > see which is to have business data with a delete. Though as said this isn't > something we are pushing for think really we would have. > > As such in summary yes, if you want to fully support KIP-82 and we can get > that agreed in principle and a target release version, I think quite a few > guys at LinkedIn are quite pro it too ;) I'm happy to drop this one. > > Cheers > Mike > > Sent using OWA for iPhone > ________________________________________ > From: Jay Kreps <j...@confluent.io> > Sent: Monday, December 19, 2016 8:51:23 PM > To: dev@kafka.apache.org > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Flag > > Hey Michael, > > Here is the compatibility concern I have: > > 1. You have a consumer app that relies on value == null to indicate a > delete (current semantics). > 2. You upgrade Kafka and your clients. > 3. Some producer starts using the tombstone field in combination with > non-null. > > I share Ismael's dislike of setting tombstones on records with null values. > This makes sense as a transitional state, but as an end state its a bit > weird. You'd expect to be able to mix null values and tombstones, and have > the null values remain and the tombstones get compacted. However what will > happen is both will be compacted and upon debugging this you'll learn that > we sometimes use null in the value to indicate tombstone. Ismael's solution > is a bigger compatibility break, though, so not sure if that is better. > > My other question is the relationship to KIP-82. My read is that this KIP > solves some but not all of the problems KIP-82 is intended for. KIP-82, on > the other hand, seems to address most of the motivating uses for this KIP. > The exception is maybe item (5) on the list where you want to simultaneous > delete and convey some information to subscribers, but I couldn't construct > a concrete examples for that one. Do we need to rationalize these two KIPs? > That is, do you still advocate this proposal if we do KIP-82 and vice > versa? As you may have noticed I'm somewhat emotionally invested in the > simplicity of the core data model, so my default position is let's try to > avoid stuffing more stuff in, but if we have to add stuff I like each of > these individually more than doing both. :-) > > -Jay > > > > > On Fri, Dec 16, 2016 at 12:16 PM, Michael Pearce <michael.pea...@ig.com> > wrote: > > > Hi Jay > > > > I disagree here that we are breaking any compatibility, we went through > > this on the discussion thread in fact with the help of that thread is how > > the kip came to the solution. > > > > Also on the supported combinations front you mention, we are not taking > > anything away afaik. > > > > Currently supported are only are: > > Null value = delete > > Non-null value = non delete > > > > With this kip we would support > > Null value + tombstone = delete > > Non null value + tombstone = delete > > Non null value + no tombstone = non delete > > > > As for the alternative idea, this is simply a new policy, how can there > be > > confusion here? For this policy it would be explicit that tombstone > marker > > would need to be set for a delete. > > > > I'm going to vent a little now as starting to get quite frustrated. > > > > We are going round in circles on kip-82 as per use cases there is now > many > > use cases, how many more are needed? just because confluent don't see > these > > doesn't mean they aren't real use cases other have, this is the point of > > the Apache foundation, it shouldn't be the view of just one organisation. > > It really is getting a feeling of the NIH syndrome. Rather than it being > > constructive on discussion of the implementation detail. > > > > kip-87 spawned from as on the kip call we all agreed this was needed. And > > would at least allow a custom wrapper be supported in a compacted topic, > > allowing meta data. Which again now I feel we are spinning wheels, and > > simply finding reasons not support it. > > > > Cheers > > Mike > > > > > > > > Sent using OWA for iPad > > ________________________________________ > > From: Jay Kreps <j...@confluent.io> > > Sent: Friday, December 16, 2016 7:09:23 PM > > To: dev@kafka.apache.org > > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Flag > > > > Hey Michael, > > > > I do think it might have been better had we started with a separate > concept > > of null vs delete. Given that we are where we are, I'm not sure that the > > possible cures we explored so far are better than the disease. > > > > I apologize for coming to this late, but I didn't really understand the > > implications of the KIP and that we'd be breaking compatibility with > > existing apps until the vote had begun, and in my defense I'm not sure > the > > other folks voting did either. > > > > I think we all agree there are many existing apps that are built with the > > assumption of "null value non-tombstone" and it isn't possible to > > disambiguate these from tombstones on the producer. It isn't that anyone > is > > saying we have to support all four possibilities at once, it's that we > > simply can't orphan one of the existing combinations or our users will > eat > > us! > > > > If I've understood your alternate solution of adding another setting for > > compaction, I think this does fix the compatibility problem, but it adds > an > > odd mode the user has to add on all their topics. While the current state > > is easily explainable, the resulting state where the meaning of tombstone > > and null are overlapping and ambiguous and dependent on a compaction > > setting that could change out of band or not be in sync with your code in > > some environment seems worse to me then where we currently are. I think > the > > question is how would this combination be explained to users and does it > > make sense? > > > > -Jay > > > > > > > > On Fri, Dec 16, 2016 at 9:25 AM, Michael Pearce <michael.pea...@ig.com> > > wrote: > > > > > Hi Chaps, > > > > > > Can we either get one more +1 binding (we have 2 already) on the > > existing? > > > > > > Or have some response on the below possible alternative. We are keen to > > > get working on this, so we make next feature release. > > > > > > Cheers > > > Mike > > > > > > > > > On 13/12/2016, 16:32, "Michael Pearce" <michael.pea...@ig.com> wrote: > > > > > > Hi Ismael > > > > > > Did you see our email this morning, what's your thoughts on this > > > approach to instead we simply have a brand new policy? > > > > > > Cheers > > > Mike > > > > > > > > > Sent using OWA for iPhone > > > ________________________________________ > > > From: isma...@gmail.com <isma...@gmail.com> on behalf of Ismael > > Juma < > > > ism...@juma.me.uk> > > > Sent: Tuesday, December 13, 2016 11:30:05 AM > > > To: dev@kafka.apache.org > > > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Flag > > > > > > Yes, this is actually tricky to do in a way where we both have the > > > desired > > > semantics and maintain compatibility. When someone creates a > > > `ProducerRecord` with a `null` value today, the producer doesn't > know > > > if > > > it's meant to be a tombstone or not. For V3 messages, it's easy > when > > > the > > > constructor that takes a tombstone is used. However, if any other > > > constructor is used, it's not clear. A couple of options I can > think > > > of, > > > none of them particularly nice: > > > > > > 1. Have a third state where tombstone = unknown and the broker > would > > > set > > > the tombstone bit if the value was null and the topic was > compacted. > > > People > > > that wanted to pass a non-null value for the tombstone would have > to > > > use > > > the constructor that takes a tombstone. The drawbacks: third state > > for > > > tombstone in message format, message conversion at the broker for a > > > common > > > case. > > > > > > 2. Extend MetadataResponse to optionally include topic configs, > which > > > would > > > make it possible for the producer to be smarter about setting the > > > tombstone. It would only do it if a tombstone was not passed > > > explicitly, > > > the value was null and the topic was compacted. The main drawback > is > > > that > > > the producer would be getting a bit more data for each topic even > > > though it > > > probably won't use it most of the time. Extending MetadataResponse > to > > > return topic configs would be useful for other reasons as well, so > > that > > > part seems OK. > > > > > > In addition, for both proposals, we could consider adding warnings > to > > > the > > > documentation that the behaviour of the constructors that don't > take > > a > > > tombstone would change in the next major release so that tombstone > = > > > false. > > > Not sure if this would be worth it though. > > > > > > Ismael > > > > > > On Sun, Dec 11, 2016 at 11:15 PM, Ewen Cheslack-Postava < > > > e...@confluent.io> > > > wrote: > > > > > > > Michael, > > > > > > > > It kind of depends on how you want to interpret the tombstone > flag. > > > If it's > > > > purely a producer-facing Kafka-level thing that we treat as > > internal > > > to the > > > > broker and log cleaner once the record is sent, then your > approach > > > makes > > > > sense. You're just moving copying the null-indicates-delete > > behavior > > > of the > > > > old constructor into the tombstone flag. > > > > > > > > However, if you want this change to more generally decouple the > > idea > > > of > > > > deletion and null values, then you are sometimes converting what > > > might be a > > > > completely valid null value that doesn't indicate deletion into a > > > > tombstone. Downstream applications could potentially handle these > > > cases > > > > differently given the separation of deletion from value. > > > > > > > > I guess the question is if we want to try to support the latter > > even > > > for > > > > topics where we have older produce requests. An example where > this > > > could > > > > come up is in something like a CDC Connector. If we try to > support > > > the > > > > semantic difference, a connector might write changes to Kafka > using > > > the > > > > tombstone flag to indicate when a row was truly deleted (vs an > > > update that > > > > sets it to null but still present; this probably makes more sense > > > for CDC > > > > from document stores or extracting single columns). There are > > various > > > > reasons we might want to maintain the full log and not turn > > > compaction on > > > > (or just use a time-based retention policy), but downstream > > > applications > > > > might care to know the difference between a delete and a null > > value. > > > In > > > > fact both versions of the same log (compacted and time-retention) > > > could be > > > > useful and I don't think it'll be uncommon to maintain both or > use > > > KIP-71 > > > > to maintain a hybrid compacted/retention topic. > > > > > > > > -Ewen > > > > > > > > On Sun, Dec 11, 2016 at 1:18 PM, Michael Pearce < > > > michael.pea...@ig.com> > > > > wrote: > > > > > > > > > Hi Jay, > > > > > > > > > > Why wouldn't that work, the tombstone value is only looked at > by > > > the > > > > > broker, on a topic configured for compaction as such is benign > on > > > non > > > > > compacted topics. This is as much as sending a null value > > currently > > > > > > > > > > > > > > > Regards > > > > > Mike > > > > > > > > > > > > > > > > > > > > Sent using OWA for iPhone > > > > > ________________________________________ > > > > > From: Jay Kreps <j...@confluent.io> > > > > > Sent: Sunday, December 11, 2016 8:58:53 PM > > > > > To: dev@kafka.apache.org > > > > > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Flag > > > > > > > > > > Hey Michael, > > > > > > > > > > I'm not quite sure that works as that would translate ALL null > > > values to > > > > > tombstones, even for non-compacted topics that use null as an > > > acceptable > > > > > value sent by the producer and expected by the consumer. > > > > > > > > > > -Jay > > > > > > > > > > On Sun, Dec 11, 2016 at 3:26 AM, Michael Pearce < > > > michael.pea...@ig.com> > > > > > wrote: > > > > > > > > > > > Hi Ewen, > > > > > > > > > > > > I think the easiest way to show this is with code. > > > > > > > > > > > > As you can see we keep the existing behaviour for > code/binaries > > > calling > > > > > > the pre-existing constructors, whereby if the value is null > the > > > > tombstone > > > > > > is set to true. > > > > > > > > > > > > Regards > > > > > > Mike > > > > > > > > > > > > > > > > > > > > > > > > /** > > > > > > * Creates a record with a specified timestamp to be sent > > to > > > a > > > > > > specified topic and partition > > > > > > * > > > > > > * @param topic The topic the record will be appended to > > > > > > * @param partition The partition to which the record > > should > > > be > > > > sent > > > > > > * @param timestamp The timestamp of the record > > > > > > * @param tombstone if the record should be treated as a > > > tombstone > > > > if > > > > > > the topic is compacted > > > > > > * @param key The key that will be included in the record > > > > > > * @param value The record contents > > > > > > */ > > > > > > public ProducerRecord(String topic, Integer partition, > > > Boolean > > > > > > tombstone, Long timestamp, K key, V value) { > > > > > > if (topic == null) > > > > > > throw new IllegalArgumentException("Topic cannot > > be > > > > null."); > > > > > > if (timestamp != null && timestamp < 0) > > > > > > throw new IllegalArgumentException( > > > > > > String.format("Invalid timestamp: %d. > > > Timestamp > > > > > should > > > > > > always be non-negative or null.", timestamp)); > > > > > > if (partition != null && partition < 0) > > > > > > throw new IllegalArgumentException( > > > > > > String.format("Invalid partition: %d. > > > Partition > > > > > number > > > > > > should always be non-negative or null.", partition)); > > > > > > if (!tombstone && value == null){ > > > > > > throw new IllegalArgumentException( > > > > > > String.format("Tombstone must be true if > > null > > > > > value")); > > > > > > } > > > > > > this.topic = topic; > > > > > > this.partition = partition; > > > > > > this.tombstone = tombstone; > > > > > > this.key = key; > > > > > > this.value = value; > > > > > > this.timestamp = timestamp; > > > > > > } > > > > > > > > > > > > public ProducerRecord(String topic, Integer partition, > Long > > > > > timestamp, > > > > > > K key, V value) { > > > > > > this(topic, partition, value == null, timestamp, key, > > > value); > > > > > > } > > > > > > ________________________________________ > > > > > > From: Ewen Cheslack-Postava <e...@confluent.io> > > > > > > Sent: Sunday, December 11, 2016 5:45 AM > > > > > > To: dev@kafka.apache.org > > > > > > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Flag > > > > > > > > > > > > It seemed like this was addressed in the migration section, > > > wasn't it? > > > > > The > > > > > > V2 vs V3 requests and the fact that the broker will downgrade > > the > > > > message > > > > > > format (losing zero copy) if you issues a V2 request to a > > broker > > > using > > > > V3 > > > > > > format handles compatibility, does it not? The existing > > > consumers won't > > > > > see > > > > > > the extra metadata in the value, but they will get a null > > > instead and > > > > > treat > > > > > > it as a tombstone. Certainly there is a performance impact, > but > > > it > > > > seemed > > > > > > compatible. > > > > > > > > > > > > I'm worried about this though: > > > > > > > > > > > > > > > > > > - *NOTE *: With the new version of producer client using > > > > > ProduceRequest > > > > > > V3 (magic byte = 2), a non tombstone (tombstone bit not > set) > > > and > > > > null > > > > > > value > > > > > > should not be allowed as the older version of consumer > using > > > > > > FetchRequest > > > > > > V2 will think of this as a tombstone when its actually > not. > > > > > > > > > > > > > > > > > > Unless I'm misunderstanding, this ends up breaking binary > > > compatibility > > > > > for > > > > > > the Java API. It sounds like this suggests that passing a > null > > > value to > > > > > the > > > > > > existing ProducerRecord constructors would generate an > > exception > > > since > > > > > you > > > > > > didn't explicitly enable the tombstone (via whatever new > > > constructor is > > > > > > provided). But that means you can't swap in a newer client > jar > > > without > > > > > > recompiling and get the same behavior if your app deletes > keys > > > using > > > > the > > > > > > current approach because your app will start throwing > > > exceptions. Maybe > > > > > > this is a tradeoff we're ok with, but we've tried pretty hard > > to > > > avoid > > > > > > breaking compatibility like this so far -- it makes picking > up > > > bug > > > > fixes > > > > > in > > > > > > the clients harder for users of frameworks that have to pin > to > > > earlier > > > > > > default versions for compatibility. > > > > > > > > > > > > But then later the KIP says: > > > > > > > > > > > > > > > > > > - The old constructors for ProducerRecord without this > > > parameter > > > > will > > > > > be > > > > > > kept but updated so that their default behaviour if > setting > > > null > > > > value > > > > > > will > > > > > > be the tombstone will be set to true to keep existing > > > behaviour. > > > > > > > > > > > > > > > > > > So maybe I am misinterpreting something. > > > > > > > > > > > > And just a nit re: motivation section, item 6 would be > clearer > > > for a > > > > > union > > > > > > schema with null (or optional schemas in other formats), e.g. > > > [null, > > > > > > string], in which case losing the schema truly is losing > > > information > > > > > > (whereas null is already the only valid value for a pure null > > > schema). > > > > > > > > > > > > -Ewen > > > > > > > > > > > > > > > > > > On Sat, Dec 10, 2016 at 9:24 PM, Michael Pearce < > > > michael.pea...@ig.com > > > > > > > > > > > wrote: > > > > > > > > > > > > > Hi Jay, > > > > > > > > > > > > > > Good point this detail is missing in the KIP write up. Ive > > > added this > > > > > > now. > > > > > > > > > > > > > > Essentially simply just upgrading the clients we do not > > expect > > > any > > > > > client > > > > > > > app code change needed. > > > > > > > > > > > > > > Cheers > > > > > > > Mike > > > > > > > ________________________________________ > > > > > > > From: Jay Kreps <j...@confluent.io> > > > > > > > Sent: Saturday, December 10, 2016 10:51 PM > > > > > > > To: dev@kafka.apache.org > > > > > > > Subject: Re: [VOTE] KIP-87 - Add Compaction Tombstone Flag > > > > > > > > > > > > > > Michael, > > > > > > > > > > > > > > The compatibility section goes through the migration path, > > but > > > isn't > > > > > the > > > > > > > bigger compatibility issue with existing apps? There are > many > > > > (probably > > > > > > > thousands) of apps in production that use this feature and > > > send null > > > > to > > > > > > > mean delete. It seems like this would break compatibility > > with > > > them, > > > > > and > > > > > > > they would have to be rewritten to right? > > > > > > > > > > > > > > -Jay > > > > > > > > > > > > > > On Thu, Dec 8, 2016 at 12:12 AM, Michael Pearce < > > > > michael.pea...@ig.com > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > Hi Jun, > > > > > > > > > > > > > > > > 4) On v3 we honour the tombstone. As such we expect it to > > be > > > set > > > > > > > correctly > > > > > > > > as per the KIP. > > > > > > > > > > > > > > > > 4.1) why would we want to produce an error when its v3? > > This > > > is the > > > > > > exact > > > > > > > > purpose to support non-null tombstone's > > > > > > > > 4.2) again here im unclear on the question on the v3, > > produce > > > > request > > > > > > we > > > > > > > > expect the tombstone flag to be set correctly. > > > > > > > > > > > > > > > > 4.4) compaction only occurs on compacted topics, the bit > > > makes no > > > > > > > > difference and not looked at on un-compacted (time/size > > based > > > > > > eviction). > > > > > > > > > > > > > > > > > > > > > > > > On 06/12/2016, 20:08, "Jun Rao" <j...@confluent.io> > wrote: > > > > > > > > > > > > > > > > Hi, Michael, > > > > > > > > > > > > > > > > 4. Then, I think I misunderstood this point. Could > you > > > document > > > > > the > > > > > > > > following points in the wiki? > > > > > > > > 4.1 If producer V3 sets tombstone, but provides a > > > non-null > > > > value, > > > > > > > does > > > > > > > > the > > > > > > > > send() get an error or does the producer > automatically > > > set the > > > > > > value > > > > > > > to > > > > > > > > null? > > > > > > > > 4.2 If producer V3 doesn't set tombstone, but > provides > > a > > > null > > > > > > value, > > > > > > > > does > > > > > > > > the send() get an error or does the producer > > > automatically sets > > > > > the > > > > > > > > tombstone? > > > > > > > > 4.3 Does the broker only expect messages that (a) > have > > no > > > > > tombstone > > > > > > > and > > > > > > > > non-null value; (b) have tombstone and null value and > > > reject > > > > the > > > > > > > > messages > > > > > > > > with an error code otherwise? > > > > > > > > 4.4 Do 4.1, 4.2, 4.3 depend on whether the topic is > > > compacted > > > > on > > > > > > > not? > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > Jun > > > > > > > > > > > > > > > > On Tue, Dec 6, 2016 at 10:35 AM, Michael Pearce < > > > > > > > michael.pea...@ig.com > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > Not at all. This only acts on compacted topics > just > > > as what > > > > > > occurs > > > > > > > > today > > > > > > > > > > > > > > > > > > Sent using OWA for iPhone > > > > > > > > > ________________________________________ > > > > > > > > > From: Jun Rao <j...@confluent.io> > > > > > > > > > Sent: Tuesday, December 6, 2016 6:25:28 PM > > > > > > > > > To: dev@kafka.apache.org > > > > > > > > > Subject: Re: [VOTE] KIP-87 - Add Compaction > Tombstone > > > Flag > > > > > > > > > > > > > > > > > > Hi, Michael, > > > > > > > > > > > > > > > > > > 4. Hmm, does that mean the new client library can > > > never send > > > > a > > > > > > null > > > > > > > > message > > > > > > > > > even to a regular topic? This seems like a change > of > > > the > > > > > existing > > > > > > > > behavior. > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > Jun > > > > > > > > > > > > > > > > > > On Tue, Dec 6, 2016 at 9:51 AM, Michael Pearce < > > > > > > > > michael.pea...@ig.com> > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > Hi Jun, > > > > > > > > > > > > > > > > > > > > Re 4) That's because we expect the tombstone > value > > > to be > > > > set > > > > > > > > correctly if > > > > > > > > > > message bit is 2, as such if an older client > sends > > > in on > > > > old > > > > > > > > message the > > > > > > > > > > message is upcast and the bit is set correctly. > And > > > such no > > > > > > > longer > > > > > > > > need > > > > > > > > > to > > > > > > > > > > check the value. Mayuresh can you confirm my > > > thinking and > > > > > > > > understanding > > > > > > > > > of > > > > > > > > > > what we've discussed? > > > > > > > > > > > > > > > > > > > > The second point I understand what you're getting > > at > > > now my > > > > > > > > apologies. > > > > > > > > > Yes > > > > > > > > > > this makes sense to save on touching the message, > > if > > > we're > > > > > the > > > > > > > > only kip > > > > > > > > > > going in, in this release. > > > > > > > > > > > > > > > > > > > > Cheers > > > > > > > > > > Mike > > > > > > > > > > > > > > > > > > > > Sent using OWA for iPhone > > > > > > > > > > ________________________________________ > > > > > > > > > > From: Jun Rao <j...@confluent.io> > > > > > > > > > > Sent: Tuesday, December 6, 2016 5:22:13 PM > > > > > > > > > > To: dev@kafka.apache.org > > > > > > > > > > Subject: Re: [VOTE] KIP-87 - Add Compaction > > > Tombstone Flag > > > > > > > > > > > > > > > > > > > > Hi, Michael, > > > > > > > > > > > > > > > > > > > > 4. Is this updated in the wiki? The text "If the > > > magic byte > > > > > on > > > > > > > > message is > > > > > > > > > > 2, the broker should use the tombstone bit for > log > > > > > compaction." > > > > > > > > doesn't > > > > > > > > > > seem to have changed. > > > > > > > > > > > > > > > > > > > > 2. My point is that if we change the message > format > > > just > > > > for > > > > > > this > > > > > > > > KIP, we > > > > > > > > > > should consider whether it's worth optimizing the > > > down > > > > > > conversion > > > > > > > > path > > > > > > > > > > (i.e., decide whether a conversion is needed by > > just > > > > looking > > > > > at > > > > > > > the > > > > > > > > > > tombstone bit in the wrapper message) since > > > tombstone will > > > > be > > > > > > > used > > > > > > > > > rarely. > > > > > > > > > > However, if the message format change here is > > > combined with > > > > > > other > > > > > > > > KIPs, > > > > > > > > > > then this optimization likely won't be needed. > The > > > latter > > > > > > > probably > > > > > > > > makes > > > > > > > > > > the code simpler. Jiangjie, Mayuresh, what do you > > > think? > > > > > > > > > > > > > > > > > > > > Other than those, +1 from me, > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > > > Jun > > > > > > > > > > > > > > > > > > > > On Tue, Dec 6, 2016 at 8:54 AM, Michael Pearce < > > > > > > > > michael.pea...@ig.com> > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > Hi Jun > > > > > > > > > > > > > > > > > > > > > > do we have your vote on this now? > > > > > > > > > > > > > > > > > > > > > > Any other concerns? > > > > > > > > > > > > > > > > > > > > > > Cheers > > > > > > > > > > > Mike > > > > > > > > > > > > > > > > > > > > > > Sent using OWA for iPhone > > > > > > > > > > > ________________________________________ > > > > > > > > > > > From: Michael Pearce <michael.pea...@ig.com> > > > > > > > > > > > Sent: Saturday, December 3, 2016 1:37:45 AM > > > > > > > > > > > To: dev@kafka.apache.org > > > > > > > > > > > Subject: Re: [VOTE] KIP-87 - Add Compaction > > > Tombstone > > > > Flag > > > > > > > > > > > > > > > > > > > > > > Hi Jun, > > > > > > > > > > > > > > > > > > > > > > Have updated. Thanks again for the feedback. > > > > > > > > > > > > > > > > > > > > > > Agree yes we should align up when it gets to > > that, > > > I > > > > assume > > > > > > > > you've > > > > > > > > > > flagged > > > > > > > > > > > the same in the other KIP? > > > > > > > > > > > > > > > > > > > > > > I think for now let's get this KIP approved, > then > > > we can > > > > > > start > > > > > > > > the work > > > > > > > > > > to > > > > > > > > > > > get an initial PR, then we can discuss how to > > > align the > > > > two > > > > > > if > > > > > > > > needed. > > > > > > > > > > > > > > > > > > > > > > Cheers, > > > > > > > > > > > Mike > > > > > > > > > > > > > > > > > > > > > > On 02/12/2016, 18:26, "Jun Rao" < > > j...@confluent.io> > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > Hi, Michael, > > > > > > > > > > > > > > > > > > > > > > For 2), this is fine. Could you update the > > KIP > > > wiki > > > > to > > > > > > make > > > > > > > > this > > > > > > > > > and > > > > > > > > > > > other > > > > > > > > > > > points clearer? Other than that, the KIP > > looks > > > good > > > > to > > > > > > me. > > > > > > > > > > > > > > > > > > > > > > An orthogonal thing is that there are other > > > KIPs such > > > > > as > > > > > > > > KIP-98 > > > > > > > > > that > > > > > > > > > > > also > > > > > > > > > > > intend to change the message format. If > they > > > all get > > > > > > > > approved, we > > > > > > > > > > > should > > > > > > > > > > > think about whether it's better to just > bump > > > up the > > > > > magic > > > > > > > > byte once > > > > > > > > > > to > > > > > > > > > > > incorporate multiple format changes like we > > > did in > > > > > > > > KIP-31/KIP-32. > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > > > > > Jun > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Fri, Dec 2, 2016 at 3:19 AM, Michael > > Pearce > > > < > > > > > > > > > > michael.pea...@ig.com> > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > Hi Jao > > > > > > > > > > > > > > > > > > > > > > > > Thanks for the response. Sorry for slow > > > reply, both > > > > > > with > > > > > > > > personal > > > > > > > > > > > sickness > > > > > > > > > > > > and also battling some critical issues > > > encountered > > > > > > since > > > > > > > > > upgrading > > > > > > > > > > to > > > > > > > > > > > > 0.10.1.0 > > > > > > > > > > > > > > > > > > > > > > > > 1) Thans for spotting, Document error > where > > > we > > > > > branched > > > > > > > > this KIP > > > > > > > > > > from > > > > > > > > > > > > KIP-82, will get that removed. > > > > > > > > > > > > 2) Intent is to do this just at the > record > > > message > > > > > > level. > > > > > > > > > > > > 3) Thanks for spotting, Will ensure this > is > > > > > corrected. > > > > > > > > > > > > 4) As per discussion thread we will > support > > > > > tombstone + > > > > > > > > null > > > > > > > > > value, > > > > > > > > > > > > tombstone + non null value, no tombstone > + > > > null > > > > > value. > > > > > > > > > > > > 5) I believe this was in the discussion > > > thread, > > > > > > @Mayuresh > > > > > > > > is this > > > > > > > > > > > > something we've overlooked? I thought we > > > would down > > > > > > > > convert and > > > > > > > > > > > remove the > > > > > > > > > > > > value so the old consumer had existing > > > behavior, or > > > > > is > > > > > > > > there > > > > > > > > > > > something we > > > > > > > > > > > > haven't thought about? > > > > > > > > > > > > > > > > > > > > > > > > Cheers > > > > > > > > > > > > Mike > > > > > > > > > > > > > > > > > > > > > > > > On 30/11/2016, 18:12, "Jun Rao" < > > > j...@confluent.io> > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > Hi, Michael, > > > > > > > > > > > > > > > > > > > > > > > > Thanks for the KIP. A few comments > > below. > > > > > > > > > > > > > > > > > > > > > > > > 1. The message format change contains > > > > > > "HeadersLength > > > > > > > > > Headers". > > > > > > > > > > > Is that > > > > > > > > > > > > intended? > > > > > > > > > > > > > > > > > > > > > > > > 2. For compressed messageset, is the > > > tombstone > > > > > bit > > > > > > > > only set > > > > > > > > > at > > > > > > > > > > > the > > > > > > > > > > > > shallow > > > > > > > > > > > > level? Do we always leave that bit in > > the > > > > wrapper > > > > > > > > message > > > > > > > > > > unset? > > > > > > > > > > > An > > > > > > > > > > > > alternative is to set the tombstone > bit > > > in the > > > > > > > wrapper > > > > > > > > if at > > > > > > > > > > > least one > > > > > > > > > > > > inner message has the tombstone bit > > set. > > > This > > > > > makes > > > > > > > > things a > > > > > > > > > > bit > > > > > > > > > > > more > > > > > > > > > > > > complicated, but we could potentially > > > exploit > > > > > that > > > > > > > for > > > > > > > > > > > optimizing down > > > > > > > > > > > > conversion. For example, we only need > > to > > > > convert > > > > > > > > messages > > > > > > > > > with > > > > > > > > > > > magic 2 > > > > > > > > > > > > to > > > > > > > > > > > > magic 1 if the wrapper's tombstone > bit > > > is set > > > > > > > > (conversion is > > > > > > > > > > > always > > > > > > > > > > > > needed > > > > > > > > > > > > from magic 2 to magic 0). Not sure if > > the > > > > > > > optimization > > > > > > > > is > > > > > > > > > worth > > > > > > > > > > > the > > > > > > > > > > > > complexity though. > > > > > > > > > > > > > > > > > > > > > > > > 3. The referencing of the new version > > of > > > > > > > > > > > ProducerRequest/FetchRequest > > > > > > > > > > > > is > > > > > > > > > > > > inconsistent (v4 vs v3). Since our > > > convention > > > > > > starts > > > > > > > at > > > > > > > > > version > > > > > > > > > > > at 0, I > > > > > > > > > > > > think the new version would be 3. > > > > > > > > > > > > > > > > > > > > > > > > 4. "If the magic byte on message is > 2, > > > the > > > > broker > > > > > > > > should use > > > > > > > > > > the > > > > > > > > > > > > tombstone > > > > > > > > > > > > bit for log compaction." What about > > null > > > value? > > > > > My > > > > > > > > > > understanding > > > > > > > > > > > is > > > > > > > > > > > > that > > > > > > > > > > > > null value will be treated the same > as > > > setting > > > > > the > > > > > > > > tombstone > > > > > > > > > > bit. > > > > > > > > > > > > > > > > > > > > > > > > 5. For the migration path, it would > be > > > useful > > > > to > > > > > > > > describe the > > > > > > > > > > > down > > > > > > > > > > > > conversion path to consumers (i.e., > > > brokers on > > > > > > > message > > > > > > > > format > > > > > > > > > > > 0.10.2 > > > > > > > > > > > > and > > > > > > > > > > > > consumers on older version). > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > > > > > > > Jun > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Tue, Nov 29, 2016 at 3:18 AM, > > Michael > > > > Pearce < > > > > > > > > > > > michael.pea...@ig.com > > > > > > > > > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > Hi All, > > > > > > > > > > > > > > > > > > > > > > > > > > We have been discussing in the > below > > > thread > > > > and > > > > > > > final > > > > > > > > > changes > > > > > > > > > > > have > > > > > > > > > > > > been > > > > > > > > > > > > > made to the KIP wiki based on these > > > > > discussions. > > > > > > > > > > > > > > > > > > > > > > > > > > We would now like to put to the > vote > > > the > > > > > > following > > > > > > > > KIP: > > > > > > > > > > > > > https://cwiki.apache.org/ > > > > > > > > confluence/display/KAFKA/KIP- > > > > > > > > > 87+-+ > > > > > > > > > > > > > Add+Compaction+Tombstone+Flag > > > > > > > > > > > > > > > > > > > > > > > > > > This kip is for having a distinct > > > compaction > > > > > > > > attribute > > > > > > > > > > > "tombstone" > > > > > > > > > > > > flag > > > > > > > > > > > > > instead of relying on null value, > > > allowing > > > > > > non-null > > > > > > > > value > > > > > > > > > > > delete > > > > > > > > > > > > messages. > > > > > > > > > > > > > > > > > > > > > > > > > > Many thanks, > > > > > > > > > > > > > Michael > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On 22/11/2016, 15:52, "Michael > > Pearce" > > > < > > > > > > > > > > michael.pea...@ig.com> > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > Hi Mayuresh, > > > > > > > > > > > > > > > > > > > > > > > > > > LGTM. Ive just made one small > > > adjustment > > > > > > > > updating the > > > > > > > > > > wire > > > > > > > > > > > > protocol to > > > > > > > > > > > > > show the magic byte bump. > > > > > > > > > > > > > > > > > > > > > > > > > > Do we think we're good to put > to > > a > > > vote? > > > > Is > > > > > > > > there any > > > > > > > > > > > other bits > > > > > > > > > > > > > needing discussion? > > > > > > > > > > > > > > > > > > > > > > > > > > Cheers > > > > > > > > > > > > > Mike > > > > > > > > > > > > > > > > > > > > > > > > > > On 21/11/2016, 18:26, "Mayuresh > > > Gharat" < > > > > > > > > > > > > gharatmayures...@gmail.com> > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > Hi Michael, > > > > > > > > > > > > > > > > > > > > > > > > > > I have updated the > migration > > > section > > > > of > > > > > > the > > > > > > > > KIP. > > > > > > > > > Can > > > > > > > > > > > you > > > > > > > > > > > > please > > > > > > > > > > > > > take a look? > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > > > > > > > > > Mayuresh > > > > > > > > > > > > > > > > > > > > > > > > > > On Fri, Nov 18, 2016 at > 9:07 > > > AM, > > > > > Mayuresh > > > > > > > > Gharat < > > > > > > > > > > > > > gharatmayures...@gmail.com > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi Michael, > > > > > > > > > > > > > > > > > > > > > > > > > > > > That whilst sending > > > tombstone and > > > > non > > > > > > > null > > > > > > > > value, > > > > > > > > > > the > > > > > > > > > > > > consumer > > > > > > > > > > > > > can expect > > > > > > > > > > > > > > only to receive the > > non-null > > > > message > > > > > > only > > > > > > > > in step > > > > > > > > > > > (3) is > > > > > > > > > > > > this > > > > > > > > > > > > > correct? > > > > > > > > > > > > > > ---> I do agree with you > > > here. > > > > > > > > > > > > > > > > > > > > > > > > > > > > Becket, Ismael : can you > > guys > > > > review > > > > > > the > > > > > > > > > migration > > > > > > > > > > > plan > > > > > > > > > > > > listed > > > > > > > > > > > > > above using > > > > > > > > > > > > > > magic byte? > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > > > > > > > > > > > Mayuresh > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Fri, Nov 18, 2016 at > > 8:58 > > > AM, > > > > > > Michael > > > > > > > > Pearce < > > > > > > > > > > > > > michael.pea...@ig.com> > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > >> Many thanks for this > > > Mayuresh. I > > > > > don't > > > > > > > > have any > > > > > > > > > > > > objections. > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> I assume we should > state: > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> That whilst sending > > > tombstone and > > > > > non > > > > > > > null > > > > > > > > > value, > > > > > > > > > > > the > > > > > > > > > > > > consumer > > > > > > > > > > > > > can expect > > > > > > > > > > > > > >> only to receive the > > non-null > > > > message > > > > > > > only > > > > > > > > in > > > > > > > > > step > > > > > > > > > > > (3) is > > > > > > > > > > > > this > > > > > > > > > > > > > correct? > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Cheers > > > > > > > > > > > > > >> Mike > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Sent using OWA for > iPhone > > > > > > > > > > > > > >> > > > ______________________________ > > > > > > > __________ > > > > > > > > > > > > > >> From: Mayuresh Gharat < > > > > > > > > > gharatmayures...@gmail.com > > > > > > > > > > > > > > > > > > > > > > > > >> Sent: Thursday, November > > > 17, 2016 > > > > > > > 5:18:41 > > > > > > > > PM > > > > > > > > > > > > > >> To: > dev@kafka.apache.org > > > > > > > > > > > > > >> Subject: Re: [DISCUSS] > > > KIP-87 - > > > > Add > > > > > > > > Compaction > > > > > > > > > > > Tombstone > > > > > > > > > > > > Flag > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Hi Ismael, > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Thanks for the > > explanation. > > > > > > > > > > > > > >> Specially I like this > part > > > where > > > > in > > > > > > you > > > > > > > > > mentioned > > > > > > > > > > > we can > > > > > > > > > > > > get > > > > > > > > > > > > > rid of the > > > > > > > > > > > > > >> older null value support > > > for log > > > > > > > > compaction > > > > > > > > > later > > > > > > > > > > > on, > > > > > > > > > > > > here : > > > > > > > > > > > > > >> We can't change > semantics > > > of the > > > > > > message > > > > > > > > format > > > > > > > > > > > without > > > > > > > > > > > > having > > > > > > > > > > > > > a long > > > > > > > > > > > > > >> transition period. And > we > > > can't > > > > rely > > > > > > > > > > > > > >> on people reading > > > documentation or > > > > > > > acting > > > > > > > > on a > > > > > > > > > > > warning for > > > > > > > > > > > > > something so > > > > > > > > > > > > > >> fundamental. As such, my > > > take is > > > > > that > > > > > > we > > > > > > > > need to > > > > > > > > > > > bump the > > > > > > > > > > > > magic > > > > > > > > > > > > > byte. The > > > > > > > > > > > > > >> good news is > > > > > > > > > > > > > >> that we don't have to > > > support all > > > > > > > versions > > > > > > > > > > forever. > > > > > > > > > > > We > > > > > > > > > > > > have > > > > > > > > > > > > > said that we > > > > > > > > > > > > > >> will support direct > > > upgrades for 2 > > > > > > > years. > > > > > > > > That > > > > > > > > > > > means that > > > > > > > > > > > > > message format > > > > > > > > > > > > > >> version n could, in > > theory, > > > be > > > > > > removed 2 > > > > > > > > years > > > > > > > > > > > after the > > > > > > > > > > > > it's > > > > > > > > > > > > > introduced. > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Just a heads up, I would > > > like to > > > > > > mention > > > > > > > > that > > > > > > > > > even > > > > > > > > > > > without > > > > > > > > > > > > > bumping magic > > > > > > > > > > > > > >> byte, we will *NOT* > loose > > > zero > > > > copy > > > > > as > > > > > > > in > > > > > > > > the > > > > > > > > > > > client(x+1) > > > > > > > > > > > > in my > > > > > > > > > > > > > >> explanation > > > > > > > > > > > > > >> above will convert > > > internally a > > > > null > > > > > > > > value to > > > > > > > > > > have a > > > > > > > > > > > > tombstone > > > > > > > > > > > > > bit set and > > > > > > > > > > > > > >> a tombstone bit set to > > have > > > a null > > > > > > value > > > > > > > > > > > automatically > > > > > > > > > > > > > internally and by > > > > > > > > > > > > > >> the time we move to > > version > > > (x+2), > > > > > the > > > > > > > > clients > > > > > > > > > > > would have > > > > > > > > > > > > > upgraded. > > > > > > > > > > > > > >> Obviously if we support > a > > > request > > > > > from > > > > > > > > > > consumer(x), > > > > > > > > > > > we > > > > > > > > > > > > will > > > > > > > > > > > > > loose zero > > > > > > > > > > > > > >> copy > > > > > > > > > > > > > >> but that is the same > case > > > with > > > > magic > > > > > > > byte. > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> But if magic byte bump > > > makes life > > > > > > easier > > > > > > > > for > > > > > > > > > > > transition > > > > > > > > > > > > for the > > > > > > > > > > > > > above > > > > > > > > > > > > > >> reasons that you > > explained, > > > I am > > > > OK > > > > > > with > > > > > > > > it > > > > > > > > > since > > > > > > > > > > > we are > > > > > > > > > > > > going > > > > > > > > > > > > > to meet the > > > > > > > > > > > > > >> end goal down the road > :) > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> On a side note can we > > > update the > > > > doc > > > > > > > here > > > > > > > > on > > > > > > > > > magic > > > > > > > > > > > byte > > > > > > > > > > > > to say > > > > > > > > > > > > > that "*it > > > > > > > > > > > > > >> should be bumped > whenever > > > the > > > > > message > > > > > > > > format is > > > > > > > > > > > changed > > > > > > > > > > > > or the > > > > > > > > > > > > > >> interpretation of > message > > > format > > > > > > (usage > > > > > > > > of the > > > > > > > > > > > reserved > > > > > > > > > > > > bits as > > > > > > > > > > > > > well) is > > > > > > > > > > > > > >> changed*". > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Hi Michael, > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Here is the update plan > > > that we > > > > > > > discussed > > > > > > > > > offline > > > > > > > > > > > > yesterday : > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Currently the magic-byte > > > which > > > > > > > > corresponds to > > > > > > > > > the > > > > > > > > > > > > > "message.format.version" > > > > > > > > > > > > > >> is set to 1. > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> 1) On broker it will be > > set > > > to 1 > > > > > > > > initially. > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> 2) When a producer > client > > > sends a > > > > > > > message > > > > > > > > with > > > > > > > > > > > magic-byte > > > > > > > > > > > > = 2, > > > > > > > > > > > > > since the > > > > > > > > > > > > > >> broker is on magic-byte > = > > > 1, we > > > > will > > > > > > > down > > > > > > > > > convert > > > > > > > > > > > it, > > > > > > > > > > > > which > > > > > > > > > > > > > means if the > > > > > > > > > > > > > >> tombstone bit is set, > the > > > value > > > > will > > > > > > be > > > > > > > > set to > > > > > > > > > > > null. A > > > > > > > > > > > > consumer > > > > > > > > > > > > > >> understanding > magic-byte = > > > 1, will > > > > > > still > > > > > > > > work > > > > > > > > > with > > > > > > > > > > > this. A > > > > > > > > > > > > > consumer > > > > > > > > > > > > > >> working > > > > > > > > > > > > > >> with magic-byte =2 will > > > also be > > > > able > > > > > > to > > > > > > > > > understand > > > > > > > > > > > this, > > > > > > > > > > > > since > > > > > > > > > > > > > it > > > > > > > > > > > > > >> understands the > tombstone. > > > > > > > > > > > > > >> Now there is still the > > > question of > > > > > > > > supporting a > > > > > > > > > > > > non-tombstone > > > > > > > > > > > > > and null > > > > > > > > > > > > > >> value from producer > client > > > with > > > > > > > > magic-byte = 2.* > > > > > > > > > > (I > > > > > > > > > > > am > > > > > > > > > > > > not sure > > > > > > > > > > > > > if we > > > > > > > > > > > > > >> should support this. > > > Ismael/Becket > > > > > can > > > > > > > > comment > > > > > > > > > > > here)* > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> 3) When almost all the > > > clients > > > > have > > > > > > > > upgraded, > > > > > > > > > the > > > > > > > > > > > > > message.format.version > > > > > > > > > > > > > >> on > > > > > > > > > > > > > >> the broker can be > changed > > > to 2, > > > > > where > > > > > > in > > > > > > > > the > > > > > > > > > down > > > > > > > > > > > > conversion in > > > > > > > > > > > > > the above > > > > > > > > > > > > > >> step will not happen. If > > at > > > this > > > > > point > > > > > > > we > > > > > > > > get a > > > > > > > > > > > consumer > > > > > > > > > > > > > request from a > > > > > > > > > > > > > >> older consumer, we might > > > have to > > > > > down > > > > > > > > convert > > > > > > > > > > where > > > > > > > > > > > in we > > > > > > > > > > > > loose > > > > > > > > > > > > > zero copy, > > > > > > > > > > > > > >> but these cases should > be > > > rare. > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Becket can you review > this > > > plan > > > > and > > > > > > add > > > > > > > > more > > > > > > > > > > > details if I > > > > > > > > > > > > have > > > > > > > > > > > > > >> missed/wronged > something, > > > before > > > > we > > > > > > put > > > > > > > > it on > > > > > > > > > KIP. > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Thanks, > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> Mayuresh > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> On Wed, Nov 16, 2016 at > > > 11:07 PM, > > > > > > > Michael > > > > > > > > > Pearce < > > > > > > > > > > > > > michael.pea...@ig.com> > > > > > > > > > > > > > >> wrote: > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > Thanks guys, for > > > discussing this > > > > > > > > offline and > > > > > > > > > > > getting > > > > > > > > > > > > some > > > > > > > > > > > > > consensus. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > So its clear for > myself > > > and > > > > others > > > > > > > what > > > > > > > > is > > > > > > > > > > > proposed now > > > > > > > > > > > > (i > > > > > > > > > > > > > think i > > > > > > > > > > > > > >> > understand, but want > to > > > make > > > > sure) > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > Could i ask either > > > directly > > > > update > > > > > > the > > > > > > > > kip to > > > > > > > > > > > detail the > > > > > > > > > > > > > migration > > > > > > > > > > > > > >> > strategy, or > (re-)state > > > your > > > > > offline > > > > > > > > discussed > > > > > > > > > > and > > > > > > > > > > > > agreed > > > > > > > > > > > > > migration > > > > > > > > > > > > > >> > strategy based on a > > magic > > > byte > > > > is > > > > > in > > > > > > > > this > > > > > > > > > > thread. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > The main original > driver > > > for the > > > > > KIP > > > > > > > > was to > > > > > > > > > > > support > > > > > > > > > > > > > compaction where > > > > > > > > > > > > > >> value > > > > > > > > > > > > > >> > isn't null, based off > > the > > > > > > discussions > > > > > > > on > > > > > > > > > KIP-82 > > > > > > > > > > > thread. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > We should be able to > > > support > > > > > > > > non-tombstone + > > > > > > > > > > null > > > > > > > > > > > value > > > > > > > > > > > > by the > > > > > > > > > > > > > >> completion > > > > > > > > > > > > > >> > of the KIP, as we > noted > > > when > > > > > > > discussing > > > > > > > > this > > > > > > > > > > kip, > > > > > > > > > > > having > > > > > > > > > > > > > logic based on > > > > > > > > > > > > > >> a > > > > > > > > > > > > > >> > null value isn't very > > > clean and > > > > > also > > > > > > > > separates > > > > > > > > > > the > > > > > > > > > > > > concerns. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > As discussed already > > > though we > > > > can > > > > > > > > split this > > > > > > > > > > into > > > > > > > > > > > > KIP-87a > > > > > > > > > > > > > and KIP-87b > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > Where we look to > deliver > > > KIP-87a > > > > > on > > > > > > a > > > > > > > > > compacted > > > > > > > > > > > topic > > > > > > > > > > > > (to > > > > > > > > > > > > > address the > > > > > > > > > > > > > >> > immediate issues) > > > > > > > > > > > > > >> > * tombstone + null > value > > > > > > > > > > > > > >> > * tombstone + non-null > > > value > > > > > > > > > > > > > >> > * non-tombstone + > > > non-null value > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > Then we can discuss > once > > > KIP-87a > > > > > is > > > > > > > > completed > > > > > > > > > > > options > > > > > > > > > > > > later > > > > > > > > > > > > > and how we > > > > > > > > > > > > > >> > support the second > part > > > KIP-87b > > > > to > > > > > > > > deliver: > > > > > > > > > > > > > >> > * non-tombstone + null > > > value > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > Cheers > > > > > > > > > > > > > >> > Mike > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > ______________________________ > > > > > > > > __________ > > > > > > > > > > > > > >> > From: Becket Qin < > > > > > > > becket....@gmail.com> > > > > > > > > > > > > > >> > Sent: Thursday, > November > > > 17, > > > > 2016 > > > > > > 1:43 > > > > > > > > AM > > > > > > > > > > > > > >> > To: > > dev@kafka.apache.org > > > > > > > > > > > > > >> > Subject: Re: [DISCUSS] > > > KIP-87 - > > > > > Add > > > > > > > > Compaction > > > > > > > > > > > > Tombstone Flag > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > Renu, Mayuresh and I > had > > > an > > > > > offline > > > > > > > > > discussion, > > > > > > > > > > > and > > > > > > > > > > > > following > > > > > > > > > > > > > is a brief > > > > > > > > > > > > > >> > summary. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > 1. We agreed that not > > > bumping up > > > > > > magic > > > > > > > > value > > > > > > > > > may > > > > > > > > > > > result > > > > > > > > > > > > in > > > > > > > > > > > > > losing zero > > > > > > > > > > > > > >> copy > > > > > > > > > > > > > >> > during migration. > > > > > > > > > > > > > >> > 2. Given that bumping > up > > > magic > > > > > value > > > > > > > is > > > > > > > > almost > > > > > > > > > > > free and > > > > > > > > > > > > has > > > > > > > > > > > > > benefit of > > > > > > > > > > > > > >> > avoiding potential > > > performance > > > > > > issue. > > > > > > > > It is > > > > > > > > > > > probably > > > > > > > > > > > > worth > > > > > > > > > > > > > doing. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > One issue we still > need > > > to think > > > > > > about > > > > > > > > is > > > > > > > > > > whether > > > > > > > > > > > we > > > > > > > > > > > > want to > > > > > > > > > > > > > support a > > > > > > > > > > > > > >> > non-tombstone message > > > with null > > > > > > value. > > > > > > > > > > > > > >> > Currently it is not > > > supported by > > > > > > > Kafka. > > > > > > > > If we > > > > > > > > > > > allow a > > > > > > > > > > > > > non-tombstone null > > > > > > > > > > > > > >> > value message to exist > > > after > > > > > KIP-87. > > > > > > > The > > > > > > > > > problem > > > > > > > > > > > is > > > > > > > > > > > > that such > > > > > > > > > > > > > message > > > > > > > > > > > > > >> will > > > > > > > > > > > > > >> > not be supported by > the > > > > consumers > > > > > > > prior > > > > > > > > to > > > > > > > > > > KIP-87. > > > > > > > > > > > > Because a > > > > > > > > > > > > > null value > > > > > > > > > > > > > >> > will always be > > > interpreted to a > > > > > > > > tombstone. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > One option is that we > > > keep the > > > > > > current > > > > > > > > way, > > > > > > > > > i.e. > > > > > > > > > > > do not > > > > > > > > > > > > > support such > > > > > > > > > > > > > >> > message. It would be > > good > > > to > > > > know > > > > > if > > > > > > > > there is > > > > > > > > > a > > > > > > > > > > > > concrete use > > > > > > > > > > > > > case for > > > > > > > > > > > > > >> such > > > > > > > > > > > > > >> > message. If there is > > not, > > > we can > > > > > > > > probably just > > > > > > > > > > not > > > > > > > > > > > > support it. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > Thanks, > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > JIangjie (Becket) Qin > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > On Wed, Nov 16, 2016 > at > > > 1:28 PM, > > > > > > > > Mayuresh > > > > > > > > > > Gharat < > > > > > > > > > > > > > >> > > > > gharatmayures...@gmail.com > > > > > > > > > > > > > >> > > wrote: > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > Hi Ismael, > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > This is something I > > can > > > think > > > > of > > > > > > for > > > > > > > > > migration > > > > > > > > > > > plan: > > > > > > > > > > > > > >> > > So the migration > plan > > > can look > > > > > > > > something > > > > > > > > > like > > > > > > > > > > > this, > > > > > > > > > > > > with up > > > > > > > > > > > > > >> conversion : > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > 1) Currently lets > say > > > we have > > > > > > Broker > > > > > > > > at > > > > > > > > > > version > > > > > > > > > > > x. > > > > > > > > > > > > > >> > > 2) Currently we have > > > clients > > > > at > > > > > > > > version x. > > > > > > > > > > > > > >> > > 3) a) We move the > > > version to > > > > > > > > Broker(x+1) : > > > > > > > > > > > supports > > > > > > > > > > > > both > > > > > > > > > > > > > tombstone and > > > > > > > > > > > > > >> > null > > > > > > > > > > > > > >> > > for log compaction. > > > > > > > > > > > > > >> > > b) We upgrade > the > > > client > > > > to > > > > > > > > version > > > > > > > > > > > client(x+1) : > > > > > > > > > > > > if in > > > > > > > > > > > > > the > > > > > > > > > > > > > >> producer > > > > > > > > > > > > > >> > > client(x+1) the > value > > > is set > > > > to > > > > > > > null, > > > > > > > > we > > > > > > > > > will > > > > > > > > > > > > automatically > > > > > > > > > > > > > set the > > > > > > > > > > > > > >> > > Tombstone bit > > > internally. If > > > > the > > > > > > > > producer > > > > > > > > > > > client(x+1) > > > > > > > > > > > > sets > > > > > > > > > > > > > the > > > > > > > > > > > > > >> tombstone > > > > > > > > > > > > > >> > > itself, well and > good. > > > For > > > > > > producer > > > > > > > > > client(x), > > > > > > > > > > > the > > > > > > > > > > > > broker > > > > > > > > > > > > > will up > > > > > > > > > > > > > >> convert > > > > > > > > > > > > > >> > > to have the > tombstone > > > bit. > > > > > > > > Broker(x+1) is > > > > > > > > > > > supporting > > > > > > > > > > > > both. > > > > > > > > > > > > > Consumer > > > > > > > > > > > > > >> > > client(x+1) will be > > > aware of > > > > > this > > > > > > > and > > > > > > > > should > > > > > > > > > > be > > > > > > > > > > > able > > > > > > > > > > > > to > > > > > > > > > > > > > handle this. > > > > > > > > > > > > > >> For > > > > > > > > > > > > > >> > > consumer client(x) > we > > > will > > > > down > > > > > > > > convert the > > > > > > > > > > > message > > > > > > > > > > > > on the > > > > > > > > > > > > > broker > > > > > > > > > > > > > >> side. > > > > > > > > > > > > > >> > > c) At this point > > we > > > will > > > > > have > > > > > > to > > > > > > > > > specify a > > > > > > > > > > > > warning or > > > > > > > > > > > > > clearly > > > > > > > > > > > > > >> specify > > > > > > > > > > > > > >> > > in docs that this > > > behavior is > > > > > > about > > > > > > > > to be > > > > > > > > > > > changed for > > > > > > > > > > > > log > > > > > > > > > > > > > compaction. > > > > > > > > > > > > > >> > > 4) a) In next > release > > > of the > > > > > > > > Broker(x+2), we > > > > > > > > > > > say that > > > > > > > > > > > > only > > > > > > > > > > > > > Tombstone > > > > > > > > > > > > > >> is > > > > > > > > > > > > > >> > > used for log > > compaction > > > on the > > > > > > > Broker > > > > > > > > side. > > > > > > > > > > > > Clients(x+1) > > > > > > > > > > > > > still is > > > > > > > > > > > > > >> > > supported. > > > > > > > > > > > > > >> > > b) We upgrade > the > > > client > > > > to > > > > > > > > version > > > > > > > > > > > client(x+2) : > > > > > > > > > > > > if > > > > > > > > > > > > > value is set > > > > > > > > > > > > > >> to > > > > > > > > > > > > > >> > > null, tombstone will > > > not be > > > > set > > > > > > > > > automatically. > > > > > > > > > > > The > > > > > > > > > > > > client > > > > > > > > > > > > > will have to > > > > > > > > > > > > > >> > call > > > > > > > > > > > > > >> > > setTombstone() to > > > actually set > > > > > the > > > > > > > > > tombstone. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > We should compare > this > > > > migration > > > > > > > plan > > > > > > > > with > > > > > > > > > the > > > > > > > > > > > > migration > > > > > > > > > > > > > plan for > > > > > > > > > > > > > >> magic > > > > > > > > > > > > > >> > > byte bump and do > > > whatever > > > > looks > > > > > > > good. > > > > > > > > > > > > > >> > > I am just worried > that > > > if we > > > > go > > > > > > down > > > > > > > > magic > > > > > > > > > > byte > > > > > > > > > > > route, > > > > > > > > > > > > > unless I am > > > > > > > > > > > > > >> > missing > > > > > > > > > > > > > >> > > something, it sounds > > > like > > > > kafka > > > > > > will > > > > > > > > be > > > > > > > > > stuck > > > > > > > > > > > with > > > > > > > > > > > > > supporting both > > > > > > > > > > > > > >> null > > > > > > > > > > > > > >> > > value and tombstone > > bit > > > for > > > > log > > > > > > > > compaction > > > > > > > > > for > > > > > > > > > > > life > > > > > > > > > > > > long, > > > > > > > > > > > > > which does > > > > > > > > > > > > > >> not > > > > > > > > > > > > > >> > > look like a good end > > > state. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > Thanks, > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > Mayuresh > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > On Wed, Nov 16, 2016 > > at > > > 9:32 > > > > AM, > > > > > > > > Mayuresh > > > > > > > > > > > Gharat < > > > > > > > > > > > > > >> > > > > > gharatmayures...@gmail.com > > > > > > > > > > > > > >> > > > wrote: > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > Hi Ismael, > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > That's a very good > > > point > > > > > which I > > > > > > > > might > > > > > > > > > have > > > > > > > > > > > not > > > > > > > > > > > > > considered earlier. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > Here is a plan > that > > I > > > can > > > > > think > > > > > > > of: > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > Stage 1) The > broker > > > from now > > > > > on, > > > > > > > up > > > > > > > > > converts > > > > > > > > > > > the > > > > > > > > > > > > message > > > > > > > > > > > > > to have the > > > > > > > > > > > > > >> > > > tombstone marker. > > The > > > log > > > > > > > compaction > > > > > > > > > thread > > > > > > > > > > > does log > > > > > > > > > > > > > compaction > > > > > > > > > > > > > >> based > > > > > > > > > > > > > >> > on > > > > > > > > > > > > > >> > > > both null and > > > tombstone > > > > > marker. > > > > > > > > This is > > > > > > > > > our > > > > > > > > > > > > transition > > > > > > > > > > > > > period. > > > > > > > > > > > > > >> > > > Stage 2) The next > > > release we > > > > > > only > > > > > > > > say that > > > > > > > > > > log > > > > > > > > > > > > compaction > > > > > > > > > > > > > is based > > > > > > > > > > > > > >> on > > > > > > > > > > > > > >> > > > tombstone marker. > > > (Open > > > > source > > > > > > > > kafka makes > > > > > > > > > > > this as a > > > > > > > > > > > > > policy). By > > > > > > > > > > > > > >> this > > > > > > > > > > > > > >> > > time, > > > > > > > > > > > > > >> > > > the organization > > > which is > > > > > moving > > > > > > > to > > > > > > > > this > > > > > > > > > > > release > > > > > > > > > > > > will be > > > > > > > > > > > > > sure that > > > > > > > > > > > > > >> they > > > > > > > > > > > > > >> > > > have gone through > > the > > > entire > > > > > > > > transition > > > > > > > > > > > period. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > My only goal of > > doing > > > this > > > > is > > > > > > that > > > > > > > > Kafka > > > > > > > > > > > clearly > > > > > > > > > > > > > specifies the end > > > > > > > > > > > > > >> > state > > > > > > > > > > > > > >> > > > about what log > > > compaction > > > > > means > > > > > > > (is > > > > > > > > it > > > > > > > > > null > > > > > > > > > > > value > > > > > > > > > > > > or a > > > > > > > > > > > > > tombstone > > > > > > > > > > > > > >> > marker, > > > > > > > > > > > > > >> > > > but not both). > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > What do you think? > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > Thanks, > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > Mayuresh > > > > > > > > > > > > > >> > > > . > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > On Wed, Nov 16, > 2016 > > > at 9:17 > > > > > AM, > > > > > > > > Ismael > > > > > > > > > > Juma < > > > > > > > > > > > > > ism...@juma.me.uk> > > > > > > > > > > > > > >> > wrote: > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > >> One comment > below. > > > > > > > > > > > > > >> > > >> > > > > > > > > > > > > > >> > > >> On Wed, Nov 16, > > 2016 > > > at > > > > 5:08 > > > > > > PM, > > > > > > > > Mayuresh > > > > > > > > > > > Gharat < > > > > > > > > > > > > > >> > > >> > > > gharatmayures...@gmail.com > > > > > > > > > > > > > >> > > >> > wrote: > > > > > > > > > > > > > >> > > >> > > > > > > > > > > > > > >> > > >> > - If we > don't > > > bump up > > > > > the > > > > > > > > magic > > > > > > > > > byte, > > > > > > > > > > > on the > > > > > > > > > > > > broker > > > > > > > > > > > > > side, the > > > > > > > > > > > > > >> > > broker > > > > > > > > > > > > > >> > > >> > will always > > > have to > > > > look > > > > > > at > > > > > > > > both > > > > > > > > > > > tombstone > > > > > > > > > > > > bit and > > > > > > > > > > > > > the value > > > > > > > > > > > > > >> when > > > > > > > > > > > > > >> > > do > > > > > > > > > > > > > >> > > >> the > > > > > > > > > > > > > >> > > >> > compaction. > > > Assuming > > > > we > > > > > do > > > > > > > > not bump > > > > > > > > > up > > > > > > > > > > > the > > > > > > > > > > > > magic > > > > > > > > > > > > > byte, > > > > > > > > > > > > > >> > > >> > imagine the > > > broker > > > > sees > > > > > a > > > > > > > > message > > > > > > > > > > which > > > > > > > > > > > does > > > > > > > > > > > > not > > > > > > > > > > > > > have a > > > > > > > > > > > > > >> tombstone > > > > > > > > > > > > > >> > > bit > > > > > > > > > > > > > >> > > >> > set. The > > broker > > > does > > > > not > > > > > > > know > > > > > > > > when > > > > > > > > > the > > > > > > > > > > > > message was > > > > > > > > > > > > > produced > > > > > > > > > > > > > >> (i.e. > > > > > > > > > > > > > >> > > >> > whether > > > > > > > > > > > > > >> > > >> > the message > > has > > > been > > > > up > > > > > > > > converted or > > > > > > > > > > > not), it > > > > > > > > > > > > has > > > > > > > > > > > > > to take a > > > > > > > > > > > > > >> > further > > > > > > > > > > > > > >> > > >> > look at > > > > > > > > > > > > > >> > > >> > the value to > > > see if it > > > > > is > > > > > > > > null or > > > > > > > > > not > > > > > > > > > > in > > > > > > > > > > > > order to > > > > > > > > > > > > > determine > > > > > > > > > > > > > >> if it > > > > > > > > > > > > > >> > > is > > > > > > > > > > > > > >> > > >> a > > > > > > > > > > > > > >> > > >> > tombstone. > The > > > same > > > > > logic > > > > > > > has > > > > > > > > to be > > > > > > > > > > put > > > > > > > > > > > on the > > > > > > > > > > > > > consumer as > > > > > > > > > > > > > >> well > > > > > > > > > > > > > >> > > >> because > > > > > > > > > > > > > >> > > >> > the > > > > > > > > > > > > > >> > > >> > consumer > does > > > not know > > > > > if > > > > > > > the > > > > > > > > > message > > > > > > > > > > > has > > > > > > > > > > > > been up > > > > > > > > > > > > > converted or > > > > > > > > > > > > > >> > not. > > > > > > > > > > > > > >> > > >> > - If we > > > upconvert > > > > > while > > > > > > > > > appending, > > > > > > > > > > > this is > > > > > > > > > > > > not > > > > > > > > > > > > > the case, > > > > > > > > > > > > > >> > right? > > > > > > > > > > > > > >> > > >> > > > > > > > > > > > > > >> > > >> > > > > > > > > > > > > > >> > > >> If I understand > you > > > > > correctly, > > > > > > > > this is > > > > > > > > > not > > > > > > > > > > > > sufficient > > > > > > > > > > > > > because the > > > > > > > > > > > > > >> log > > > > > > > > > > > > > >> > > may > > > > > > > > > > > > > >> > > >> have messages > > > appended > > > > before > > > > > > it > > > > > > > > was > > > > > > > > > > > upgraded to > > > > > > > > > > > > include > > > > > > > > > > > > > KIP-87. > > > > > > > > > > > > > >> > > >> > > > > > > > > > > > > > >> > > >> Ismael > > > > > > > > > > > > > >> > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > -- > > > > > > > > > > > > > >> > > > -Regards, > > > > > > > > > > > > > >> > > > Mayuresh R. Gharat > > > > > > > > > > > > > >> > > > (862) 250-7125 > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > -- > > > > > > > > > > > > > >> > > -Regards, > > > > > > > > > > > > > >> > > Mayuresh R. Gharat > > > > > > > > > > > > > >> > > (862) 250-7125 > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > 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. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> -- > > > > > > > > > > > > > >> -Regards, > > > > > > > > > > > > > >> Mayuresh R. Gharat > > > > > > > > > > > > > >> (862) 250-7125 > > > > > > > > > > > > > >> 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. > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > -Regards, > > > > > > > > > > > > > > Mayuresh R. Gharat > > > > > > > > > > > > > > (862) 250-7125 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > -Regards, > > > > > > > > > > > > > Mayuresh R. Gharat > > > > > > > > > > > > > (862) 250-7125 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 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 > > > > <020%207896%200011>) 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 > > > > <020%207896%200011>) 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 > > > > <020%207896%200011>) 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 > > > > <020%207896%200011>) 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 > > > > <020%207896%200011>) 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 > > > <020%207896%200011>) > > > > 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 > > > <020%207896%200011>) > > > > 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 > > > <020%207896%200011>) > > > > 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. > > > > > 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. >