Never mind about my second comment. I misunderstood the semantics of producer's batch.size.
On Wed, Mar 22, 2017 at 10:20 AM, Dong Lin <lindon...@gmail.com> wrote: > Hey Becket, > > In addition to the batch-split-rate, should we also add batch-split-ratio > sensor to gauge the probability that we have to split batch? > > Also, in the case that the batch size configured for the producer is > smaller than the max message size configured for the broker, why can't we > just split the batch if its size exceeds the configured batch size? The > benefit of this approach is that the semantics of producer is > straightforward because we enforce the batch size that user has configured. > The implementation would also be simpler because we don't have to reply on > KIP-4 to fetch the max message size from broker. I guess you are worrying > about the overhead of "unnecessary" split if a batch size is between > user-configured batch size and broker's max message size. But is overhead > really a concern? If overhead is too large because user has configured a > very low batch size for producer, shouldn't user adjust produce config? > > Thanks, > Dong > > On Wed, Mar 15, 2017 at 2:50 PM, Becket Qin <becket....@gmail.com> wrote: > >> I see, then we are thinking about the same thing :) >> >> On Wed, Mar 15, 2017 at 2:26 PM, Ismael Juma <ism...@juma.me.uk> wrote: >> >> > I meant finishing what's described in the following section and then >> > starting a discussion followed by a vote: >> > >> > https://cwiki.apache.org/confluence/display/KAFKA/KIP- >> > 4+-+Command+line+and+centralized+administrative+operations#KIP-4- >> > Commandlineandcentralizedadministrativeoperations-DescribeCo >> nfigsRequest >> > >> > We have only voted on KIP-4 Metadata, KIP-4 Create Topics, KIP-4 Delete >> > Topics so far. >> > >> > Ismael >> > >> > On Wed, Mar 15, 2017 at 8:58 PM, Becket Qin <becket....@gmail.com> >> wrote: >> > >> > > Hi Ismael, >> > > >> > > KIP-4 is also the one that I was thinking about. We have introduced a >> > > DescribeConfigRequest there so the producer can easily get the >> > > configurations. By "another KIP" do you mean a new (or maybe extended) >> > > protocol or using that protocol in clients? >> > > >> > > Thanks, >> > > >> > > Jiangjie (Becket) Qin >> > > >> > > On Wed, Mar 15, 2017 at 1:21 PM, Ismael Juma <ism...@juma.me.uk> >> wrote: >> > > >> > > > Hi Becket, >> > > > >> > > > How were you thinking of retrieving the configuration items you >> > > mentioned? >> > > > I am asking because I was planning to post a KIP for Describe >> Configs >> > > (one >> > > > of the protocols in KIP-4), which would expose such information. But >> > > maybe >> > > > you are thinking of extending Metadata request? >> > > > >> > > > Ismael >> > > > >> > > > On Wed, Mar 15, 2017 at 7:33 PM, Becket Qin <becket....@gmail.com> >> > > wrote: >> > > > >> > > > > Hi Jason, >> > > > > >> > > > > Good point. I was thinking about that, too. I was not sure if >> that is >> > > the >> > > > > right thing to do by default. >> > > > > >> > > > > If we assume people always set the batch size to max message size, >> > > > > splitting the oversized batch makes a lot of sense. But it seems >> > > possible >> > > > > that users want to control the memory footprint so they would set >> the >> > > > batch >> > > > > size to smaller than the max message size so the producer can have >> > hold >> > > > > batches for more partitions. In this case, splitting the batch >> might >> > > not >> > > > be >> > > > > the desired behavior. >> > > > > >> > > > > I think the most intuitive approach to this is allow the producer >> to >> > > get >> > > > > the max message size configuration (as well as some other >> > > configurations >> > > > > such as timestamp type) from the broker side and use that to >> decide >> > > > > whether a batch should be split or not. I probably should add >> this to >> > > the >> > > > > KIP wiki. >> > > > > >> > > > > Thanks, >> > > > > >> > > > > Jiangjie (Becket) Qin >> > > > > >> > > > > On Wed, Mar 15, 2017 at 9:47 AM, Jason Gustafson < >> ja...@confluent.io >> > > >> > > > > wrote: >> > > > > >> > > > > > Hey Becket, >> > > > > > >> > > > > > Thanks for the KIP! The approach seems reasonable. One >> > clarification: >> > > > is >> > > > > > the intent to do the splitting after the broker rejects the >> request >> > > > with >> > > > > > MESSAGE_TOO_LARGE, or prior to sending if the configured batch >> size >> > > is >> > > > > > exceeded? >> > > > > > >> > > > > > -Jason >> > > > > > >> > > > > > On Mon, Mar 13, 2017 at 8:10 PM, Becket Qin < >> becket....@gmail.com> >> > > > > wrote: >> > > > > > >> > > > > > > Bump up the thread for further comments. If there is no more >> > > comments >> > > > > on >> > > > > > > the KIP I will start the voting thread on Wed. >> > > > > > > >> > > > > > > Thanks, >> > > > > > > >> > > > > > > Jiangjie (Becket) Qin >> > > > > > > >> > > > > > > On Tue, Mar 7, 2017 at 9:48 AM, Becket Qin < >> becket....@gmail.com >> > > >> > > > > wrote: >> > > > > > > >> > > > > > > > Hi Dong, >> > > > > > > > >> > > > > > > > Thanks for the comments. >> > > > > > > > >> > > > > > > > The patch is mostly for proof of concept in case there is >> any >> > > > concern >> > > > > > > > about the implementation which is indeed a little tricky. >> > > > > > > > >> > > > > > > > The new metric has already been mentioned in the Public >> > Interface >> > > > > > Change >> > > > > > > > section. >> > > > > > > > >> > > > > > > > I added the reasoning about how the compression ratio >> > > > > > > > improving/deteriorate steps are determined in the wiki. >> > > > > > > > >> > > > > > > > Thanks, >> > > > > > > > >> > > > > > > > Jiangjie (Becket) Qin >> > > > > > > > >> > > > > > > > >> > > > > > > > On Mon, Mar 6, 2017 at 4:42 PM, Dong Lin < >> lindon...@gmail.com> >> > > > > wrote: >> > > > > > > > >> > > > > > > >> Hey Becket, >> > > > > > > >> >> > > > > > > >> I am wondering if we should first vote for the KIP before >> > > > reviewing >> > > > > > the >> > > > > > > >> patch. I have two comments below: >> > > > > > > >> >> > > > > > > >> - Should we specify the new sensors as part of interface >> > change >> > > in >> > > > > the >> > > > > > > >> KIP? >> > > > > > > >> - The KIP proposes to increase estimated compression ratio >> by >> > > 0.05 >> > > > > for >> > > > > > > >> each >> > > > > > > >> underestimation and decrement the estimation by 0.005 for >> each >> > > > > > > >> overestimation. Why are these two values chosen? I think >> there >> > > is >> > > > > some >> > > > > > > >> tradeoff in selecting the value. Can the KIP be more >> explicit >> > > > about >> > > > > > the >> > > > > > > >> tradeoff and explain how these two values would impact >> > > producer's >> > > > > > > >> performance? >> > > > > > > >> >> > > > > > > >> Thanks, >> > > > > > > >> Dong >> > > > > > > >> >> > > > > > > >> >> > > > > > > >> On Sat, Mar 4, 2017 at 11:42 AM, Becket Qin < >> > > becket....@gmail.com >> > > > > >> > > > > > > wrote: >> > > > > > > >> >> > > > > > > >> > I have updated the KIP based on the latest discussion. >> > Please >> > > > > check >> > > > > > > and >> > > > > > > >> let >> > > > > > > >> > me know if there is any further concern. >> > > > > > > >> > >> > > > > > > >> > Thanks, >> > > > > > > >> > >> > > > > > > >> > Jiangjie (Becket) Qin >> > > > > > > >> > >> > > > > > > >> > On Sat, Mar 4, 2017 at 10:56 AM, Becket Qin < >> > > > becket....@gmail.com >> > > > > > >> > > > > > > >> wrote: >> > > > > > > >> > >> > > > > > > >> > > Actually second thought on this, rate might be better >> for >> > > two >> > > > > > > reasons: >> > > > > > > >> > > 1. Most of the metrics in the producer we already have >> are >> > > > using >> > > > > > > rate >> > > > > > > >> > > instead of count. >> > > > > > > >> > > 2. If a service is bounced, the count will be reset to >> 0, >> > > but >> > > > it >> > > > > > > does >> > > > > > > >> not >> > > > > > > >> > > affect rate. >> > > > > > > >> > > >> > > > > > > >> > > I'll make the change. >> > > > > > > >> > > >> > > > > > > >> > > Thanks, >> > > > > > > >> > > >> > > > > > > >> > > Jiangjie (Becket) Qin >> > > > > > > >> > > >> > > > > > > >> > > On Sat, Mar 4, 2017 at 10:27 AM, Becket Qin < >> > > > > becket....@gmail.com >> > > > > > > >> > > > > > > >> > wrote: >> > > > > > > >> > > >> > > > > > > >> > >> Hi Dong, >> > > > > > > >> > >> >> > > > > > > >> > >> Yes, there is a sensor in the patch about the split >> > > > occurrence. >> > > > > > > >> > >> >> > > > > > > >> > >> Currently it is a count instead of rate. In practice, >> it >> > > > seems >> > > > > > > count >> > > > > > > >> is >> > > > > > > >> > >> easier to use in this case. But I am open to change. >> > > > > > > >> > >> >> > > > > > > >> > >> Thanks, >> > > > > > > >> > >> >> > > > > > > >> > >> Jiangjie (Becket) Qin >> > > > > > > >> > >> >> > > > > > > >> > >> On Fri, Mar 3, 2017 at 7:43 PM, Dong Lin < >> > > > lindon...@gmail.com> >> > > > > > > >> wrote: >> > > > > > > >> > >> >> > > > > > > >> > >>> Hey Becket, >> > > > > > > >> > >>> >> > > > > > > >> > >>> I haven't looked at the patch yet. But since we are >> > going >> > > to >> > > > > try >> > > > > > > the >> > > > > > > >> > >>> split-on-oversize solution, should the KIP also add a >> > > sensor >> > > > > > that >> > > > > > > >> shows >> > > > > > > >> > >>> the >> > > > > > > >> > >>> rate of split per second and the probability of >> split? >> > > > > > > >> > >>> >> > > > > > > >> > >>> Thanks, >> > > > > > > >> > >>> Dong >> > > > > > > >> > >>> >> > > > > > > >> > >>> >> > > > > > > >> > >>> On Fri, Mar 3, 2017 at 6:39 PM, Becket Qin < >> > > > > > becket....@gmail.com> >> > > > > > > >> > wrote: >> > > > > > > >> > >>> >> > > > > > > >> > >>> > Just to clarify, the implementation is basically >> what >> > I >> > > > > > > mentioned >> > > > > > > >> > above >> > > > > > > >> > >>> > (split/resend + adjusted estimation evolving >> > algorithm) >> > > > and >> > > > > > > >> changing >> > > > > > > >> > >>> the >> > > > > > > >> > >>> > compression ratio estimation to be per topic. >> > > > > > > >> > >>> > >> > > > > > > >> > >>> > Thanks, >> > > > > > > >> > >>> > >> > > > > > > >> > >>> > Jiangjie (Becket) Qin >> > > > > > > >> > >>> > >> > > > > > > >> > >>> > On Fri, Mar 3, 2017 at 6:36 PM, Becket Qin < >> > > > > > > becket....@gmail.com> >> > > > > > > >> > >>> wrote: >> > > > > > > >> > >>> > >> > > > > > > >> > >>> > > I went ahead and have a patch submitted here: >> > > > > > > >> > >>> > > https://github.com/apache/kafka/pull/2638 >> > > > > > > >> > >>> > > >> > > > > > > >> > >>> > > Per Joel's suggestion, I changed the compression >> > ratio >> > > > to >> > > > > be >> > > > > > > per >> > > > > > > >> > >>> topic as >> > > > > > > >> > >>> > > well. It seems working well. Since there is an >> > > important >> > > > > > > >> behavior >> > > > > > > >> > >>> change >> > > > > > > >> > >>> > > and a new sensor is added, I'll keep the KIP and >> > > update >> > > > it >> > > > > > > >> > according. >> > > > > > > >> > >>> > > >> > > > > > > >> > >>> > > Thanks, >> > > > > > > >> > >>> > > >> > > > > > > >> > >>> > > Jiangjie (Becket) Qin >> > > > > > > >> > >>> > > >> > > > > > > >> > >>> > > On Mon, Feb 27, 2017 at 3:50 PM, Joel Koshy < >> > > > > > > >> jjkosh...@gmail.com> >> > > > > > > >> > >>> wrote: >> > > > > > > >> > >>> > > >> > > > > > > >> > >>> > >> > >> > > > > > > >> > >>> > >> > Lets say we sent the batch over the wire and >> > > > received a >> > > > > > > >> > >>> > >> > RecordTooLargeException, how do we split it as >> > once >> > > > we >> > > > > > add >> > > > > > > >> the >> > > > > > > >> > >>> message >> > > > > > > >> > >>> > >> to >> > > > > > > >> > >>> > >> > the batch we loose the message level >> granularity. >> > > We >> > > > > will >> > > > > > > >> have >> > > > > > > >> > to >> > > > > > > >> > >>> > >> > decompress, do deep iteration and split and >> again >> > > > > > compress. >> > > > > > > >> > right? >> > > > > > > >> > >>> > This >> > > > > > > >> > >>> > >> > looks like a performance bottle neck in case >> of >> > > multi >> > > > > > topic >> > > > > > > >> > >>> producers >> > > > > > > >> > >>> > >> like >> > > > > > > >> > >>> > >> > mirror maker. >> > > > > > > >> > >>> > >> > >> > > > > > > >> > >>> > >> >> > > > > > > >> > >>> > >> Yes, but these should be outliers if we do >> > estimation >> > > > on >> > > > > a >> > > > > > > >> > per-topic >> > > > > > > >> > >>> > basis >> > > > > > > >> > >>> > >> and if we target a conservative-enough >> compression >> > > > ratio. >> > > > > > The >> > > > > > > >> > >>> producer >> > > > > > > >> > >>> > >> should also avoid sending over the wire if it >> can >> > be >> > > > made >> > > > > > > >> aware of >> > > > > > > >> > >>> the >> > > > > > > >> > >>> > >> max-message size limit on the broker, and split >> if >> > it >> > > > > > > >> determines >> > > > > > > >> > >>> that a >> > > > > > > >> > >>> > >> record exceeds the broker's config. Ideally this >> > > should >> > > > > be >> > > > > > > >> part of >> > > > > > > >> > >>> topic >> > > > > > > >> > >>> > >> metadata but is not - so it could be off a >> periodic >> > > > > > > >> > describe-configs >> > > > > > > >> > >>> > >> <https://cwiki.apache.org/ >> > > > confluence/display/KAFKA/KIP- >> > > > > > 4+-+ >> > > > > > > >> > >>> > >> Command+line+and+centralized+ >> > > > > > administrative+operations#KIP- >> > > > > > > >> > >>> > >> 4-Commandlineandcentralizedadmin >> > > > > > istrativeoperations-Describe >> > > > > > > >> > >>> > >> ConfigsRequest> >> > > > > > > >> > >>> > >> (which isn't available yet). This doesn't remove >> > the >> > > > need >> > > > > > to >> > > > > > > >> split >> > > > > > > >> > >>> and >> > > > > > > >> > >>> > >> recompress though. >> > > > > > > >> > >>> > >> >> > > > > > > >> > >>> > >> >> > > > > > > >> > >>> > >> > On Mon, Feb 27, 2017 at 10:51 AM, Becket Qin < >> > > > > > > >> > >>> becket....@gmail.com> >> > > > > > > >> > >>> > >> wrote: >> > > > > > > >> > >>> > >> > >> > > > > > > >> > >>> > >> > > Hey Mayuresh, >> > > > > > > >> > >>> > >> > > >> > > > > > > >> > >>> > >> > > 1) The batch would be split when an >> > > > > > > >> RecordTooLargeException is >> > > > > > > >> > >>> > >> received. >> > > > > > > >> > >>> > >> > > 2) Not lower the actual compression ratio, >> but >> > > > lower >> > > > > > the >> > > > > > > >> > >>> estimated >> > > > > > > >> > >>> > >> > > compression ratio "according to" the Actual >> > > > > Compression >> > > > > > > >> > >>> Ratio(ACR). >> > > > > > > >> > >>> > >> > > >> > > > > > > >> > >>> > >> > > An example, let's start with Estimated >> > > Compression >> > > > > > Ratio >> > > > > > > >> > (ECR) = >> > > > > > > >> > >>> > 1.0. >> > > > > > > >> > >>> > >> Say >> > > > > > > >> > >>> > >> > > the compression ratio of ACR is ~0.8, >> instead >> > of >> > > > > > letting >> > > > > > > >> the >> > > > > > > >> > ECR >> > > > > > > >> > >>> > >> dropped >> > > > > > > >> > >>> > >> > to >> > > > > > > >> > >>> > >> > > 0.8 very quickly, we only drop 0.001 every >> time >> > > > when >> > > > > > ACR >> > > > > > > < >> > > > > > > >> > ECR. >> > > > > > > >> > >>> > >> However, >> > > > > > > >> > >>> > >> > > once we see an ACR > ECR, we increment ECR >> by >> > > 0.05. >> > > > > If >> > > > > > a >> > > > > > > >> > >>> > >> > > RecordTooLargeException is received, we >> reset >> > the >> > > > ECR >> > > > > > > back >> > > > > > > >> to >> > > > > > > >> > >>> 1.0 >> > > > > > > >> > >>> > and >> > > > > > > >> > >>> > >> > split >> > > > > > > >> > >>> > >> > > the batch. >> > > > > > > >> > >>> > >> > > >> > > > > > > >> > >>> > >> > > Thanks, >> > > > > > > >> > >>> > >> > > >> > > > > > > >> > >>> > >> > > Jiangjie (Becket) Qin >> > > > > > > >> > >>> > >> > > >> > > > > > > >> > >>> > >> > > >> > > > > > > >> > >>> > >> > > >> > > > > > > >> > >>> > >> > > On Mon, Feb 27, 2017 at 10:30 AM, Mayuresh >> > > Gharat < >> > > > > > > >> > >>> > >> > > gharatmayures...@gmail.com> wrote: >> > > > > > > >> > >>> > >> > > >> > > > > > > >> > >>> > >> > > > Hi Becket, >> > > > > > > >> > >>> > >> > > > >> > > > > > > >> > >>> > >> > > > Seems like an interesting idea. >> > > > > > > >> > >>> > >> > > > I had couple of questions : >> > > > > > > >> > >>> > >> > > > 1) How do we decide when the batch should >> be >> > > > split? >> > > > > > > >> > >>> > >> > > > 2) What do you mean by slowly lowering the >> > > > "actual" >> > > > > > > >> > >>> compression >> > > > > > > >> > >>> > >> ratio? >> > > > > > > >> > >>> > >> > > > An example would really help here. >> > > > > > > >> > >>> > >> > > > >> > > > > > > >> > >>> > >> > > > Thanks, >> > > > > > > >> > >>> > >> > > > >> > > > > > > >> > >>> > >> > > > Mayuresh >> > > > > > > >> > >>> > >> > > > >> > > > > > > >> > >>> > >> > > > On Fri, Feb 24, 2017 at 3:17 PM, Becket >> Qin < >> > > > > > > >> > >>> becket....@gmail.com >> > > > > > > >> > >>> > > >> > > > > > > >> > >>> > >> > > wrote: >> > > > > > > >> > >>> > >> > > > >> > > > > > > >> > >>> > >> > > > > Hi Jay, >> > > > > > > >> > >>> > >> > > > > >> > > > > > > >> > >>> > >> > > > > Yeah, I got your point. >> > > > > > > >> > >>> > >> > > > > >> > > > > > > >> > >>> > >> > > > > I think there might be a solution which >> do >> > > not >> > > > > > > require >> > > > > > > >> > >>> adding a >> > > > > > > >> > >>> > >> new >> > > > > > > >> > >>> > >> > > > > configuration. We can start from a very >> > > > > > conservative >> > > > > > > >> > >>> compression >> > > > > > > >> > >>> > >> > ratio >> > > > > > > >> > >>> > >> > > > say >> > > > > > > >> > >>> > >> > > > > 1.0 and lower it very slowly according >> to >> > the >> > > > > > actual >> > > > > > > >> > >>> compression >> > > > > > > >> > >>> > >> > ratio >> > > > > > > >> > >>> > >> > > > > until we hit a point that we have to >> split >> > a >> > > > > batch. >> > > > > > > At >> > > > > > > >> > that >> > > > > > > >> > >>> > >> point, we >> > > > > > > >> > >>> > >> > > > > exponentially back off on the >> compression >> > > > ratio. >> > > > > > The >> > > > > > > >> idea >> > > > > > > >> > is >> > > > > > > >> > >>> > >> somewhat >> > > > > > > >> > >>> > >> > > > like >> > > > > > > >> > >>> > >> > > > > TCP. This should help avoid frequent >> split. >> > > > > > > >> > >>> > >> > > > > >> > > > > > > >> > >>> > >> > > > > The upper bound of the batch size is >> also a >> > > > > little >> > > > > > > >> awkward >> > > > > > > >> > >>> today >> > > > > > > >> > >>> > >> > > because >> > > > > > > >> > >>> > >> > > > we >> > > > > > > >> > >>> > >> > > > > say the batch size is based on >> compressed >> > > size, >> > > > > but >> > > > > > > >> users >> > > > > > > >> > >>> cannot >> > > > > > > >> > >>> > >> set >> > > > > > > >> > >>> > >> > it >> > > > > > > >> > >>> > >> > > > to >> > > > > > > >> > >>> > >> > > > > the max message size because that will >> > result >> > > > in >> > > > > > > >> oversized >> > > > > > > >> > >>> > >> messages. >> > > > > > > >> > >>> > >> > > With >> > > > > > > >> > >>> > >> > > > > this change we will be able to allow the >> > > users >> > > > to >> > > > > > set >> > > > > > > >> the >> > > > > > > >> > >>> > message >> > > > > > > >> > >>> > >> > size >> > > > > > > >> > >>> > >> > > to >> > > > > > > >> > >>> > >> > > > > close to max message size. >> > > > > > > >> > >>> > >> > > > > >> > > > > > > >> > >>> > >> > > > > However the downside is that there >> could be >> > > > > latency >> > > > > > > >> spikes >> > > > > > > >> > >>> in >> > > > > > > >> > >>> > the >> > > > > > > >> > >>> > >> > > system >> > > > > > > >> > >>> > >> > > > in >> > > > > > > >> > >>> > >> > > > > this case due to the splitting, >> especially >> > > when >> > > > > > there >> > > > > > > >> are >> > > > > > > >> > >>> many >> > > > > > > >> > >>> > >> > messages >> > > > > > > >> > >>> > >> > > > > need to be split at the same time. That >> > could >> > > > > > > >> potentially >> > > > > > > >> > >>> be an >> > > > > > > >> > >>> > >> issue >> > > > > > > >> > >>> > >> > > for >> > > > > > > >> > >>> > >> > > > > some users. >> > > > > > > >> > >>> > >> > > > > >> > > > > > > >> > >>> > >> > > > > What do you think about this approach? >> > > > > > > >> > >>> > >> > > > > >> > > > > > > >> > >>> > >> > > > > Thanks, >> > > > > > > >> > >>> > >> > > > > >> > > > > > > >> > >>> > >> > > > > Jiangjie (Becket) Qin >> > > > > > > >> > >>> > >> > > > > >> > > > > > > >> > >>> > >> > > > > >> > > > > > > >> > >>> > >> > > > > >> > > > > > > >> > >>> > >> > > > > On Thu, Feb 23, 2017 at 1:31 PM, Jay >> Kreps >> > < >> > > > > > > >> > >>> j...@confluent.io> >> > > > > > > >> > >>> > >> wrote: >> > > > > > > >> > >>> > >> > > > > >> > > > > > > >> > >>> > >> > > > > > Hey Becket, >> > > > > > > >> > >>> > >> > > > > > >> > > > > > > >> > >>> > >> > > > > > Yeah that makes sense. >> > > > > > > >> > >>> > >> > > > > > >> > > > > > > >> > >>> > >> > > > > > I agree that you'd really have to both >> > fix >> > > > the >> > > > > > > >> > estimation >> > > > > > > >> > >>> > (i.e. >> > > > > > > >> > >>> > >> > make >> > > > > > > >> > >>> > >> > > it >> > > > > > > >> > >>> > >> > > > > per >> > > > > > > >> > >>> > >> > > > > > topic or make it better estimate the >> high >> > > > > > > >> percentiles) >> > > > > > > >> > AND >> > > > > > > >> > >>> > have >> > > > > > > >> > >>> > >> the >> > > > > > > >> > >>> > >> > > > > > recovery mechanism. If you are >> > > > underestimating >> > > > > > > often >> > > > > > > >> and >> > > > > > > >> > >>> then >> > > > > > > >> > >>> > >> > paying >> > > > > > > >> > >>> > >> > > a >> > > > > > > >> > >>> > >> > > > > high >> > > > > > > >> > >>> > >> > > > > > recovery price that won't fly. >> > > > > > > >> > >>> > >> > > > > > >> > > > > > > >> > >>> > >> > > > > > I think you take my main point though, >> > > which >> > > > is >> > > > > > > just >> > > > > > > >> > that >> > > > > > > >> > >>> I >> > > > > > > >> > >>> > >> hate to >> > > > > > > >> > >>> > >> > > > > exposes >> > > > > > > >> > >>> > >> > > > > > these super low level options to users >> > > > because >> > > > > it >> > > > > > > is >> > > > > > > >> so >> > > > > > > >> > >>> hard >> > > > > > > >> > >>> > to >> > > > > > > >> > >>> > >> > > explain >> > > > > > > >> > >>> > >> > > > > to >> > > > > > > >> > >>> > >> > > > > > people what it means and how they >> should >> > > set >> > > > > it. >> > > > > > So >> > > > > > > >> if >> > > > > > > >> > it >> > > > > > > >> > >>> is >> > > > > > > >> > >>> > >> > possible >> > > > > > > >> > >>> > >> > > > to >> > > > > > > >> > >>> > >> > > > > > make either some combination of better >> > > > > estimation >> > > > > > > and >> > > > > > > >> > >>> > splitting >> > > > > > > >> > >>> > >> or >> > > > > > > >> > >>> > >> > > > better >> > > > > > > >> > >>> > >> > > > > > tolerance of overage that would be >> > > > preferrable. >> > > > > > > >> > >>> > >> > > > > > >> > > > > > > >> > >>> > >> > > > > > -Jay >> > > > > > > >> > >>> > >> > > > > > >> > > > > > > >> > >>> > >> > > > > > On Thu, Feb 23, 2017 at 11:51 AM, >> Becket >> > > Qin >> > > > < >> > > > > > > >> > >>> > >> becket....@gmail.com >> > > > > > > >> > >>> > >> > > >> > > > > > > >> > >>> > >> > > > > wrote: >> > > > > > > >> > >>> > >> > > > > > >> > > > > > > >> > >>> > >> > > > > > > @Dong, >> > > > > > > >> > >>> > >> > > > > > > >> > > > > > > >> > >>> > >> > > > > > > Thanks for the comments. The default >> > > > behavior >> > > > > > of >> > > > > > > >> the >> > > > > > > >> > >>> > producer >> > > > > > > >> > >>> > >> > won't >> > > > > > > >> > >>> > >> > > > > > change. >> > > > > > > >> > >>> > >> > > > > > > If the users want to use the >> > uncompressed >> > > > > > message >> > > > > > > >> > size, >> > > > > > > >> > >>> they >> > > > > > > >> > >>> > >> > > probably >> > > > > > > >> > >>> > >> > > > > > will >> > > > > > > >> > >>> > >> > > > > > > also bump up the batch size to >> > somewhere >> > > > > close >> > > > > > to >> > > > > > > >> the >> > > > > > > >> > >>> max >> > > > > > > >> > >>> > >> message >> > > > > > > >> > >>> > >> > > > size. >> > > > > > > >> > >>> > >> > > > > > > This would be in the document. BTW >> the >> > > > > default >> > > > > > > >> batch >> > > > > > > >> > >>> size is >> > > > > > > >> > >>> > >> 16K >> > > > > > > >> > >>> > >> > > > which >> > > > > > > >> > >>> > >> > > > > is >> > > > > > > >> > >>> > >> > > > > > > pretty small. >> > > > > > > >> > >>> > >> > > > > > > >> > > > > > > >> > >>> > >> > > > > > > @Jay, >> > > > > > > >> > >>> > >> > > > > > > >> > > > > > > >> > >>> > >> > > > > > > Yeah, we actually had debated quite >> a >> > bit >> > > > > > > >> internally >> > > > > > > >> > >>> what is >> > > > > > > >> > >>> > >> the >> > > > > > > >> > >>> > >> > > best >> > > > > > > >> > >>> > >> > > > > > > solution to this. >> > > > > > > >> > >>> > >> > > > > > > >> > > > > > > >> > >>> > >> > > > > > > I completely agree it is a bug. In >> > > practice >> > > > > we >> > > > > > > >> usually >> > > > > > > >> > >>> leave >> > > > > > > >> > >>> > >> some >> > > > > > > >> > >>> > >> > > > > > headroom >> > > > > > > >> > >>> > >> > > > > > > to allow the compressed size to >> grow a >> > > > little >> > > > > > if >> > > > > > > >> the >> > > > > > > >> > the >> > > > > > > >> > >>> > >> original >> > > > > > > >> > >>> > >> > > > > > messages >> > > > > > > >> > >>> > >> > > > > > > are not compressible, for example, >> 1000 >> > > KB >> > > > > > > instead >> > > > > > > >> of >> > > > > > > >> > >>> > exactly >> > > > > > > >> > >>> > >> 1 >> > > > > > > >> > >>> > >> > MB. >> > > > > > > >> > >>> > >> > > > It >> > > > > > > >> > >>> > >> > > > > is >> > > > > > > >> > >>> > >> > > > > > > likely safe enough. >> > > > > > > >> > >>> > >> > > > > > > >> > > > > > > >> > >>> > >> > > > > > > The major concern for the rejected >> > > > > alternative >> > > > > > is >> > > > > > > >> > >>> > >> performance. It >> > > > > > > >> > >>> > >> > > > > largely >> > > > > > > >> > >>> > >> > > > > > > depends on how frequent we need to >> > split >> > > a >> > > > > > batch, >> > > > > > > >> i.e. >> > > > > > > >> > >>> how >> > > > > > > >> > >>> > >> likely >> > > > > > > >> > >>> > >> > > the >> > > > > > > >> > >>> > >> > > > > > > estimation can go off. If we only >> need >> > to >> > > > the >> > > > > > > split >> > > > > > > >> > work >> > > > > > > >> > >>> > >> > > > occasionally, >> > > > > > > >> > >>> > >> > > > > > the >> > > > > > > >> > >>> > >> > > > > > > cost would be amortized so we don't >> > need >> > > to >> > > > > > worry >> > > > > > > >> > about >> > > > > > > >> > >>> it >> > > > > > > >> > >>> > too >> > > > > > > >> > >>> > >> > > much. >> > > > > > > >> > >>> > >> > > > > > > However, it looks that for a >> producer >> > > with >> > > > > > shared >> > > > > > > >> > >>> topics, >> > > > > > > >> > >>> > the >> > > > > > > >> > >>> > >> > > > > estimation >> > > > > > > >> > >>> > >> > > > > > is >> > > > > > > >> > >>> > >> > > > > > > always off. As an example, consider >> two >> > > > > topics, >> > > > > > > one >> > > > > > > >> > with >> > > > > > > >> > >>> > >> > > compression >> > > > > > > >> > >>> > >> > > > > > ratio >> > > > > > > >> > >>> > >> > > > > > > 0.6 the other 0.2, assuming exactly >> > same >> > > > > > traffic, >> > > > > > > >> the >> > > > > > > >> > >>> > average >> > > > > > > >> > >>> > >> > > > > compression >> > > > > > > >> > >>> > >> > > > > > > ratio would be roughly 0.4, which is >> > not >> > > > > right >> > > > > > > for >> > > > > > > >> > >>> either of >> > > > > > > >> > >>> > >> the >> > > > > > > >> > >>> > >> > > > > topics. >> > > > > > > >> > >>> > >> > > > > > So >> > > > > > > >> > >>> > >> > > > > > > almost half of the batches (of the >> > topics >> > > > > with >> > > > > > > 0.6 >> > > > > > > >> > >>> > compression >> > > > > > > >> > >>> > >> > > ratio) >> > > > > > > >> > >>> > >> > > > > > will >> > > > > > > >> > >>> > >> > > > > > > end up larger than the configured >> batch >> > > > size. >> > > > > > > When >> > > > > > > >> it >> > > > > > > >> > >>> comes >> > > > > > > >> > >>> > to >> > > > > > > >> > >>> > >> > more >> > > > > > > >> > >>> > >> > > > > > topics >> > > > > > > >> > >>> > >> > > > > > > such as mirror maker, this becomes >> more >> > > > > > > >> unpredictable. >> > > > > > > >> > >>> To >> > > > > > > >> > >>> > >> avoid >> > > > > > > >> > >>> > >> > > > > frequent >> > > > > > > >> > >>> > >> > > > > > > rejection / split of the batches, we >> > need >> > > > to >> > > > > > > >> > configured >> > > > > > > >> > >>> the >> > > > > > > >> > >>> > >> batch >> > > > > > > >> > >>> > >> > > > size >> > > > > > > >> > >>> > >> > > > > > > pretty conservatively. This could >> > > actually >> > > > > hurt >> > > > > > > the >> > > > > > > >> > >>> > >> performance >> > > > > > > >> > >>> > >> > > > because >> > > > > > > >> > >>> > >> > > > > > we >> > > > > > > >> > >>> > >> > > > > > > are shoehorn the messages that are >> > highly >> > > > > > > >> compressible >> > > > > > > >> > >>> to a >> > > > > > > >> > >>> > >> small >> > > > > > > >> > >>> > >> > > > batch >> > > > > > > >> > >>> > >> > > > > > so >> > > > > > > >> > >>> > >> > > > > > > that the other topics that are not >> that >> > > > > > > >> compressible >> > > > > > > >> > >>> will >> > > > > > > >> > >>> > not >> > > > > > > >> > >>> > >> > > become >> > > > > > > >> > >>> > >> > > > > too >> > > > > > > >> > >>> > >> > > > > > > large with the same batch size. At >> > > > LinkedIn, >> > > > > > our >> > > > > > > >> batch >> > > > > > > >> > >>> size >> > > > > > > >> > >>> > is >> > > > > > > >> > >>> > >> > > > > configured >> > > > > > > >> > >>> > >> > > > > > > to 64 KB because of this. I think we >> > may >> > > > > > actually >> > > > > > > >> have >> > > > > > > >> > >>> > better >> > > > > > > >> > >>> > >> > > > batching >> > > > > > > >> > >>> > >> > > > > if >> > > > > > > >> > >>> > >> > > > > > > we just use the uncompressed message >> > size >> > > > and >> > > > > > 800 >> > > > > > > >> KB >> > > > > > > >> > >>> batch >> > > > > > > >> > >>> > >> size. >> > > > > > > >> > >>> > >> > > > > > > >> > > > > > > >> > >>> > >> > > > > > > We did not think about loosening the >> > > > message >> > > > > > size >> > > > > > > >> > >>> > restriction, >> > > > > > > >> > >>> > >> > but >> > > > > > > >> > >>> > >> > > > that >> > > > > > > >> > >>> > >> > > > > > > sounds a viable solution given that >> the >> > > > > > consumer >> > > > > > > >> now >> > > > > > > >> > can >> > > > > > > >> > >>> > fetch >> > > > > > > >> > >>> > >> > > > > oversized >> > > > > > > >> > >>> > >> > > > > > > messages. One concern would be that >> on >> > > the >> > > > > > broker >> > > > > > > >> side >> > > > > > > >> > >>> > >> oversized >> > > > > > > >> > >>> > >> > > > > messages >> > > > > > > >> > >>> > >> > > > > > > will bring more memory pressure. >> With >> > > > KIP-92, >> > > > > > we >> > > > > > > >> may >> > > > > > > >> > >>> > mitigate >> > > > > > > >> > >>> > >> > that, >> > > > > > > >> > >>> > >> > > > but >> > > > > > > >> > >>> > >> > > > > > the >> > > > > > > >> > >>> > >> > > > > > > memory allocation for large messages >> > may >> > > > not >> > > > > be >> > > > > > > >> very >> > > > > > > >> > GC >> > > > > > > >> > >>> > >> > friendly. I >> > > > > > > >> > >>> > >> > > > > need >> > > > > > > >> > >>> > >> > > > > > to >> > > > > > > >> > >>> > >> > > > > > > think about this a little more. >> > > > > > > >> > >>> > >> > > > > > > >> > > > > > > >> > >>> > >> > > > > > > Thanks, >> > > > > > > >> > >>> > >> > > > > > > >> > > > > > > >> > >>> > >> > > > > > > Jiangjie (Becket) Qin >> > > > > > > >> > >>> > >> > > > > > > >> > > > > > > >> > >>> > >> > > > > > > >> > > > > > > >> > >>> > >> > > > > > > On Wed, Feb 22, 2017 at 8:57 PM, Jay >> > > Kreps >> > > > < >> > > > > > > >> > >>> > j...@confluent.io> >> > > > > > > >> > >>> > >> > > wrote: >> > > > > > > >> > >>> > >> > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > Hey Becket, >> > > > > > > >> > >>> > >> > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > I get the problem we want to solve >> > with >> > > > > this, >> > > > > > > >> but I >> > > > > > > >> > >>> don't >> > > > > > > >> > >>> > >> think >> > > > > > > >> > >>> > >> > > > this >> > > > > > > >> > >>> > >> > > > > is >> > > > > > > >> > >>> > >> > > > > > > > something that makes sense as a >> user >> > > > > > controlled >> > > > > > > >> knob >> > > > > > > >> > >>> that >> > > > > > > >> > >>> > >> > > everyone >> > > > > > > >> > >>> > >> > > > > > > sending >> > > > > > > >> > >>> > >> > > > > > > > data to kafka has to think about. >> It >> > is >> > > > > > > >> basically a >> > > > > > > >> > >>> bug, >> > > > > > > >> > >>> > >> right? >> > > > > > > >> > >>> > >> > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > First, as a technical question is >> it >> > > true >> > > > > > that >> > > > > > > >> using >> > > > > > > >> > >>> the >> > > > > > > >> > >>> > >> > > > uncompressed >> > > > > > > >> > >>> > >> > > > > > > size >> > > > > > > >> > >>> > >> > > > > > > > for batching actually guarantees >> that >> > > you >> > > > > > > observe >> > > > > > > >> > the >> > > > > > > >> > >>> > >> limit? I >> > > > > > > >> > >>> > >> > > > think >> > > > > > > >> > >>> > >> > > > > > that >> > > > > > > >> > >>> > >> > > > > > > > implies that compression always >> makes >> > > the >> > > > > > > >> messages >> > > > > > > >> > >>> > smaller, >> > > > > > > >> > >>> > >> > > which i >> > > > > > > >> > >>> > >> > > > > > think >> > > > > > > >> > >>> > >> > > > > > > > usually true but is not >> guaranteed, >> > > > right? >> > > > > > e.g. >> > > > > > > >> if >> > > > > > > >> > >>> someone >> > > > > > > >> > >>> > >> > > encrypts >> > > > > > > >> > >>> > >> > > > > > their >> > > > > > > >> > >>> > >> > > > > > > > data which tends to randomize it >> and >> > > then >> > > > > > > enables >> > > > > > > >> > >>> > >> > compressesion, >> > > > > > > >> > >>> > >> > > it >> > > > > > > >> > >>> > >> > > > > > could >> > > > > > > >> > >>> > >> > > > > > > > slightly get bigger? >> > > > > > > >> > >>> > >> > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > I also wonder if the rejected >> > > > alternatives >> > > > > > you >> > > > > > > >> > >>> describe >> > > > > > > >> > >>> > >> > couldn't >> > > > > > > >> > >>> > >> > > be >> > > > > > > >> > >>> > >> > > > > > made >> > > > > > > >> > >>> > >> > > > > > > to >> > > > > > > >> > >>> > >> > > > > > > > work: basically try to be a bit >> > better >> > > at >> > > > > > > >> estimation >> > > > > > > >> > >>> and >> > > > > > > >> > >>> > >> > recover >> > > > > > > >> > >>> > >> > > > when >> > > > > > > >> > >>> > >> > > > > > we >> > > > > > > >> > >>> > >> > > > > > > > guess wrong. I don't think the >> memory >> > > > usage >> > > > > > > >> should >> > > > > > > >> > be >> > > > > > > >> > >>> a >> > > > > > > >> > >>> > >> > problem: >> > > > > > > >> > >>> > >> > > > > isn't >> > > > > > > >> > >>> > >> > > > > > it >> > > > > > > >> > >>> > >> > > > > > > > the same memory usage the >> consumer of >> > > > that >> > > > > > > topic >> > > > > > > >> > would >> > > > > > > >> > >>> > need? >> > > > > > > >> > >>> > >> > And >> > > > > > > >> > >>> > >> > > > > can't >> > > > > > > >> > >>> > >> > > > > > > you >> > > > > > > >> > >>> > >> > > > > > > > do the splitting and recompression >> > in a >> > > > > > > streaming >> > > > > > > >> > >>> fashion? >> > > > > > > >> > >>> > >> If >> > > > > > > >> > >>> > >> > we >> > > > > > > >> > >>> > >> > > an >> > > > > > > >> > >>> > >> > > > > > make >> > > > > > > >> > >>> > >> > > > > > > > the estimation rate low and the >> > > recovery >> > > > > cost >> > > > > > > is >> > > > > > > >> > just >> > > > > > > >> > >>> ~2x >> > > > > > > >> > >>> > >> the >> > > > > > > >> > >>> > >> > > > normal >> > > > > > > >> > >>> > >> > > > > > cost >> > > > > > > >> > >>> > >> > > > > > > > for that batch that should be >> totally >> > > > fine, >> > > > > > > >> right? >> > > > > > > >> > >>> (It's >> > > > > > > >> > >>> > >> > > > technically >> > > > > > > >> > >>> > >> > > > > > true >> > > > > > > >> > >>> > >> > > > > > > > you might have to split more than >> > once, >> > > > but >> > > > > > > since >> > > > > > > >> > you >> > > > > > > >> > >>> > halve >> > > > > > > >> > >>> > >> it >> > > > > > > >> > >>> > >> > > each >> > > > > > > >> > >>> > >> > > > > > time >> > > > > > > >> > >>> > >> > > > > > > I >> > > > > > > >> > >>> > >> > > > > > > > think should you get a number of >> > > halvings >> > > > > > that >> > > > > > > is >> > > > > > > >> > >>> > >> logarithmic >> > > > > > > >> > >>> > >> > in >> > > > > > > >> > >>> > >> > > > the >> > > > > > > >> > >>> > >> > > > > > miss >> > > > > > > >> > >>> > >> > > > > > > > size, which, with better >> estimation >> > > you'd >> > > > > > hope >> > > > > > > >> would >> > > > > > > >> > >>> be >> > > > > > > >> > >>> > >> super >> > > > > > > >> > >>> > >> > > duper >> > > > > > > >> > >>> > >> > > > > > > small). >> > > > > > > >> > >>> > >> > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > Alternatively maybe we could work >> on >> > > the >> > > > > > other >> > > > > > > >> side >> > > > > > > >> > >>> of the >> > > > > > > >> > >>> > >> > > problem >> > > > > > > >> > >>> > >> > > > > and >> > > > > > > >> > >>> > >> > > > > > > try >> > > > > > > >> > >>> > >> > > > > > > > to make it so that a small miss on >> > > > message >> > > > > > size >> > > > > > > >> > isn't >> > > > > > > >> > >>> a >> > > > > > > >> > >>> > big >> > > > > > > >> > >>> > >> > > > problem. >> > > > > > > >> > >>> > >> > > > > I >> > > > > > > >> > >>> > >> > > > > > > > think original issue was that max >> > size >> > > > and >> > > > > > > fetch >> > > > > > > >> > size >> > > > > > > >> > >>> were >> > > > > > > >> > >>> > >> > > tightly >> > > > > > > >> > >>> > >> > > > > > > coupled >> > > > > > > >> > >>> > >> > > > > > > > and the way memory in the consumer >> > > worked >> > > > > you >> > > > > > > >> really >> > > > > > > >> > >>> > wanted >> > > > > > > >> > >>> > >> > fetch >> > > > > > > >> > >>> > >> > > > > size >> > > > > > > >> > >>> > >> > > > > > to >> > > > > > > >> > >>> > >> > > > > > > > be as small as possible because >> you'd >> > > use >> > > > > > that >> > > > > > > >> much >> > > > > > > >> > >>> memory >> > > > > > > >> > >>> > >> per >> > > > > > > >> > >>> > >> > > > > fetched >> > > > > > > >> > >>> > >> > > > > > > > partition and the consumer would >> get >> > > > stuck >> > > > > if >> > > > > > > its >> > > > > > > >> > >>> fetch >> > > > > > > >> > >>> > size >> > > > > > > >> > >>> > >> > > wasn't >> > > > > > > >> > >>> > >> > > > > big >> > > > > > > >> > >>> > >> > > > > > > > enough. I think we made some >> progress >> > > on >> > > > > that >> > > > > > > >> issue >> > > > > > > >> > >>> and >> > > > > > > >> > >>> > >> maybe >> > > > > > > >> > >>> > >> > > more >> > > > > > > >> > >>> > >> > > > > > could >> > > > > > > >> > >>> > >> > > > > > > be >> > > > > > > >> > >>> > >> > > > > > > > done there so that a small bit of >> > > > fuzziness >> > > > > > > >> around >> > > > > > > >> > the >> > > > > > > >> > >>> > size >> > > > > > > >> > >>> > >> > would >> > > > > > > >> > >>> > >> > > > not >> > > > > > > >> > >>> > >> > > > > > be >> > > > > > > >> > >>> > >> > > > > > > an >> > > > > > > >> > >>> > >> > > > > > > > issue? >> > > > > > > >> > >>> > >> > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > -Jay >> > > > > > > >> > >>> > >> > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > On Tue, Feb 21, 2017 at 12:30 PM, >> > > Becket >> > > > > Qin >> > > > > > < >> > > > > > > >> > >>> > >> > > becket....@gmail.com >> > > > > > > >> > >>> > >> > > > > >> > > > > > > >> > >>> > >> > > > > > > wrote: >> > > > > > > >> > >>> > >> > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > > Hi folks, >> > > > > > > >> > >>> > >> > > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > > I would like to start the >> > discussion >> > > > > thread >> > > > > > > on >> > > > > > > >> > >>> KIP-126. >> > > > > > > >> > >>> > >> The >> > > > > > > >> > >>> > >> > KIP >> > > > > > > >> > >>> > >> > > > > > propose >> > > > > > > >> > >>> > >> > > > > > > > > adding a new configuration to >> > > > > KafkaProducer >> > > > > > > to >> > > > > > > >> > allow >> > > > > > > >> > >>> > >> batching >> > > > > > > >> > >>> > >> > > > based >> > > > > > > >> > >>> > >> > > > > > on >> > > > > > > >> > >>> > >> > > > > > > > > uncompressed message size. >> > > > > > > >> > >>> > >> > > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > > Comments are welcome. >> > > > > > > >> > >>> > >> > > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > > The KIP wiki is following: >> > > > > > > >> > >>> > >> > > > > > > > > https://cwiki.apache.org/confl >> > > > > > > >> > >>> uence/display/KAFKA/KIP- >> > > > > > > >> > >>> > >> > > > > > > > > 126+-+Allow+KafkaProducer+to+b >> > > > > > > >> > >>> > >> atch+based+on+uncompressed+siz >> > > > > > > >> > >>> > >> > e >> > > > > > > >> > >>> > >> > > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > > Thanks, >> > > > > > > >> > >>> > >> > > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > > Jiangjie (Becket) Qin >> > > > > > > >> > >>> > >> > > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > > >> > > > > > > >> > >>> > >> > > > > > > >> > > > > > > >> > >>> > >> > > > > > >> > > > > > > >> > >>> > >> > > > > >> > > > > > > >> > >>> > >> > > > >> > > > > > > >> > >>> > >> > > > >> > > > > > > >> > >>> > >> > > > >> > > > > > > >> > >>> > >> > > > -- >> > > > > > > >> > >>> > >> > > > -Regards, >> > > > > > > >> > >>> > >> > > > Mayuresh R. Gharat >> > > > > > > >> > >>> > >> > > > (862) 250-7125 >> > > > > > > >> > >>> > >> > > > >> > > > > > > >> > >>> > >> > > >> > > > > > > >> > >>> > >> > >> > > > > > > >> > >>> > >> > >> > > > > > > >> > >>> > >> > >> > > > > > > >> > >>> > >> > -- >> > > > > > > >> > >>> > >> > -Regards, >> > > > > > > >> > >>> > >> > Mayuresh R. Gharat >> > > > > > > >> > >>> > >> > (862) 250-7125 >> > > > > > > >> > >>> > >> > >> > > > > > > >> > >>> > >> >> > > > > > > >> > >>> > > >> > > > > > > >> > >>> > > >> > > > > > > >> > >>> > >> > > > > > > >> > >>> >> > > > > > > >> > >> >> > > > > > > >> > >> >> > > > > > > >> > > >> > > > > > > >> > >> > > > > > > >> >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> > >