Kafka用例将数据发送到外部系统

时间:2018-05-25 07:55:08

标签: apache-kafka

在我发现的下一句话的文件中学习kafka:

排队是大多数人想到的标准消息传递类型:消息由应用程序的一部分生成,并由相同应用程序的另一部分使用。其他应用程序对这些消息不感兴趣,因为它们用于协调单个系统的操作或状态。此类消息用于发送电子邮件,分发由其他在线应用程序计算的数据集,或与后端组件协调。

这意味着Kafka主题不适合将数据流式传输到外部应用程序。但是,在我们的应用程序中,我们将Kafka用于此目的。我们有一些消费者从Kafka主题中读取消息并尝试将它们发送到外部系统。通过这种方法,我们遇到了许多问题:

  1. 每个外部应用程序都需要一个separet主题(假设外部应用程序编号的数量> 300,不适合)

  2. 当外部应用程序不可用或出于其他原因,发送到外部系统的消息可能会失败。保持重试以发送相同的消息而不提交偏移量是不正确的。另一种方法是,当我看到所有失败消息并尝试重新发送时,没有配置良好的日志。

  3. 将数据流式传输到外部应用程序的其他最佳实践方法是什么?或卡夫卡是一个很好的选择吗?

1 个答案:

答案 0 :(得分:1)

分享一段经验。我们广泛使用Kafka在企业环境中集成外部应用程序。

  1. 我们使用 topic-per-event-type 模式。目前的主题数量约为500个。治理很困难,但我们有自己的实用工具,所以这是可行的。
  2. 在可能的情况下,我们会扩展外部应用程序以与Kafka集成。因此,消费者成为外部应用程序的一部分,当应用程序不可用时,他们就不会提取数据。 如果无法扩展外部系统,我们使用连接器,这些连接器主要由我们内部实现。我们区分两种类型的错误:可恢复和不可恢复。如果错误不可恢复,例如,消息已损坏或无效,我们会记录错误并提交偏移量。如果错误是可恢复的,例如,用于编写消息的数据库不可用,那么我们不提交消息,暂停消费者一段时间,然后再尝试。在您的情况下,有更多主题具有不同的行为(记录错误,将失败的消息重新路由到不同的主题等等)可能是有意义的。