我在OpaqueTridentKafkaSpout上使用三叉戟拓扑。
我正在使用的TridentKafkaConfig的代码片段: -
OpaqueTridentKafkaSpout kafkaSpout = null;
TridentKafkaConfig spoutConfig = new TridentKafkaConfig(new ZkHosts("xxx.x.x.9:2181,xxx.x.x.1:2181,xxx.x.x.2:2181"), "topic_name");
spoutConfig.scheme = new SchemeAsMultiScheme(new StringScheme());
spoutConfig.fetchSizeBytes = 147483600;
kafkaSpout = new OpaqueTridentKafkaSpout(spoutConfig);
我从其中一个工作人员那里得到了这个运行时异常: -
java.lang.RuntimeException:storm.kafka.UpdateOffsetException at backtype.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:135) 在 backtype.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:106) 在 backtype.storm.disruptor $ consume_batch_when_available.invoke(disruptor.clj:80) 在 backtype.storm.daemon.executor $ fn_5694 $ fn5707 $ fn5758.invoke(executor.clj:819) 在backtype.storm.util $ async_loop $ fn545.invoke(util.clj:479)at at clojure.lang.AFn.run(AFn.java:22)at java.lang.Thread.run(Thread.java:745)引起: storm.kafka.UpdateOffsetException at storm.kafka.KafkaUtils.fetchMessages(KafkaUtils.java:186)at at storm.kafka.trident.TridentKafkaEmitter.fetchMessages(TridentKafkaEmitter.java:132) 在 storm.kafka.trident.TridentKafkaEmitter.doEmitNewPartitionBatch(TridentKafkaEmitter.java:113) 在 storm.kafka.trident.TridentKafkaEmitter.failFastEmitNewPartitionBatch(TridentKafkaEmitter.java:72) 在 storm.kafka.trident.TridentKafkaEmitter.emitNewPartitionBatch(TridentKafkaEmitter.java:79) 在 storm.kafka.trident.TridentKafkaEmitter.access $ 000(TridentKafkaEmitter.java:46) 在 storm.kafka.trident.TridentKafkaEmitter $ 1.emitPartitionBatch(TridentKafkaEmitter.java:204) 在 storm.kafka.trident.TridentKafkaEmitter $ 1.emitPartitionBatch(TridentKafkaEmitter.java:194) 在 storm.trident.spout.OpaquePartitionedTridentSpoutExecutor $ Emitter.emitBatch(OpaquePartitionedTridentSpoutExecutor.java:127) 在 storm.trident.spout.TridentSpoutExecutor.execute(TridentSpoutExecutor.java:82) 在 storm.trident.topology.TridentBoltExecutor.execute(TridentBoltExecutor.java:370) 在 backtype.storm.daemon.executor $ fn5694 $ tuple_action_fn5696.invoke(executor.clj:690) 在 backtype.storm.daemon.executor $ mk_task_receiver $ fn5615.invoke(executor.clj:436) 在 backtype.storm.disruptor $ clojure_handler $ reify_5189.onEvent(disruptor.clj:58) 在 backtype.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:127) ......还有6个
根据一些帖子,我尝试过设置spoutConfig: - spoutConfig.maxOffsetBehind = Long.MAX_VALUE; spoutConfig.startOffsetTime = kafka.api.OffsetRequest.EarliestTime(); 我的Kafka保留时间是默认值--128小时,即7天,kafka生产商向Storm / Trident拓扑发送6800条消息/秒。我已经浏览了大部分帖子,但似乎都没有解决这个问题。处理此问题的最佳方法是什么?
答案 0 :(得分:0)
我仍然不知道造成这个问题的原因。但基本上我们没有正确关闭风暴,动物园管理员和卡夫卡。这导致风暴拓扑失败,我们不得不拆除整个集群并重新构建它。更新到风暴0.10.0有助于解决其他一些问题。