在这种情况下,我应该生成新消息还是只消耗旧消息

时间:2018-05-31 03:07:39

标签: apache-kafka message-queue

对于订单子目录,我们生成Kafka消息A,该消息包括订单的所有30个字段。

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

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

哪一个遵循最佳做法以及为什么

2 个答案:

答案 0 :(得分:1)

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

  1. 服务器注册订单的效率更高,因为它只发送一条消息而不是2条消息。
  2. 对您的Kafka经纪人来说效率更高。如果发送两条不同的消息,则表示代理必须在其磁盘上存储更多数据。这可能是一个重大的开销,因为kafka维护多个消息副本以便在没有数据丢失的情况下处理代理失败,并将数据保留在代理上一段时间直到它过期。你发送给Kafka的消息越多,它对代理网络和cpu的压力就越大(特别是如果你正在进行压缩)。
  3. 在发生故障时减少竞赛条件的可能性。如果您发送了两条不同的消息,则可能需要处理或使用以下错误情况:
    • 考虑首先发送完整订单消息然后发送摘要订单消息的情况。在发送完整消息之后,但在发送摘要消息之前,服务器可能会出现故障。如果发生这种情况,您的监控系统将丢失数据Kafka确实有某种形式的交易可能会解决这个问题,但使用交易总会有性能损失。但是,如果您只发送一条消息,则不会出现此问题:)。

答案 1 :(得分:1)

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

加入新的消费者群体。