java组协调员不可用卡夫卡
当我给卡夫卡写一个主题时,有一个错误:Offset commit failed
:
2016-10-29 14:52:56.387 INFO [nioEventLoopGroup-3-1][org.apache.kafka.common.utils.AppInfoParser$AppInfo:82] - Kafka version : 0.9.0.1
2016-10-29 14:52:56.387 INFO [nioEventLoopGroup-3-1][org.apache.kafka.common.utils.AppInfoParser$AppInfo:83] - Kafka commitId : 23c69d62a0cabf06
2016-10-29 14:52:56.409 ERROR [nioEventLoopGroup-3-1][org.apache.kafka.clients.consumer.internals.ConsumerCoordinator$DefaultOffsetCommitCallback:489] - Offset commit failed.
org.apache.kafka.common.errors.GroupCoordinatorNotAvailableException: The group coordinator is not available.
2016-10-29 14:52:56.519 WARN [kafka-producer-network-thread | producer-1][org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater:582] - Error while fetching metadata with correlation id 0 : {0085000=LEADER_NOT_AVAILABLE}
2016-10-29 14:52:56.612 WARN [pool-6-thread-1][org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater:582] - Error while fetching metadata with correlation id 1 : {0085000=LEADER_NOT_AVAILABLE}
当使用命令创建一个新主题时,它是确定的
./kafka-topics.sh --zookeeper localhost:2181 --create --topic test1 --partitions 1 --replication-factor 1 --config max.message.bytes=64000 --config flush.messages=1
这是使用Java的生产者代码:
public void create() {
Properties props = new Properties();
props.clear();
String producerServer = PropertyReadHelper.properties.getProperty("kafka.producer.bootstrap.servers");
String zookeeperConnect = PropertyReadHelper.properties.getProperty("kafka.producer.zookeeper.connect");
String metaBrokerList = PropertyReadHelper.properties.getProperty("kafka.metadata.broker.list");
props.put("bootstrap.servers", producerServer);
props.put("zookeeper.connect", zookeeperConnect);//声明ZooKeeper
props.put("metadata.broker.list", metaBrokerList);//声明kafka broker
props.put("acks", "all");
props.put("retries", 0);
props.put("batch.size", 1000);
props.put("linger.ms", 10000);
props.put("buffer.memory", 10000);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producer = new KafkaProducer<String, String>(props);
}
哪里错了
# 1 楼答案
查看日志,问题在于集群可能没有连接到节点,而节点是zookeeper中已知的给定主题的唯一副本
您可以使用给定的命令进行检查:
kafka-topics.sh --describe --zookeeper localhost:2181 --topic test1
或使用卡夫卡卡特:
kafkacat -L -b localhost:9092
示例结果:
若您有单节点集群,那个么代理id(1001)应该和topic1分区的前导相匹配
但是正如您所看到的,topic1的唯一已知副本是1001,现在不可用,因此不可能在不同的节点上重新创建topic
问题的根源可能是代理id的自动生成(如果您没有指定
broker.id
或设置为-1
)然后在启动代理(同一个代理)时,您可能会收到与以前不同的代理id,并且与zookeeper中标记的id不同(这就是为什么分区删除会有所帮助,但这不是生产解决方案的原因)
解决方案可能是设置代理。节点配置中的id值为固定值-根据文档,应在生产环境中执行此操作:
broker.id=1
如果一切正常,你应该收到这样的东西:
卡夫卡文献: https://kafka.apache.org/documentation/#prodconfig
# 2 楼答案
我的解决方案是,我必须确保
KAFKA_ADVERTISED_HOST_NAME
是服务器的正确IP地址# 3 楼答案
您好,您必须保持代码的卡夫卡副本和复制因子相同
对我来说,我保留了3个副本和3个复制因子
# 4 楼答案
我们在生产中也面临同样的问题。代码在很长一段时间内工作正常,突然我们遇到了这个异常
我们分析代码中没有问题。所以我们要求部署团队重新启动zookeeper。重新启动它解决了问题
# 5 楼答案
我面临着类似的问题。问题是,当您启动Kafka代理时,有一个属性与之关联,“Kafka\u偏移量\主题\复制\因子”。如果使用单节点群集,请确保将此属性设置为值“1”。因为它的默认值是3。这个改变解决了我的问题。(可以检查Kafka.properties文件中的值) 注:我使用的是confluent kafka版本4.0.0(confluent Inc/cp kafka:4.0.0)的基本图像