如何降低Kafka Spout的摄入率并启用背压?

时间:2018-02-23 05:00:06

标签: apache-kafka apache-storm kafka-consumer-api confluent-kafka backpressure

我使用的是storm-kafka-client 1.1.1和storm-core 1.1.0。

我已经调整了以下参数,但无法启用背压并降低kafka-spout的摄入率。

每秒消耗 2000 消息。

下游Bolt需要 50 ms 来处理一条消息,即每秒处理20条消息。

spout发出的元组和bolt执行的元组之间的延迟随着时间的推移而增加。

**如何让Spout读取每秒20条消息并保持其消耗率与Bolt的执行率相同**

   **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**) ) ;

我不确定应为 TOPOLOGY_SPOUT_WAIT_STRATEGY BACKPRESSURE_DISRUPTOR_HIGH_WATERMARK

设置哪些值

那么上述参数和值的组合有助于控制鲸鱼喷口的摄取率吗?

任何建议都将受到高度赞赏。

由于 卡尼斯卡

1 个答案:

答案 0 :(得分:2)

TOPOLOGY_SPOUT_WAIT_STRATEGY仅在要求喷口发出新元组时使用,并且它不会发出任何内容(即,如果没有新消息)。它不应该对背压产生任何影响。

我对目前的背压实施并不太熟悉,但我非常确定您需要使用TOPOLOGY_BACKPRESSURE_ENABLE明确启用它。

BACKPRESSURE_DISRUPTOR_HIGH_WATERMARK是一个比率,因此,如果您将其设置为例如0.9当螺栓的输入队列满90%时,它会对喷口进行节流。您可以在https://github.com/apache/storm/blob/1.1.x-branch/storm-core/src/jvm/org/apache/storm/Config.java中找到设置文档,在https://github.com/apache/storm/blob/1.1.x-branch/conf/defaults.yaml

找到默认值

为了避免一次发出过多的元组,我认为你应该将topology.max.spout.pending设置为一些合理数量的元组(可能是几百个?)。确保将拓扑设置为启用acking(即将topology.enable.message.timeouts设置为true)。否则,max spout pending无效。

不确定为什么要更改执行程序缓冲区大小。

您还应该考虑将Storm和storm-kafka-client升级到至少1.1.2。最近对storm-kafka-client进行了很多修复,如果升级,你可能会更容易使用它。

我不确定代码中的星号是什么意思?