【问题标题】:Should i produce new message or just consume old message in this case在这种情况下我应该生成新消息还是只使用旧消息
【发布时间】:2018-05-31 20:52:51
【问题描述】:

对于订单提交,我们生成 Kafka 消息 A,该消息包含订单的所有 30 个字段。

现在,我们要创建一个新的订单实时监控系统。我们只需要订单的 8 个字段。

问题来了..我们应该在提交订单时产生新的Kafka消息B,还是我们不需要并且只需要添加新的消费者来订阅现有的消息A?

哪一个遵循最佳实践以及为什么

【问题讨论】:

    标签: apache-kafka message-queue


    【解决方案1】:

    在我看来,最好添加一个新的消费者来订阅现有的消息。这种方法有几个优点。

    1. 服务器注册订单的效率更高,因为它只发送一条消息而不是 2 条。
    2. 它对您的 Kafka 代理更有效。如果您发送两条不同的消息,则意味着代理必须在其磁盘上存储更多数据。这可能是一个很大的开销,因为 kafka 维护多个消息副本以便在不丢失数据的情况下处理代理故障,并将数据保留在代理上一段时间直到过期。此外,您发送给 Kafka 的消息越多,代理的网络和 CPU 压力就越大(尤其是在您进行压缩时)。
    3. 减少发生故障时出现竞争条件的机会。如果您发送了两条不同的消息,那么您将不得不处理或忍受一些错误情况:
      • 考虑先发送完整订单消息然后发送摘要订单消息的情况。有一个极端情况,服务器在发送完整消息之后但在发送摘要消息之前可能会失败。如果发生这种情况,您的监控系统将丢失数据。 Kafka 确实有某种形式的事务可能会解决这个问题,但使用事务总是会降低性能。但是,如果您只发送一条消息,您将不会遇到此问题 :)。

    【讨论】:

      【解决方案2】:

      同意@ilooner。与传统队列相比,Kafka 的主要优势是可以使用不同的消费者组多次消费相同的数据。 生产订单和订单摘要(订单字段的子集)将具有 1.两倍的磁盘空间(乘以复制因子) 2. N/w 使用量的两倍

      加入新的消费者群体。

      【讨论】:

        猜你喜欢
        • 2019-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-26
        • 2021-08-01
        • 2018-04-02
        • 2017-03-05
        • 1970-01-01
        相关资源
        最近更新 更多