我创建了一个带有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条答案
按热度按时间2ul0zpep1#
Kafka消费者推荐的配置要为每个消费者设置一个分区,Kafka配置需要以正确的方式设计。我建议每个主题的每个单线程使用者应该有相同数量的分区。这意味着,如果您想设置5个独占使用单个分区的使用者,则必须创建具有5个分区的主题。在您的情况下,可能需要使用
./bin/kafka-topics.sh --zookeeper localhost:9092 --alter --topic testKafka --partitions 5
命令。根据您的问题,由于主题已被部分消费,因此可能已将使用者配置为使用者组。同一组中的另一个使用者可能正在使用剩余的分区&因为使用者少于分区,所以分区是非活动的。
92vpleto2#
本周,我在使用spark streaming读取带有32个分区的kafka主题时遇到了类似的问题。具体来说,我们使用的是apache org.apache.spark.streaming.kafka010.*提供的spark kafka流类。
我们只能使用单个分区。问题是因为我们包括了Kafka的版本
0.10.1.0
用我们的jar。恢复到0.10.0.1
即使我们的群集已打开,也修复了它0.10.1.0
.