两个实例正在使用相同的groupid运行到同一Kafka使用者,我有4个主题,分区为0。以下是我的YAML配置:
consumer:
bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS}
group-id: group-id
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
enable-auto-commit: false
auto-offset-reset: earliest
max-poll-records: 10
max-poll-interval-ms: 660000
properties:
max:
poll:
interval:
ms: 300000
session:
timeout:
ms: 300000
heartbeat:
interval:
ms: 25000
listener:
ack-mode: MANUAL_IMMEDIATE
我正在观察两个实例的日志,当一个实例正常工作时,其他实例则抛出错误:org.apache.kafka.clients.consumer.CommitFailedException:由于该组已经重新平衡并分配了分区,因此提交无法完成另一个成员。这意味着后续调用poll()的时间比配置的max.poll.interval.ms更长,这通常意味着轮询循环花费了太多时间进行消息处理。您可以通过增加会话超时或通过使用max.poll.records减小poll()中返回的批处理的最大大小来解决此问题。
然后第二个正常,第一个抛出错误。并且在处理记录时,以下消息不断出现:
2020-05-05 15:57:52.874信息23804-[onnectorservice] oakccinternals.AbstractCoordinator:[Consumer clientId = consumer-2,groupId = group-id]尝试心跳失败,因为组正在重新平衡>
,但消息已成功处理。毕竟,我的所有消息均已成功处理。 我究竟需要更改以避免这些错误。
当一个使用者关闭并重新启动时,就会发生这种情况:只有错误出现在日志中。