【问题标题】:Kafka - Broker: Group coordinator not available卡夫卡 - 经纪人:组协调员不可用
【发布时间】:2018-11-29 19:33:41
【问题描述】:

我有以下结构:

zookeeper: 3.4.12
kafka: kafka_2.11-1.1.0
server1: zookeeper + kafka
server2: zookeeper + kafka
server3: zookeeper + kafka

通过 kafka-topics shell 脚本创建了具有复制因子 3 和分区 3 的主题。

./kafka-topics.sh --create --zookeeper localhost:2181 --topic test-flow --partitions 3 --replication-factor 3

并使用组 localConsumers。领导没问题时它工作正常。

./kafka-topics.sh --describe --zookeeper localhost:2181 --topic test-flow
Topic:test-flow PartitionCount:3    ReplicationFactor:3 Configs:
    Topic: test-flow    Partition: 0    Leader: 3   Replicas: 3,2,1 Isr: 3,2,1
    Topic: test-flow    Partition: 1    Leader: 1   Replicas: 1,3,2 Isr: 1,3,2
    Topic: test-flow    Partition: 2    Leader: 2   Replicas: 2,1,3 Isr: 2,1,3

消费者日志

Received FindCoordinator response ClientResponse(receivedTimeMs=1529508772673, latencyMs=217, disconnected=false, requestHeader=RequestHeader(apiKey=FIND_COORDINATOR, apiVersion=1, clientId=consumer-1, correlationId=0), responseBody=FindCoordinatorResponse(throttleTimeMs=0, errorMessage='null', error=NONE, node=myserver3:9092 (id: 3 rack: null)))

但如果领导者宕机 - 我在消费者中收到错误(systemctl stop kafka):

节点 3 不可用。好的

./kafka-topics.sh --describe --zookeeper localhost:2181 --topic test-flow
Topic:test-flow PartitionCount:3    ReplicationFactor:3 Configs:
    Topic: test-flow    Partition: 0    Leader: 2   Replicas: 3,2,1 Isr: 2,1
    Topic: test-flow    Partition: 1    Leader: 1   Replicas: 1,3,2 Isr: 1,2
    Topic: test-flow    Partition: 2    Leader: 2   Replicas: 2,1,3 Isr: 2,1

消费者日志

Received FindCoordinator response 
ClientResponse(receivedTimeMs=1529507314193, latencyMs=36, 
disconnected=false, 
requestHeader=RequestHeader(apiKey=FIND_COORDINATOR, apiVersion=1, 
clientId=consumer-1, correlationId=149), 
responseBody=FindCoordinatorResponse(throttleTimeMs=0, 
errorMessage='null', error=COORDINATOR_NOT_AVAILABLE, node=:-1 (id: -1 
rack: null)))

- Group coordinator lookup failed: The coordinator is not available.
- Coordinator discovery failed, refreshing metadata

在领导者关闭或与另一个消费者组重新连接之前,消费者无法连接。

不明白为什么会这样? 消费者应该重新平衡到另一个经纪人,但事实并非如此。

【问题讨论】:

    标签: java linux apache-kafka apache-zookeeper


    【解决方案1】:

    尝试将属性添加到 server.conf 并清理 zookeeper 缓存。 应该有帮助

    offsets.topic.replication.factor=3
    default.replication.factor=3
    

    此问题的根本原因是无法在节点之间分配主题偏移量。

    自动生成的主题: __consumer_offsets

    您可以通过以下方式查看

    $ ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic __consumer_offsets
    

    关注这篇文章: https://kafka.apache.org/documentation/#prodconfig

    默认情况下,它使用 RF - 1 创建 __consumer_offsets

    重要的是在 kafka/cluster 启动之前配置复制因子。 否则,它可能会在重新配置实例时带来一些问题,例如您的情况。

    【讨论】:

    • 我认为解释为什么会发生错误以及为什么我们应该这样配置比只提供解决方案更好。
    • @Oleksandr Loushkin 谢谢,你救了我的命。我正在运行一个内存中的 kafka 进行单元测试,而生产者和消费者都没有工作。然后我把offsets.topic.replication.factor的值改成1,就成功了。显然,如果启用了主题的自动创建主题,则此属性的默认值为 3。
    • 在最新版的kafka中,默认值已经改为3,但是需要手动配置。我使用了默认的 server.properties 文件,它的值设置为1,但属性上方的注释说使用值3 or above if it is not development server
    • 或者,在重新配置 Kafka 之后,您可以转到 ZooKeeper CLI,并运行 rmr /brokers/topics/__consumer_offsets 这将使用新的复制因子配置重新生成 __consumer_offsets。
    猜你喜欢
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 2018-11-08
    • 2020-07-21
    相关资源
    最近更新 更多