Java 阿帕奇风暴卡夫卡喷口滞后问题
我正在使用Storm 1.1.2和Kafka 0.11构建一个Java Spring应用程序,该应用程序将在Docker容器中启动 我的拓扑结构中的所有内容都按计划工作,但在卡夫卡的高负载下,卡夫卡延迟会随着时间越来越大 我的KafkaSpoutConfig:Java 阿帕奇风暴卡夫卡喷口滞后问题,java,spring,apache-kafka,apache-storm,apache-storm-topology,Java,Spring,Apache Kafka,Apache Storm,Apache Storm Topology,我正在使用Storm 1.1.2和Kafka 0.11构建一个Java Spring应用程序,该应用程序将在Docker容器中启动 我的拓扑结构中的所有内容都按计划工作,但在卡夫卡的高负载下,卡夫卡延迟会随着时间越来越大 我的KafkaSpoutConfig: KafkaSpoutConfig<String,String> spoutConf = KafkaSpoutConfig.builder("kafkaContainerName:9092", "myTopic")
KafkaSpoutConfig<String,String> spoutConf =
KafkaSpoutConfig.builder("kafkaContainerName:9092", "myTopic")
.setProp(ConsumerConfig.GROUP_ID_CONFIG, "myGroup")
.setProp(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, MyObjectDeserializer.class)
.build()
及
但我想这不是一个问题
我在Storm UI上看到,RouterBolt在高负载下的执行延迟为1.2ms,进程延迟为.03ms,这让我相信喷口是瓶颈。另外,并行性提示是25,因为“myTopic”有25个分区。谢谢 您可能会受到影响,这会导致喷口在每次排放时都进行相当昂贵的调用。请尝试升级到其中一个固定版本
编辑:修复程序实际上还没有发布。您可能仍然希望通过使用从源代码构建喷口来尝试修复,例如,构建1.1.4快照。感谢您的输入!如果我正确理解了这个问题,可以通过将我的处理保证更改为最多一次处理来解决。我只是试着在喷口配置上更改它,看看它是否有任何效果,但似乎没有效果。这不会解决阻塞问题吗?或者以其他方式减缓喷口的消耗?如果是这样,我将尝试查看1.1.4快照,尽管这可能会产生一些影响,但我不认为这是我看到的问题。我的卡夫卡喷口只能消耗约1600条消息/秒,延迟呈指数增长(奇怪的是,在某些分区上它增长得更快,但在另一些分区上它很低并且保持较低),我认为它影响到每个人。第一行中的昂贵调用是
kafkaConsumer.committed(tp)
。就是这样!这绝对削弱了我的拓扑上的吞吐量。非常感谢。
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("stormKafkaSpout", new KafkaSpout<String,String>(spoutConf), 25);
builder.setBolt("routerBolt", new RouterBolt(),25).shuffleGrouping("stormKafkaSpout");
Config conf = new Config();
conf.setNumWorkers(10);
conf.put(Config.STORM_ZOOKEEPER_SERVERS, ImmutableList.of("zookeeper"));
conf.put(Config.STORM_ZOOKEEPER_PORT, 2181);
conf.put(Config.NIMBUS_SEEDS, ImmutableList.of("nimbus"));
conf.put(Config.NIMBUS_THRIFT_PORT, 6627);
System.setProperty("storm.jar", "/opt/storm.jar");
StormSubmitter.submitTopology("topologyId", conf, builder.createTopology());
conf.setNumAckers(0);
conf.put(Config.TOPOLGY_ACKER_EXECUTORS, 0);