我在我的localhost上设置了Kafka,并尝试在发生网络问题时监控Kafka Producer的行为。
即使所有经纪人都失败了,制作人也不会给出任何错误。 我正在使用同步制作人和Kafka版本0.8。
如果所有经纪人都关闭,生产者是否有任何方式可以收到异常?
答案 0 :(得分:1)
这取决于您的制作人配置(producer config)
特别注意参数:
(METADATA_FETCH_TIMEOUT_CONFIG, 60000),
(TIMEOUT_CONFIG, 10000),
(RETRY_BACKOFF_MS_CONFIG, 100),
(RECONNECT_BACKOFF_MS_CONFIG, 1000)
您一定要更改有关设置的参数。所有这些都会影响生产者的行为。
答案 1 :(得分:0)
请在制作人中添加异常处理:
try{
Producer logic
}
catch (Exception ex) {
String errorMsg = "Failed to publish events";
logger.error("Failed to publish events", ex);
result = Status.BACKOFF;
如果它还没有工作,请告诉我。
答案 2 :(得分:0)
Java / Scala(异步生成器)中较新的8.2生成器为每条消息传递了一个Callback方法。您可以尝试处理回调中的失败。可能会重试。回调方法有两个参数(Exception和MessageMetatData)。任何时候都只能设置一个。成功发送邮件时设置了Meatadata,如果出现错误则设置为Exception。
使用同步生成器虽然你必须设置max.retries和其他配置,如@leshkin指出的那样。