我有一个非常奇怪的问题,我在Scala中实现了一个Kafka Producer客户端,当Kafka集群启动时,一切正常。也就是说,Producer正确地将数据推送到Kafka。
但是,如果我将我的生产者设置为'async',那么如果群集已启动并正常工作,Kafka Producer客户端将正确放置数据,但生产者也会将数据推送到......无效...如果群集下来了!也就是说,如果群集关闭,Kafka Producer不会返回错误。
这是我关注的问题,因为当Producer找到要推送到Kafka的数据时,它会删除该数据源......所以如果群集发生故障,生产者将只销毁所有源数据。
如果将Producer设置为'sync'模式,则根据属性(我认为message.send.max.retries),Producer在默认3次重试后正确失败。
这里有什么想法吗?
答案 0 :(得分:1)
这是异步生产者的记录行为。如果您确实关心消息是否发送给代理,请使用sync-producer。
或者,更好(尽管还没有完全记录),使用Kafka 0.8.2-beta和新的制作人 - 这可以让你异步发送消息,然后检查返回的" future"状态对象。