ApacheKafka—在这种情况下,我应该生成新消息还是只使用旧消息

fzwojiic  于 2021-06-06  发布在  Kafka
关注(0)|答案(2)|浏览(249)

对于订单提交,我们生成kafka消息a,该消息包括订单的所有30个字段。
现在,我们要创建一个新的订单实时监控系统。一个订单只需要8个字段。
问题来了。。我们应该在提交订单时生成新的kafka消息b,还是不需要并且只需要添加新的消费者来订阅现有的消息a?
哪一个遵循最佳实践?为什么

hivapdat

hivapdat1#

在我看来,最好添加一个新的消费者来订阅现有的消息。这种方法有一些优点。
注册订单的服务器效率更高,因为它只发送一条消息而不是两条。
对你的Kafka经纪人来说效率更高。如果您发送两条不同的消息,则意味着代理必须在其磁盘上存储更多数据。这可能是一个很大的开销,因为kafka维护消息的多个副本,以便在不丢失数据的情况下处理代理故障,并将数据保留在代理上一段时间,直到过期。而且,发送给kafka的消息越多,对代理的网络和cpu的压力就越大(尤其是在进行压缩时)。
在失败的情况下减少比赛条件的机会。如果您发送了两条不同的消息,则您必须处理或忍受一些错误情况:
考虑这样一种情况:首先发送完整的订单消息,然后发送摘要订单消息。有一种情况,服务器在发送完完整的消息之后,但在发送摘要消息之前,可能会失败。如果发生这种情况,您的监控系统将丢失数据。kafka确实有某种形式的事务可以解决这个问题,但是使用事务总是会有性能损失。但如果您只发送一条消息,则不会出现此问题:)。

1szpjjfi

1szpjjfi2#

同意@ilooner。与传统队列相比,kafka的主要优势在于,相同的数据可以被多次消费,消费群体不同。生产订单和订单摘要(订单字段的子集)将有1。磁盘空间的两倍(复制系数的两倍)2。n/w用量的两倍
加入一个新的消费群体。

相关问题