用于Kafka的合流Python API

用于Kafka的合流Python API,python,apache-kafka,kafka-consumer-api,confluent-platform,Python,Apache Kafka,Kafka Consumer Api,Confluent Platform,我发现官方合流Kafka Python API的基本用法有一个错误: 我同意: kafka_consumer.subscribe(topics=["my-avro-topic"], on_assign=on_assign_callback, on_revoke=on_revoke_callback) 使用回调: def on_assign_callback(consumer, topic_partitions): for topic_partition in topic_partitions:

我发现官方合流Kafka Python API的基本用法有一个错误:

我同意:

kafka_consumer.subscribe(topics=["my-avro-topic"], on_assign=on_assign_callback, on_revoke=on_revoke_callback)
使用回调:

def on_assign_callback(consumer, topic_partitions):
for topic_partition in topic_partitions:
    print("without position. topic={}. partition={}. offset={}. error={}".format(topic_partition.topic, topic_partition.partition,
                                   topic_partition.offset, topic_partition.error))

topic_partitions_with_offsets = consumer.position(topic_partitions)
print("assigned to {}->{} partitions".format(len(topic_partitions), len(topic_partitions_with_offsets)))

for topic_partition in topic_partitions_with_offsets:
    print("with position. topic={}. partition={}. offset={}. error={}".format(topic_partition.topic, topic_partition.partition,
                                   topic_partition.offset, topic_partition.error))
它生成控制台输出:

without position. topic=my-avro-topic. partition=0. offset=-1001. error=None
assigned to 1->1 partitions
with position. topic=my-avro-topic. partition=0. offset=-1001. error=KafkaError{code=_UNKNOWN_PARTITION,val=-190,str="(null)"}

有人能解释一下吗?为什么我会收到未知分区的回调通知?类似的代码在使用Java API时可以完美地工作。

这是底层C库librdkafka中的一个bug。 看


如果要开始使用存储的偏移量,实际上不需要调用position()来检索它们,如果不更改默认偏移量-1001,客户端将自动执行此操作。

这是底层C库librdkafka中的一个错误。 看


如果要开始使用存储的偏移量,实际上不需要调用position()来检索它们,那么如果不更改默认偏移量-1001,客户端将自动执行此操作。

Python客户端不会收到任何消息。这是一个简单的测试,我有一个Java等效程序,它可以执行完全相同的简单测试,并且工作得非常完美。我希望通过查看偏移量来深入了解Python客户端不接收消息的原因。Python客户端默认为auto.offset.reset=latest,这意味着从主题分区的末尾开始读取。如果没有生成新消息,消费者将看不到任何消息。要从头开始读取,请使用
conf={“default.topic.config”:{“auto.offset.reset”:“earliest”}
。请参见以下示例:Python客户端不接收任何消息。这是一个简单的测试,我有一个Java等效程序,它可以执行完全相同的简单测试,并且工作得非常完美。我希望通过查看偏移量来深入了解Python客户端不接收消息的原因。Python客户端默认为auto.offset.reset=latest,这意味着从主题分区的末尾开始读取。如果没有生成新消息,消费者将看不到任何消息。要从头开始读取,请使用
conf={“default.topic.config”:{“auto.offset.reset”:“earliest”}
。请参见以下示例: