【问题标题】:Kafka consumer group not reading from a single partitionKafka 消费者组未从单个分区读取
【发布时间】:2019-08-30 20:43:51
【问题描述】:

我有一个包含 3 个分区的 kafka 主题。我有一个消费组从上述主题消费,我注意到 3 个分区中有 2 个正在实时消费(滞后 0),而 1 个分区根本没有被消费。

我该如何诊断这个问题?

感谢输入/cmets。

【问题讨论】:

  • 消费者组的并发值是否为3?如果是,那么每个线程将在每个主题中消费
  • 你有多少消费者?
  • 只有一个消费者。 (说消费者群体)
  • 那个分区的数据可能过期了?也许尝试一个新的组 id 并从最新的偏移量消费。类似问题:github.com/confluentinc/confluent-kafka-python/issues/…

标签: apache-kafka kafka-consumer-api


【解决方案1】:

要诊断问题,您可以使用 kafka-tool。

以下命令显示特定组的分区、当前偏移量、日志结束偏移量和滞后 client_id

./bin/kafka-consumer-groups.sh --bootstrap-server kafkaAddres:9092 --group yourGroupId --describe

输出将是这样的:

TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                                     HOST            CLIENT-ID
input           0          3               4               1               consumer-1-f64504ca-f514-4cef-95fa-1652702d4504 /192.168.160.1  consumer-1
input           1          3               3               0               consumer-1-f64504ca-f514-4cef-95fa-1652702d4504 /192.168.160.1  consumer-1
input           2          3               3               0               consumer-1-f64504ca-f514-4cef-95fa-1652702d4504 /192.168.160.1  consumer-1

上面的输出显示,只有一个消费者连接并从所有分区读取。在检查分区 0 时,延迟为 1。

注意:某些分区可能是空的

【讨论】:

  • 我确实这样做了,我发现消费者组只是正确地重新平衡。有没有办法强制重新平衡?目前,我没有想法。简单地重新启动消费者会触发重新平衡。但是重新平衡没有用,因为同样的问题仍在继续(即从未分配过一个分区)
  • @irrelevantUser,为什么需要重新平衡? kafka-consumer-groups.sh 是否显示特定分区的组存在永久滞后?
  • 没错。只有一个分区存在滞后。我尝试重新启动消费者组(kafka 消费者进程),虽然我在kafka-consumer-groups.sh 中看到“消费者组正在重新平衡”消息,而进程重新启动发生,但重新平衡并不能解决问题。一旦 Kafka 消费者进程重启,它会继续从两个分区中读取,而另一个有问题的分区继续滞后。
  • @irrelevantUser,lag 分区的CURRENT-OFFSET 是向前移动还是不改变?
  • 它没有改变。仅适用于我拥有的三个分区之一。
【解决方案2】:

为了让您的新分区能够反映,您需要为您的使用者配置metadata.max.age.ms 属性。

元数据包含给定主题的分区以及哪些代理是这些分区的领导者等。这是由消费者在第一个 poll 发生时获取的,并在超时或发生某些错误后再次获取。

默认超时是300000ms = 5 minutes,所以直到 5 分钟你的消费者才能知道新的分区。

元数据在出现错误或达到元数据最大期限时刷新。

consumerProperties.put(ConsumerConfig.METADATA_MAX_AGE_CONFIG,"60000");

所以试着把它设置为低一些。

【讨论】:

    猜你喜欢
    • 2022-11-19
    • 2017-01-04
    • 1970-01-01
    • 2022-06-13
    • 2021-11-28
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多