汇合python kafka生产者发送回调消息。offset()返回0
Producer.send回调提供消息对象汇合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={}
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。谢谢作为主要作者,你能回答这个问题吗:完美。谢谢作为主要作者,您能否对此作出回应: