In one of our application, we have the following setting:
# kafka configuration
# ~~~~~
kafka {
# comma seperated list of brokers
# for e.g., "localhost:9092,localhost:9032"
brokers = "localhost:9092,localhost:9032"
topic = "asset-computed-telemetry"
isEnabled = true
# for a detailed list of configuration options see
# under New Producer Configs
# http://kafka.apache.org/082/documentation.html#producerconfigs
requestRequiredAcks = 1
requestTimeout = 3.seconds
bufferMemoryBytes = "33554432"
blockOnBufferFull = false
# setting this to 0 indicates that the producer will never
# block and will just drop messages once the queue buffer to
# kafka broker is full
queueEnqueTimeoutMs = 0.seconds
producerType = "async"
messageSendMaxRetries = 1
}
As you can see from the configuration is that, we have a buffer of 33 MB.
Now I have one topic on my broker and this topic has 20 partitions. So what
I do in my producer application is that I create 10 instances of my
Producer and I write to the topic.
So each producer instance gets a copy of this configuration. Does this mean
that I will reserve 33 times 10 instances = 330 MB os space just for the
buffer? What if I have more and more topics in the future? Will I use all
the memory only for the buffer?