【发布时间】:2017-11-09 11:31:00
【问题描述】:
我正在向 Kafka 发布消息,这些消息被许多消费者使用。这些是幂等的,因此一条消息是否被多次使用都没有关系。
但是出于性能原因,我不希望我的(单个)生产者发布队列中已经存在的消息。假设消息只是 ID 字符串,因此很容易检查两条消息是否相等。
我认为 Kafka 并不能单独处理这种性能改进。是否有任何工具或概念可以帮助处理此问题?
【问题讨论】:
-
您不想发布重复项,因为您不希望它们被多次处理(甚至是幂等的),或者出于什么原因?您不想推送已经处理过的消息,还是只推送未处理的消息?除了 Kafka,你还能容忍哪些基础设施?您是否考虑过使用“压缩”主题?
-
是的 - 处理它们需要相当长的时间,因此队列中充满了需要时间处理的重复消息 - 这会延迟处理所有重复消息之后的其他消息。所以我的目标是:如果我要发布一条消息,我宁愿检查它是否已经在队列中(位置无关紧要),如果是,我不想发布它。我想我需要研究一下压缩,谢谢。
-
您是否允许发送已处理并从队列中取出的新消息?或者对于已经处理的消息也应该检测到重复?
-
是的。已处理的消息可以一次又一次地发布,甚至不得不发布。只是如果队列中已经有一些消息
A,我不希望将更多As 发送到队列,因为它们都将被处理,这需要时间并且无济于事,因为它们是幂等的。 -
是的,那么压缩主题可能会有所帮助 - 只是不要忘记在成功处理后发送具有相同密钥和空负载的消息
标签: java performance scala apache-kafka