java - 卡夫卡 : Publish message only if it doesn't already exist

标签 java performance scala apache-kafka

我正在向 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/

相关文章:

Scala编译错误

java - 当字节数组不为空时,字节数组抛出空指针异常

arrays - 支持 O(1) 随机访问和最坏情况 O(1) 附加的数据结构?

scala - Spark 应用程序抛出 javax.servlet.FilterRegistration

performance - 对于已更改的文件,rsync 真的更快吗?

c++ - 确定景观中所有点与具有特定属性的点的距离的最快方法

scala - scala.mobile 应该完成什么任务?

在java中解析json时,java.util.Vector无法转换为java.util.ArrayList错误

java - 如何通过Java程序执行docker命令

java - 通过网络访问 jasper 报告