I am using storm-kafka-client 1.1.1 and storm-core 1.1.0.
I have tuned the following params but not able to enable back-pressure and reduce ingestion rate of kafka-spout.
Spout consuming 2000 messages per sec.
Downstream Bolt takes 50 ms to process a message i.e. processes 20 messages per sec.
The lag between spout emitted tuples and bolt executed tuples increasing over time.
**How can I make Spout read say 20 messages per sec and keep its rate of consumption same as Bolt's rate of execution **
**Topology**
topology.max.spout.pending= **5** ,
topology.message.timeout.secs= **600** ,
topology.executor.send.buffer.size=**64** ,
topology.executor.receive.buffer.size=**64** ,
topology.transfer.buffer.size=**64**
**KafkaSpoutConfig**
setPollTimeoutMs(**200**) ,
setFirstPollOffsetStrategy(latest) ,
setMaxUncommittedOffsets(**2_000_000**) ,
setGroupId(groupName) ,
setProp("fetch.max.wait.ms",**1000**) ,
setProp("max.poll.records", **100**) ,
setMaxPartitionFectchBytes(**512**) ,
setProp("send.buffer.bytes", **512**) ,
setProp("receive.buffer.bytes", **512**) ,
setPartitionRefreshPeriodMs(30_000).setProp("enable.auto.commit", "true") ,
setProp("session.timeout.ms", "**60000**") ,
KafkaSpoutRetryExponentialBackoff.TimeInterval.microSeconds(**50**) ,
KafkaSpoutRetryExponentialBackoff.TimeInterval.milliSeconds(**5**) , 1 ,
KafkaSpoutRetryExponentialBackoff.TimeInterval.seconds(**1**) ) ;
I am not sure what values should be set for TOPOLOGY_SPOUT_WAIT_STRATEGY and BACKPRESSURE_DISRUPTOR_HIGH_WATERMARK
So what combination of above params and values can help control the spout ingestion rate ?
Any suggestion will be highly appreciated.
Thanks Kaniska