Search code examples
apache-kafkakafka-consumer-apikafka-producer-api

Increase in Consumer Groups will increase delay in Producer Response?


I have an use case where i have to test the saturation point of my Kafka (3 node) Cluster with high no of Consumer groups.(To find the saturation point for our production use case) Producer ack=all. I created many consumer groups more than 10000 , there is no Problem(No load Just created Consumer groups not consuming).

So i started load testing, I created 3 topics (1 partition) with 3 replication factor,Each broker is leader for a topic(i made sure by kafka-topic describe).
I planned to constantly produce 4.5MBps for each topic and increase consumer groups from zero.100KB size of 45 records to a topic.

When i produce data for no consumer groups in the cluster the producer response time is just 2 ms/record.
For 100 Consumer groups per record it taking 7ms.
When increasing consumer groups for a topic to 200 the time increasing to 28-30ms with that i cant able to produce 4.5MBps .When increasing more Consumer groups the producer response is decreasing.

The broker have 15 I/O threads and 10 Network threads.

Analysis done for above scenario

  • With grafana JMX metrics there is no spike in request and response queue.
  • There is no delay in I/O picking up by checking request queue time.
  • The network thread average idle percentage is 0.7 so network thread is not a bottleneck.
  • When reading some articles Socket buffer can be bottle neck for high bandwidth throughput so increased it from 100KB to 4MB but no use.
  • There is no spike in GC,file descriptor,heap space

By this there is no problem with I/O threads,Network Threads,Socket Buffer

So what can be a bottleneck here?
I thought it would be because of producing data to single partition. So i created more topic with 1 partition and parallel try to produced 4.5MBps per each topic ended up same delay in producer response.

What can be really bottleneck here? Because producer is decoupled from Consumer.
But when i increasing more no of Consumer groups to broker, The producer response why affecting?


Solution

  • As we know the common link between the Producer and consumer is Partition where the data remains and is being read and Write by consumers and producers respectively There are 3 things that we need to consider here

    1. Relationship between Producer to Partition : I understand that you need to have the correct no. of partition created to send some message with consistent speed and here is the calculation we use to optimize the number of partitions for a Kafka implementation.

    Partitions = Desired Throughput / Partition Speed

    Conservatively, you can estimate that a single partition for a single Kafka topic runs at 10 MB/s.

    As an example, if your desired throughput is 5 TB per day. That figure comes out to about 58 MB/s. Using the estimate of 10 MB/s per partition, this example implementation would require 6 partitions. I believe its not about creating more topics with one partition but it is about creating a topic with optimized no of partitions

    Since you are sending the message consistently with 1 partition then this could be the issue. Also since you have chosen acks=all, this can be the reason for increased latency that every message that you pass to the topic has to make sure that it gets the acknowledgment from leader as well as the followers hence introducing the latency. As the message keeps on increasing, its likely that there must be some increase in latency factor as well. This could be in actual the reason for increased response time for producer. To have that addressed you can do below things:

    a) Send the Messages in Batch
    b) Compress the Data

    1. Partition : Each partition has a leader. Also, with multiple replicas, most partitions are written into leaders. However, if the leaders are not balanced properly, it might be possible that one might be overworked, compared to others causing the latency again. So again the optimized number of partitions are the key factors.

    2. Relationship between consumer to Partition : From your example I understand that you are increasing the consumer groups from Zero to some number. Please note that when you keep on increasing the consumer group , there is the rebalancing of the partition that takes place. Rebalancing is the process to map each partition to precisely one consumer. While Kafka is rebalancing, all involved consumers processing is blocked

    If you want to get more details

    https://medium.com/bakdata/solving-my-weird-kafka-rebalancing-problems-c05e99535435

    And when that rebalancing happens, there is the partition movement as well that happens which is nothing but again an overhead.

    In conclusion I understand that the producer throughput might have been increasing because of below factors

    a) No of partitions not getting created correctly w.r.t. messaging speed
    b) Messages not being send in Batches with proper size and with a proper compression type
    c) Increase in consumer group causing more of rebalancing hence movement of partition
    d) Since due to rebalancing the consumer, the consumer blocks the functioning for partition reassignment we can say the message fetching also gets stopped hence causing the partition to store more of the data while accepting the new Data.
    e) Acks= all which should be causing latency as well

    In continuation to your query, trying to visualize it

    enter image description here

    Let us assume as per your condition

    1 Topic having 1 partition(with RF as 3) and 1 to 100/500 consumers groups having 1 single consumer in each group(No rebalancing) subscribing to same topic

    Here only one server(Being leader) in the cluster would be actively participating to do following functions that can result in the processing delays since the other 2 brokers are just the followers and will act if the leader goes down.