kafka使用者寻求不起作用:AssertionError:未分配的分区

时间:2017-08-01 19:38:50

标签: kafka-consumer-api seek kafka-python

当我尝试从我的主题接收消息时,下面定义的kafka消费者con工作得很好;但是,当我尝试使用seek方法或其任何变体更改偏移量时,它会给我带来麻烦。即seek_to_beginningseek_to_end

from kafka import KafkaConsumer, TopicPartition

con = KafkaConsumer(my_topic, bootstrap_servers = my_bootstrapservers, group_id = my_groupid)
p = con.partitions_for_topic(my_topic)
my_partition = p.pop()
tp = TopicPartition(topic = my_topic, partition = my_partition)
print ('*** tp: ', tp)
con.seek_to_beginning(tp)

它会生成以下输出和以下错误:

*** tp:  TopicPartition(topic='mytopic', partition=0)
File "/myhome/anaconda3/lib/python3.6/site-packages/kafka/consumer/group.py", line 735, in seek_to_beginning
assert p in self._subscription.assigned_partitions(), 'Unassigned partition'
AssertionError: Unassigned partition

未分配的分区'错误对我来说看起来不合适,因为我只是从消费者本身获取分区和TopicPartition并将其传递回seek方法,因此它是明确分配的。 任何想法?

1 个答案:

答案 0 :(得分:1)

通过更改分区分配给我的消费者的方式,我能够找到一种方法来寻找我的主题分区。问题似乎是消费者无法使用默认订阅的主题分区,因此我必须更改构造函数以防止默认订阅主题,然后明确地将分区分配给我的消费者

from kafka import KafkaConsumer, TopicPartition

con = KafkaConsumer(bootstrap_servers = my_bootstrapservers)
tp = TopicPartition(my_topic, 0)
con.assign([tp])
con.seek_to_beginning()
con.seek(tp, 1000000)