Kafka Stream - CommitFailedException:由于该组已经重新平衡并将分区分配给另一个成员,因此无法完成提交

时间:2017-08-09 16:04:23

标签: apache-kafka

我正在运行一个Kafka Stream应用程序,该应用程序使用来自2个主题的数据并将加入/合并的结果输出到3个主题中。 kafka主题有15个分区和3个复制因子。我们有5个卡夫卡经纪人和5个动物园管理员。 我正在运行15个Kafka Stream应用程序实例,因此每个应用程序可以有1个分区。 Kafka版本 - 0.11.0.0

我在我的kafka流应用程序中收到以下异常:

  

org.apache.kafka.clients.consumer.CommitFailedException:提交不能   完成后,该组已经重新平衡并分配了   分区到另一个成员。这意味着之间的时间   后续调用poll()的时间比配置的长   max.poll.interval.ms,通常意味着poll循环   花太多时间留言处理。你也可以解决这个问题   通过增加会话超时或减少最大大小   使用max.poll.records在poll()中返回批处理。           在org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.sendOffsetCommitRequest(ConsumerCoordinator.java:725)           在org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.commitOffsetsSync(ConsumerCoordinator.java:604)           在org.apache.kafka.clients.consumer.KafkaConsumer.commitSync(KafkaConsumer.java:1173)           在org.apache.kafka.streams.processor.internals.StreamTask.commitOffsets(StreamTask.java:307)           在org.apache.kafka.streams.processor.internals.StreamTask.access $ 000(StreamTask.java:49)           在org.apache.kafka.streams.processor.internals.StreamTask $ 1.run(StreamTask.java:268)           在org.apache.kafka.streams.processor.internals.StreamsMetricsImpl.measureLatencyNs(StreamsMetricsImpl.java:187)           在org.apache.kafka.streams.processor.internals.StreamTask.commitImpl(StreamTask.java:259)           在org.apache.kafka.streams.processor.internals.StreamTask.suspend(StreamTask.java:362)           在org.apache.kafka.streams.processor.internals.StreamTask.suspend(StreamTask.java:346)           在org.apache.kafka.streams.processor.internals.StreamThread $ 3.apply(StreamThread.java:1118)           at org.apache.kafka.streams.processor.internals.StreamThread.performOnStreamTasks(StreamThread.java:1448)           在org.apache.kafka.streams.processor.internals.StreamThread.suspendTasksAndState(StreamThread.java:1110)           在org.apache.kafka.streams.processor.internals.StreamThread.access $ 1800(StreamThread.java:73)           at org.apache.kafka.streams.processor.internals.StreamThread $ RebalanceListener.onPartitionsRevoked(StreamThread.java:218)           在org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.onJoinPrepare(ConsumerCoordinator.java:422)           at org.apache.kafka.clients.consumer.internals.AbstractCoordinator.joinGroupIfNeeded(AbstractCoordinator.java:353)           在org.apache.kafka.clients.consumer.internals.AbstractCoordinator.ensureActiveGroup(AbstractCoordinator.java:310)           在org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.poll(ConsumerCoordinator.java:297)           在org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1078)           在org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1043)           在org.apache.kafka.streams.processor.internals.StreamThread.pollRequests(StreamThread.java:582)           在org.apache.kafka.streams.processor.internals.StreamThread.runLoop(StreamThread.java:553)           在org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:527)   2017-08-09 14:50:49 - [ERROR] [click-live-StreamThread-1]   [org.apache.kafka.streams.processor.internals.StreamThread.performOnStreamTasks:1453]   :

有人可以帮助解决原因和解决方案吗?

另外,当我的kafka经纪人中有1人失败时,我的kafka流应用程序没有连接到其他经纪人? 我已设置func generate<T: RawRepresentable>(using index: Int) -> T where T.RawValue == Int { guard let output = T(rawValue: index) else { preconditionFailure() } return output }

1 个答案:

答案 0 :(得分:0)

根据信息,这是最有可能的解决途径:

尝试遵循消息中的建议:

“您可以通过增加会话超时时间或使用 max.poll.records 减少 poll() 中返回的批次的最大大小来解决此问题”