【问题标题】:Kafka use case to send data to external systemKafka用例将数据发送到外部系统
【发布时间】:2018-05-25 16:35:03
【问题描述】:

在研究kafka的文档中我找到了下一句:

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

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

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

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

将数据流式传输到外部应用程序的其他最佳实践方法是什么?或者 Kafka 是一个不错的选择?

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

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

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

    【讨论】:

    • 哇! 500 个主题是一个很大的数目。感谢分享经验,目前我们决定实现解决方案,仅使用主题供内部使用,并使用一些数据库解决方案将数据传输到外部系统。就像文章dzone.com/articles/… 中描述的一样。它将解决主题广泛增长、多线程、死信队列等问题。
    猜你喜欢
    • 2011-07-20
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2020-06-22
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多