在KafkaBolt中公开Kafka发布例外

时间:2018-08-02 15:16:05

标签: java apache-kafka apache-storm kafka-producer-api

我在Storm中使用KafkaBolt将消息发布到各种Kafka主题。我想围绕发布逻辑放置日志记录和指标,以便可以针对发布失败时可能引发的任何异常创建警报。通过传递到KafkaProducer.send()Callback函数来公开这些异常,该函数在发布成功或失败之后执行。

问题在于KafkaBolt完全封装了其KafkaProducer,因此无法注入自定义Callback,因此,如果我想查看任何错误,我必须在Storm UI中查看。我通过为KafkaBolt创建包装器来解决此问题。该包装器将依次将传入OutputCollector的{​​{1}}包装在自定义KafkaBolt.prepare()中,该自定义OutputCollector会覆盖OutputCollector.reportError()的行为。然后,我可以在其中添加自己的日志记录和指标报告代码,然后让其调用原始方法。

此解决方案似乎完全可以满足我的需要,但是KafkaBolt使得以编程方式访问这些异常非常困难。我想知道是否可能缺少明显的东西,是否有更好的方法可以做到这一点。

1 个答案:

答案 0 :(得分:2)

我认为您没有丢失任何东西,您可能只是第一个有此需求的人。有人必须解决此问题并决定解决此问题:)

如果您想更改螺栓以支持自定义错误处理(例如,通过允许用户按照您的建议提供回调),则可以在https://issues.apache.org/jira/projects/STORM/issues提出问题,并针对https://github.com/apache/storm/pulls。当然,也欢迎您提出问题,其他人可能会看到它并决定修复,但是您自己提供修复可能会更快。

编辑:您可以在https://github.com/apache/storm/blob/master/external/storm-kafka-client/src/main/java/org/apache/storm/kafka/bolt/KafkaBolt.java

中找到螺栓代码。