我在java中有KafkaConsumer
的实现,目前它永远不会退出.poll
方法。当我在调试模式下深入查看源代码时,我发现它在AbstractCoordinator.ensureCoordinatorKnown()
中的while循环中陷入困境,因为从未找到协调器。
循环中从sendGroupMetadataRequest()
返回的未来首次使用org.apache.kafka.clients.consumer.internals.SendFailedException
失败,然后随后org.apache.kafka.common.errors.GroupCoordinatorNotAvailableException: The group coordinator is not available.
失败。有谁知道为什么会发生这种情况?
如果我使用控制台生产者/消费者,我能够成功发送和接收消息,只有当我使用我的KafkaConsumer实现时。此外,消费者确实在我的两台服务器上工作,所以我知道它不是消费者的实现。
以下是我的消费者创建的属性:
Properties props = new Properties();
props.put("bootstrap.servers", "myserver:9000);
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("group.id", groupId);
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "1000");
props.put("session.timeout.ms", "30000");
修改
主题肯定是在消费者开始之前创建的。
编辑2:
我删除了我的集群中的所有代理并重新创建它们,现在我在另一个点上失败了。在AbstractCoordinator.ensureActiveGroup()
尝试重新加入时,从performGroupJoin()
返回的未来会多次失败并显示org.apache.kafka.common.errors.NotCoordinatorForGroupException: This is not the correct coordinator for this group.
。仍然不确定发生了什么。
编辑3:
我删除了代理并使用不同的id重新创建它们,现在.poll()
方法正在返回并且它已成功使用消息。我仍然想知道为什么它首先失败,所以我可以确保它不会再次发生。
答案 0 :(得分:0)
删除经纪人并创建新的经纪人解决了这个问题。尽管如此,仍然不确定经纪人是否出错。