Hi, I can't see your images, they're not making it through the mailing
list, sorry.

On Tue, 2 Jun. 2020, 11:09 pm Vinicius Scheidegger, <
vinicius.scheideg...@gmail.com> wrote:

> Hi Liam,
>
> First of all, thanks for checking my doubt.
> I understand that the reason I notice this behavior is because our case
> differs from yours in one point: I'm not writing terabytes in a single day.
> I'm writing MB, but distribution matters in these MBs, this
> because processing in the consumer side is CPU intensive (complex machine
> learning algo), so a real equally distributed load is a requirement,
> otherwise messages start queuing (which is what I don't want).
>
> Our system is also in production and this bad distribution is generating
> queuing in some consumers while others are idle.
> I tried both approaches:
> Round Robbin - actually gives me a distributed load in a big time window,
> but as I grow the number of producers I get several messages in a single
> partition while others don't get anything.
> Hash of the key - here we used a random UUID as the key - still a bad
> distribution
>
>
> [image: image.png]
>
>
>
> When I start, let's say 10 producers, we can get 5 messages going to one
> partition while others have none - i understand that this is because the
> round robin is internal to the producer.
> [image: image.png]
>
> (The picture above is what I believe is happening)
>
>
> it would surprise me that this hasn't come up before, that's why I'm
> pretty sure I'm missing something here...
> We're currently analyzing some solutions, one of them is building our own
> partitioner with shared memory (yes, that's how far we got on this),
> although I believe a better solution would be to have this on Kafka broker
> side and not depend on custom code.
>
> [image: image.png]
> Above is the draft of one of our current ideas of a possible design. Based
> on the shared memory we could decide the partition and send the messages
> directly there (the number of producers, partitions and consumers here are
> simplified).
> This if we don't find a solution within Kafka to mitigate this
> distribution issue - even though the thought design imposes limits and add
> layers we didn't had in our initial design.
>
> My question is, do we really need to develop this??
> Is equal distribution in a scenario with multiple producers something that
> can be achieved in Kafka without custom development?
> Having never checked out the broker code when receiving a message - is
> partition definition even possible on the broker side?
> If this really does not exist, would a feature like that benefit other
> people, is it worth checking out instead of the above solution?
> Should I move this message to the dev forum? - no one gave me much
> attention there too (but maybe my messages are too big/boring - hahaha)
>
> Thanks
>
>
> On Tue, Jun 2, 2020 at 10:47 AM Liam Clarke-Hutchinson <
> liam.cla...@adscale.co.nz> wrote:
>
>> Hi Vinicius,
>>
>> As you note, the cluster doesn't load balance producers, it relies on them
>> using a partition strategy to do so.
>>
>> In production, I've never had actual broker load skew develop from
>> multiple
>> independent producers using round robining - and we're talking say 20 - 50
>> producers (depending on scaling) writing terabytes over a day.
>>
>> And load skew / hot brokers is something I monitor closely.
>>
>> The only time I've seen load skew is when a key based partition strategy
>> was used, and keys weren't evenly distributed.
>>
>> So in other words, in theory there's no guarantee, but in my experience,
>> round robining multiple producers works fine.
>>
>> Cheers,
>>
>> Liam Clarke
>>
>> On Mon, 1 Jun. 2020, 11:55 pm Vinicius Scheidegger, <
>> vinicius.scheideg...@gmail.com> wrote:
>>
>> > Hey guys, I need some help here...
>> >
>> > Is this a flaw in the design (maybe a discussion point for a KIP?), is
>> > Kafka not supposed to perform equal load balancing with multiple
>> producers
>> > or am I missing something (which is what I believe is happening)?
>> >
>> > On Wed, May 27, 2020 at 2:40 PM Vinicius Scheidegger <
>> > vinicius.scheideg...@gmail.com> wrote:
>> >
>> >> Does anyone know whether we could really have an "out of the box"
>> >> solution to do round robin over the partitions when we have multiple
>> >> producers?
>> >> By that I mean, a round robin on the broker side (or maybe some way to
>> >> synchronize all producers).
>> >>
>> >> Thank you,
>> >>
>> >> On Tue, May 26, 2020 at 1:41 PM Vinicius Scheidegger <
>> >> vinicius.scheideg...@gmail.com> wrote:
>> >>
>> >>> Yes, I checked it. The issue is that RoundRobbinPartitioner is bound
>> to
>> >>> the producer. In a scenario with multiple producers it doesn't
>> guarantee
>> >>> equal distribution - from what I understood and from my tests, the
>> >>> following situation happens with it:
>> >>>
>> >>> [image: image.png]
>> >>>
>> >>> Of course, the first partition is not always 1 and each producer may
>> >>> start in a different point in time, anyway my point is that it does
>> not
>> >>> guarantee equal distribution.
>> >>>
>> >>> The other option pointed out is to select the partition myself -
>> either
>> >>> a shared memory on the producers (assuming that this is possible - I
>> mean I
>> >>> would need to guarantee that producers CAN share a synchronized
>> memory) or
>> >>> include an intermediate topic with a single partition and a
>> >>> dispatcher/producer using RoundRobinPartitioner (but this would
>> include a
>> >>> single point of failure).
>> >>>
>> >>> [image: image.png]
>> >>> [image: image.png]
>> >>>
>> >>> None of these seem to be ideal as a Broker side round robin solution
>> >>> would.
>> >>> Am I missing something? Any other ideas?
>> >>>
>> >>> Thanks
>> >>>
>> >>> On Tue, May 26, 2020 at 11:34 AM M. Manna <manme...@gmail.com> wrote:
>> >>>
>> >>>> Hey Vinicius,
>> >>>>
>> >>>>
>> >>>> On Tue, 26 May 2020 at 10:27, Vinicius Scheidegger <
>> >>>> vinicius.scheideg...@gmail.com> wrote:
>> >>>>
>> >>>> > In a scenario with multiple independent producers (imagine
>> ephemeral
>> >>>> > dockers, that do not know the state of each other), what should be
>> the
>> >>>> > approach for the messages being sent to be equally distributed
>> over a
>> >>>> topic
>> >>>> > partition?
>> >>>> >
>> >>>> > From what I understood the partition election is always on the
>> >>>> Producer. Is
>> >>>> > this understanding correct?
>> >>>> >
>> >>>> > If that's the case, how should one achieve an equally distributed
>> load
>> >>>> > balancing (round robin) over the partitions in a scenario with
>> >>>> multiple
>> >>>> > producers?
>> >>>> >
>> >>>> > Thank you,
>> >>>> >
>> >>>> > Vinicius Scheidegger
>> >>>>
>> >>>>
>> >>>>  Have you checked RoundRobinPartitioner ? Also, you can always
>> specify
>> >>>> which partition you are writing to, so you can control the
>> partitioning
>> >>>> in
>> >>>> your way.
>> >>>>
>> >>>> Regards,
>> >>>>
>> >>>> Regards,
>> >>>>
>> >>>> >
>> >>>> >
>> >>>>
>> >>>
>>
>

Reply via email to