防止Confluent Kafka在制作时丢失消息

时间:2018-12-13 09:32:56

标签: python apache-kafka confluent-kafka

Confluent Kafka库(在这种情况下为python版本)具有一个generate方法,该方法具有传递回调函数:

graph = TinkerGraph.open()
graph.io(graphml()).readGraph('air-routes.graphml')

此回叫称为是否成功发送邮件

g.V(2) 

如果消息失败,则此函数中没有任何重试逻辑,因为文档说它是异步的。

我每隔100条消息左右,而是依靠kafka_producer.produce(topic=topic, key=key, value=value, on_delivery=delivery_callback) 告诉我是否没有成功产生任何消息:

def delivery_callback(err, msg):

flush()会解释任何无法产生的消息吗? (报告为messages_outstanding = kafka_producer.flush() if messages_outstanding == 0: //continue to the next batch of 100 else: //produce the batch again 中的错误)

换句话说,我可以确定flush()在任何邮件失败的情况下不会返回零吗?

1 个答案:

答案 0 :(得分:0)

确认以下结果:

即使消息无法产生,调用.flush()绝对可以返回零。该方法似乎要等到所有邮件的所有传递回调都完成后(回调可以简单地报告邮件传递失败)。

从我们的角度来看,整件事都令人尴尬。如果您无法承受丢失消息的麻烦,则需要检测传递回调何时失败,并实施某种形式的重试逻辑以覆盖失败的消息。