组协调器不可用-Kafka

新手上路,请多包涵

当我向kafka写主题时,出现错误: 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);
    }

哪里错了?

原文由 Dolphin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 683
2 个回答

我遇到了类似的问题。问题是当您启动 Kafka 代理时,有一个与之关联的属性“KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR”。如果您使用的是单节点集群,请确保将此属性设置为值“1”。因为它的默认值为 3。此更改解决了我的问题。 (您可以检查 Kafka.properties 文件中的值)注意:我使用的是 confluent kafka 版本 4.0.0 的基本图像(confluentinc/cp-kafka:4.0.0)

原文由 Vishal Akkalkote 发布,翻译遵循 CC BY-SA 4.0 许可协议

查看您的日志,问题是集群可能没有连接到节点,节点是 zookeeper 中唯一知道给定主题的副本。

您可以使用给定的命令检查它:

kafka-topics.sh --describe --zookeeper localhost:2181 --topic test1

或使用卡夫卡猫:

kafkacat -L -b localhost:9092

示例结果:

 Metadata for all topics (from broker 1003: localhost:9092/1003):
 1 brokers:
  broker 1003 at localhost:9092
 1 topics:
  topic "topic1" with 1 partitions:
    partition 0, leader -1, replicas: 1001, isrs: , Broker: Leader not available

如果您有单节点集群,那么代理 ID ( 1001 ) 应该匹配主题 1 分区的领导者。

但是正如您所见,唯一已知的 topic1 副本是 1001—— 现在不可用,因此不可能在不同的节点上重新创建主题。

问题的根源可能是 经纪人 ID 的自动生成(如果您没有指定 broker.id 或将其设置为 -1 )。

然后在启动代理(同一个代理) 时,您可能会收到与之前不同且与 zookeeper 中标记的不同的代理 ID (这是分区删除可以提供帮助的原因 - 但它不是生产解决方案)。

解决方案可能是 将节点配置中的 broker.id 值设置 为固定值——根据文档,它应该在生产环境中完成:

broker.id=1

如果一切正常你应该收到这样的东西:

 Metadata for all topics (from broker 1: localhost:9092/1001):
 1 brokers:
  broker 1 at localhost:9092
 1 topics:
  topic "topic1" with 1 partitions:
    partition 0, leader 1, replicas: 1, isrs: 1

Kafka 文档: https ://kafka.apache.org/documentation/#prodconfig

原文由 Rafał Solarski 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题