我在Storm中使用KafkaBolt
将消息发布到各种Kafka主题。我想围绕发布逻辑放置日志记录和指标,以便可以针对发布失败时可能引发的任何异常创建警报。通过传递到KafkaProducer.send()
的Callback
函数来公开这些异常,该函数在发布成功或失败之后执行。
问题在于KafkaBolt
完全封装了其KafkaProducer
,因此无法注入自定义Callback
,因此,如果我想查看任何错误,我必须在Storm UI中查看。我通过为KafkaBolt
创建包装器来解决此问题。该包装器将依次将传入OutputCollector
的{{1}}包装在自定义KafkaBolt.prepare()
中,该自定义OutputCollector
会覆盖OutputCollector.reportError()
的行为。然后,我可以在其中添加自己的日志记录和指标报告代码,然后让其调用原始方法。
此解决方案似乎完全可以满足我的需要,但是KafkaBolt
使得以编程方式访问这些异常非常困难。我想知道是否可能缺少明显的东西,是否有更好的方法可以做到这一点。
答案 0 :(得分:2)
我认为您没有丢失任何东西,您可能只是第一个有此需求的人。有人必须解决此问题并决定解决此问题:)
如果您想更改螺栓以支持自定义错误处理(例如,通过允许用户按照您的建议提供回调),则可以在https://issues.apache.org/jira/projects/STORM/issues提出问题,并针对https://github.com/apache/storm/pulls。当然,也欢迎您提出问题,其他人可能会看到它并决定修复,但是您自己提供修复可能会更快。
中找到螺栓代码。