汇合python kafka生产者发送回调消息。offset()返回0

汇合python kafka生产者发送回调消息。offset()返回0,python,apache-kafka,kafka-producer-api,Python,Apache Kafka,Kafka Producer Api,Producer.send回调提供消息对象message.offset() 这是使用: 合流kafka python库版本0.11.0 利伯卡夫卡:稳定的0.11.0(瓶装),头。通过Mac OS Homebrew安装 以下是简单的测试程序: import confluent_kafka import timeit def delivery_callback(error, message): print("delivery_callback. error={}. message={}

Producer.send回调提供消息对象
message.offset()

这是使用: 合流kafka python库版本0.11.0 利伯卡夫卡:稳定的0.11.0(瓶装),头。通过Mac OS Homebrew安装

以下是简单的测试程序:

import confluent_kafka
import timeit


def delivery_callback(error, message):
    print("delivery_callback. error={}. message={}".format(error, message))
    print("message.topic={}".format(message.topic()))
    print("message.timestamp={}".format(message.timestamp()))
    print("message.key={}".format(message.key()))
    print("message.value={}".format(message.value()))
    print("message.partition={}".format(message.partition()))
    print("message.offset={}".format(message.offset()))


def produce_string_messages(kafka_producer, topic_name, num_messages):
    start_time = timeit.default_timer()

    for i in range(num_messages):
        kafka_producer.produce(topic_name, value="cf-k test. v{}".format(i), on_delivery=delivery_callback)

    elapsed = timeit.default_timer() - start_time
    print("completed producing messages. They are queued for delivery. elapsed={}. elapsed/msg={}".format(elapsed, elapsed / num_messages))


if __name__ == "__main__":
    print("starting")

    conf = {
        'bootstrap.servers': "kafka-broker-1:9092"
    }

    kafka_producer = confluent_kafka.Producer(conf)

    print("opened KafkaProducer")
    produce_string_messages(kafka_producer, "my-string-topic", 3)

    print("flushing...")
    kafka_producer.flush()

    print("exiting")
产生:

starting
opened KafkaProducer
completed producing messages. They are queued for delivery. elapsed=0.000994920730591. elapsed/msg=0.00033164024353
flushing...
delivery_callback. error=None. message=<cimpl.Message object at 0x10f986ec0>
message.topic=my-string-topic
message.timestamp=(1, 1508451238822L)
message.key=None
message.value=cf-k test. v0
message.partition=0
message.offset=0
delivery_callback. error=None. message=<cimpl.Message object at 0x10f986ec0>
message.topic=my-string-topic
message.timestamp=(1, 1508451238822L)
message.key=None
message.value=cf-k test. v1
message.partition=0
message.offset=0
delivery_callback. error=None. message=<cimpl.Message object at 0x10f986ec0>
message.topic=my-string-topic
message.timestamp=(1, 1508451238822L)
message.key=None
message.value=cf-k test. v2
message.partition=0
message.offset=24
exiting
启动
开放式卡夫卡制作人
已完成生成消息。他们排队等候送货。已用时间=0.000994920730591。已用/消息=0.0003316424353
法拉盛。。。
送货上门。错误=无。信息=
message.topic=我的字符串主题
message.timestamp=(1150851238822L)
message.key=None
message.value=cf-k测试。v0
message.partition=0
message.offset=0
送货上门。错误=无。信息=
message.topic=我的字符串主题
message.timestamp=(1150851238822L)
message.key=None
message.value=cf-k测试。v1
message.partition=0
message.offset=0
送货上门。错误=无。信息=
message.topic=我的字符串主题
message.timestamp=(1150851238822L)
message.key=None
message.value=cf-k测试。v2
message.partition=0
message.offset=24
退出

请注意,
message.offset()
前两条消息为零,第三条消息为非零。如果我再次运行这个发送三条消息的测试程序,第三条
消息.offset
将增加3。这看起来像是一个错误,
message.offset()
经常错误地返回0。

出于性能[1]原因,交付报告仅为生成的批次中的最后一封邮件提供有效的偏移量。通过将
product.offset.report
topic-level-configuration属性设置为true,可以更改此属性以为批处理中的所有消息提供适当的偏移量,如下所示:

p = confluent_kafka.Producer({'bootstrap.servers': ..., 
                              'default.topic.config': { 'produce.offset.report': True } })
我们将在Python客户机的未来版本中将默认值更改为True


[1] :它避免了对批处理中的消息进行线性扫描,但在Python land中,性能影响很小且不相关,因此无需担心。

出于性能[1]原因,交付报告仅为生成的批处理中的最后一条消息提供有效的偏移量。通过将
product.offset.report
topic-level-configuration属性设置为true,可以更改此属性以为批处理中的所有消息提供适当的偏移量,如下所示:

p = confluent_kafka.Producer({'bootstrap.servers': ..., 
                              'default.topic.config': { 'produce.offset.report': True } })
我们将在Python客户机的未来版本中将默认值更改为True


[1] :它避免了对批处理中的消息进行线性扫描,但对性能的影响微乎其微,而且与Python无关,因此无需担心。

Perfect。谢谢作为主要作者,你能回答这个问题吗:完美。谢谢作为主要作者,您能否对此作出回应: