我有一个使用版本0.10.2.0
运行的Kafka Stream。一切看起来都很好,直到流只是停止接收新消息。
流状态为RUNNING
,日志中没有例外。使用this FAQ entry我检查了延迟并且它正在增加。
我的配置如下:
Properties props = new Properties();
props.put(StreamsConfig.TIMESTAMP_EXTRACTOR_CLASS_CONFIG,
CustomTimestampExtractor.class.getName());
props.put(StreamsConfig.APPLICATION_ID_CONFIG, streamName);
props.put(StreamsConfig.CLIENT_ID_CONFIG, streamName);
props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, myConfig.getBrokerList());
props.put(StreamsConfig.KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
props.put(StreamsConfig.VALUE_SERDE_CLASS_CONFIG, Serdes.ByteArray().getClass().getName());
props.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, myConfig.getCommitIntervalMs()); // 5000
props.put(StreamsConfig.METRICS_RECORDING_LEVEL_CONFIG, "DEBUG");
props.put(StreamsConfig.NUM_STREAM_THREADS_CONFIG, myConfig.getStreamThreadsCount()); // 1
props.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, myConfig.getMaxCacheBytes()); // 524_288_000L
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 50);
查看JMX指标,线程在那里并且正在运行,只是没有做任何事情......实例仍然卡住,所以我可以在需要时检查额外的东西。任何帮助表示赞赏
编辑(更多信息)
当我执行kafka-run-class kafka.tools.ConsumerOffsetChecker
时,owner
列显示"无"
编辑2
在一个停滞的实例上,我看到名为" pool-X-thread-Y" in" Park"州。健康的实例不会表现出相同的行为。
编辑3
我发现了一条非常有趣的信息,指标consumer-coordinator-metrics > heartbeat-response-time-max
(接收心跳请求响应所花费的最长时间)读取的是43,461秒(差不多12小时),这与挂起的时间一致。难道这不会以某种方式触发失败吗?