Kafka Consumer不会消耗来自所有分区的消息

时间:2016-12-27 01:07:00

标签: apache-kafka kafka-consumer-api

我创建了一个包含10个分区的Kafka主题,并尝试通过单个kafka使用者使用消息。但是,kafka使用者不会从所有分区读取消息。更具体地说,它仅消耗来自5个特定分区的消息。  示例:消费者仅消费来自[0,1,2,3,4]的消息。并且在重新启动后如果它开始消耗来自[5,6,7,8,9]的消息,那么它将仅消耗来自这些分区的消息。 这是kafka-consumer-offset-checker.sh命令的输出

Group|Topic   | Pid | Offset   | logSize| Lag      |  Owner
GRP1 | topic1 | 0   | 128      | 175    | 47        |  none
GRP1 | topic1 | 1   | 117      | 146    | 29        |  none
GRP1 | topic1 | 2   | 62       | 87     |  25       |  none
GRP1 | topic1 | 3   | 101      | 143    | 42        |  none
GRP1 | topic1 | 4   | 104      | 145    | 41        |  none
GRP1 | topic1 | 5   | 118      | 118    | 0         |   none
GRP1 | topic1 | 6   | 111      | 111    | 0         |   none
GRP1 | topic1 | 7   | 161      | 161    | 0         |   none
GRP1 | topic1 | 8   | 144      | 144    | 0         |   none
GRP1 | topic1 | 9   | 171      | 171    | 0         |   none

有谁知道为什么会发生这种情况......?

2 个答案:

答案 0 :(得分:0)

本周我在使用spark streaming从具有32个分区的kafka主题中读取时遇到了类似的问题。具体来说,我们使用了apache org.apache.spark.streaming.kafka010.*提供的spark kafka流媒体类。

我们只能从单个分区消费。问题是因为我们在我们的jar中加入了kafka版本0.10.1.0。即使我们的群集在0.10.0.1上,也会恢复0.10.1.0修复它。

答案 1 :(得分:0)

Kafka Consumer推荐的配置 要为每个使用者设置单个分区,需要以正确的方式设计Kafka配置。我建议您每个主题的每个单线程使用方应具有相同数量的分区。 这意味着,如果要设置5个消费者专用的单个分区,则必须创建具有5个分区的主题。在您的情况下,您可能必须使用./bin/kafka-topics.sh --zookeeper localhost:9092 --alter --topic testKafka --partitions 5命令减少分区数。

根据您的问题,由于主题已被部分消耗,因此可能已将使用者配置为使用者组。同一组中的另一个使用者可能正在消耗剩余的分区,并且由于使用者少于分区,因此该分区处于非活动状态。