AssertionError:未分配的分区

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AssertionError:未分配的分区相关的知识,希望对你有一定的参考价值。

我正在尝试通过设置偏移量来消耗主题中的数据,但会得到断言错误-

from kafka import KafkaConsumer

consumer = KafkaConsumer('foobar1',
                         bootstrap_servers=['localhost:9092'])
print 'process started'
print consumer.partitions_for_topic('foobar1')
print 'done'
consumer.seek(0,10)

for message in consumer:
    print ("%s:%d:%d: key=%s value=%s" % (message.topic, message.partition,
                                          message.offset, message.key,
                                          message.value))
print 'process ended'

错误:-

Traceback (most recent call last):
  File "/Users/pn/Documents/jobs/ccdn/kafka_consumer_1.py", line 21, in <module>
    consumer.seek(0,10)
  File "/Users/pn/.virtualenvs/vpsq/lib/python2.7/site-packages/kafka/consumer/group.py", line 549, in seek
    assert partition in self._subscription.assigned_partitions(), 'Unassigned partition'
AssertionError: Unassigned partition
答案

您必须在调用seek之前使用TopicPartitions列表调用Consumer.assign()。还要注意,寻求的第一个参数也是TopicPartition。参见KafkaConsumer API

另一答案

[对于我的Kafka 0.9kafka-python,在for message in consumer期间发生分区分配。因此,寻找操作应该在迭代之后。我通过以下代码重置了组的偏移量:

import kafka

ps = []
for i in xrange(topic_partition_number):
    ps.append(kafka.TopicPartition(topic, i))

consumer = kafka.KafkaConsumer(topic, bootstrap_servers=address, group_id=group)
for msg in consumer:
    print msg
    consumer.seek_to_beginning(*ps)
    consumer.commit()
    break
另一答案

这里是解决问题的示例:

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)

参考:kafka consumer seek is not working: AssertionError: Unassigned partition

以上是关于AssertionError:未分配的分区的主要内容,如果未能解决你的问题,请参考以下文章

Mocha:未捕获的 AssertionError:预期 200 为 404

为啥直接将 Arrays.asList() 分配给 var 时会出现 AssertionError?

ubuntu12.04如何给未分配空间创建新分区并且挂载上呢?

win10磁盘出现黑色未分配区怎么办?

在 AssertionError 的情况下在“断言”之后执行代码

win10分区,结果出现了一个黑色的未分配区,新建卷显示磁盘没有足够的空间来执行此操作,怎么还原呢??