API文档位于:http://kafka-python.readthedocs.org/en/latest/apidoc/kafka.consumer.html
但是当我运行以下代码时,异常是%d格式:需要一个数字,而不是NoneType
client = KafkaClient("localhost:9092")
consumer = SimpleConsumer(client, "test-group", "test")
consumer.seek(0, whence=None)# (0,2) and (0,0)
run = True
while( run ):
message = consumer.get_message(block=False, timeout=4000)
except Exception as e:
print "Exception while trying to read msg:", str(e)
当我使用下面的代码时,例外是 seek()得到了一个意外的关键字参数' partition'
consumer.seek(0, whence=None, partition=None)# (0,2) and (0,0)
有什么想法吗?感谢。
答案 0 :(得分:0)
在《卡夫卡权威指南》中,有一个用Java(不是Python)编写的seek()
示例代码。
public class SaveOffsetsOnRebalance implements ConsumerRebalanceListener {
public void onPartitionsRevoked (Collection <TopicPartition> partitions) {
commitDBTransaction();
}
public void onPartitionsAssigned(Collection <TopicPartiton> partitions) {
for(TopicPartition partition : partitions)
consumer.seek(partition, getOffsetFromDB(partition));
}
}
} // these brackets are exactly the same as the book. I didn't change anything. You might want to though.
consumer.subscribe (topics, new SaveOffsetOnRebalance(consumer));
consumer.poll(0);
for ( TopicPartition partition : consumer.assignment())
consumer.seek(partition, getOffsetFromDB(partition));
while (true) {
ConsumerRecords <String, String> records = consumer.poll(100);
for (ConsumerRecord <String, String> record : records)
{
processRecord(record);
storeRecordInDB(record);
storeOffsetInDB(record.topic(), record.partition(), record.offset());
}
commitDBTransaction();
}