我正在向 Kafka 发布消息,这些消息被许多消费者消费。它们是幂等的,因此一条消息被多次使用并不重要。
但是出于性能原因,我不希望我的(单个)生产者发布队列中已存在的消息。假设消息只是 ID 字符串,因此很容易检查两条消息是否相等。
我认为 Kafka 本身无法应对这种性能改进。有没有任何工具或概念可以帮助解决这个问题?
最佳答案
Kafka 并不适合大海捞针,因为你所能做的就是线性搜索。
在 Kafka 中获得很少的多次交付可能最好通过使用具有更好查询支持的外部数据存储来实现(Cassandra 或 Elasticsearch 是这里众多选项中的两个)。然后,您让生产者检查它想要写入的消息是否在该数据存储中,并且您有一个主题的使用者,其唯一目的是将消息写入该数据存储。缺少基于大小的保留和不同消息具有相同 key 的键控方案,这应该是故障安全的(意味着我无法想到它是如何不安全的):您不会错误地决定不写您应该写的消息写。
关于java - 卡夫卡 : Publish message only if it doesn't already exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47120856/