Spark Streaming中有spark.streaming.kafka.maxRatePerPartition
属性,它限制每秒从Apache Kafka读取的消息数。 Storm有类似的属性吗?
答案 0 :(得分:1)
我认为没有限制每秒邮件数量的属性。
如果您使用new kafka client(kafka 0.9)喷口,您可以设置' MaxUncommittedOffsets
'这将限制未通知的偏移量(即机上信息的数量)。
但是,如果您仍在使用旧的kafka spout(0.9之前的kafka),则可以使用storm属性'topology.max.spout.pending'
来限制每个spout任务的未确认消息总数。
答案 1 :(得分:0)
有一种解决方法,有助于在Storm中实现这一点。您可以简单地为KafkaSpout编写以下包装器,它将计算每秒spout发出的消息数。当它达到所需的数字(Config.RATE
)时,它什么都不返回。
public class MyKafkaSpout extends KafkaSpout {
private int counter = 0;
private int currentSecond = 0;
private final int tuplesPerSecond = Config.RATE;
public MyKafkaSpout(SpoutConfig spoutConf) {
super(spoutConf);
}
@Override
public void nextTuple() {
if (counter == tuplesPerSecond) {
int newSecond = (int) TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis());
if (newSecond <= currentSecond) {
return;
}
counter = 0;
currentSecond = newSecond;
}
++counter;
super.nextTuple();
}
}