我正在向Kafka发布消息,这些消息被许多消费者使用。这些是幂等的,因此如果一条消息被多次消费并不重要。
但是出于性能原因,我不希望我的(单个)生产者发布队列中已存在的消息。让我们说消息只是ID字符串,因此很容易检查两条消息是否相等。
我认为单凭Kafka并不是为了应对这种性能提升。是否有任何工具或概念可以帮助解决这个问题?
答案 0 :(得分:1)
Kafka并不适合任何可以归结为在大海捞针中寻找针头的东西,因为你所能做的只是线性搜索。
通过使用具有更好查询支持的外部数据存储区,最好在Kafka中进行多次交付可能是最好的(Cassandra或Elasticsearch是这里的两个选项中的两个)。然后让生产者检查它要写的消息是否在该数据存储区中,并且您有该主题的消费者,其唯一目的是将消息写入该数据存储区。缺少基于大小的保留和键控方案,其中不同的消息具有相同的密钥,这应该是故障安全的(意味着我不能想到它是如何做的):您不会错误地决定不要写一条你应该写的信息。